Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
up vote 5 down vote accepted

By Implementing A strongly Designed system. with the best design patterns suited for the job.

In software engineering, extensibility (sometimes confused with forward compatibility) is a system design principle where the implementation takes into consideration future growth. It is a systemic measure of the ability to extend a system and the level of effort required to implement the extension. Extensions can be through the addition of new functionality or through modification of existing functionality. The central theme is to provide for change while minimizing impact to existing system functions.

Few Important Aspects.

share|improve this answer

Your code is more likely to be extensible if you follow the SOLID Priciple. Many of these come for free if you do testdriven development

share|improve this answer

Write modular code that is loosely coupled. This allows for extension in stages.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.