I am thinking about how software like Microsoft Windows grows from small as MS-DOS to Windows 7, Adobe Photoshop from its first version to version CS5. What techniques were used to accomplish this? Did they extend their software from the existing software or redesign for the next version? Or have they already planned their software solidly before they built them?
It's hard for me to extend my application/software when I need to add new features and it makes a mess of other existing features. How can I improve my software's extensibility so that I can easily add new features to your software?