In this continually growing connected world, software upgrade has become a must-do feature and a defacto standard in almost all the embedded systems. There is no individual software upgrade strategy which suits all the systems, but there will be important questions one might have to answer when developing the software upgrade approach for their systems. This paper looks at various approaches and outlines several design decisions to explore when applying a software upgrade mechanism into an embedded system. The author presents different methods that have been experimented in various projects and solutions that are practically proven.