Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. === Purpose === Think about the purpose of the software you write, it should be helping somebody. We should design systems that can be easily maintained so that they can continue to be as helpful as possible. === Simplicity === We should struggle to design our software the simplest possible way. Aim for helping others understand the software. Resist (unnecessary) change. Control complexity, do not create it. The desirability of a change matches its value divided by its required implementation effort. === Consistency === Do not keep forcing others to relearn the way the system works. === Planning === Do not solve a big problem, divide it in small ones. Think before acting. Perfection is the enemy of good. Be only as generic as you need right now. Code should be designed based on what you know now. === Productivity === Keep your code base as small as possible. === Testing === Test everything. === Commenting === The real purpose of comments is to explain why, not to explain what. === Teams === Ask for help. sw_design_lessons_learned.txt Last modified: 7 years agoby admin