Thursday, 21 May 2009

Best Software Development & Design Principles

I would like to write about what I think are best software development and design principles:

Simplicity
Have you seen spagetty code? I believe in breaking the complexity into smaller and simpler parts so that each part are simple to understand, write and change.

Reusability
Why should you write the same code, like data access layer, 100 times in each application while the pattern of its generation is the same? We should look for patterns where it's simpler to make our codes reusable and packagable. Think about where you can generate code. See how you can design your code to be more reusable or where you can use reliable hirdparty tools; you don't have to write everything yourself, there are plenty of good tools in the market that may meet your needs.

Extensibility
The requiremetns always change. We should think about future in what extent our application is going to be extended and are we designing and developing the components in a way that extensibility will be supported. Think about where you can design the software more configurable.

Iterative Development
You don't have time to sit down and document all peices of requirements and design in the most perfect way. Design, develop and deliver iteratively in short springs/iterations e.g. 1-2 weeks. You will be able to get feedback sooner so that the changes will be made clearer and sooner.

Write Tests
Writing unit and integration tests is sometimes the most boring/challenging and time consuming part but it pays off when you use the right tools and consider the benefits such as high quality, changable software, bug free software, happier customer ...

Refactor
Spend time for refactoring your existing production and test code; refactoring has so many benefits some of which are listed here. Not doing so can lead to have bad spaghetti code that which not only others cannot understand easily but also you yourself won't understand it few months later!

Learn Consistently
Many problems that you are going to solve are alread solved! Spend time regularly to learn more about refactoring techniques, design patterns, and new technologies. Find and read good blogs.

Join Communities of Mutual Interest
You will not be a successful developer if you rely only on yourself always and don't learn from others or share with others. Also you will miss so many opportunities that communities provide. Join forums, such as asp.net or msdn forum, to discuss issues or design/development questions. Join communities. Attend events and meet people with whom you have mutual interest. Go out there, share what you know and learn what others share.


No comments: