Below I have compiled a list of 6 personal (overall) viewpoints about software development philosophy that I find particularly important when successfully running software projects. Some of them might be obvious (?), but then maybe not as I have observed that many projects don’t really adhere to them. In fact, in many projects, they do the opposite intentionally thus resulting in significant delays, cost overruns, unsatisfied users/customers and missed opportunities.
Recommended for you 5 daily habits to become a productive developer
1. Quality pays
Time and resources spent on quality give a positive return on investment on development time, development costs, team and customer satisfaction etc. When you spend resources on quality related tasks at the start of the development process the ROI only gets better. For example, it can be 100-1000 times less costly finding bugs in requirements or design than in a shipped solution. Unfortunately, many projects are not managed with this fact in mind. Because of that many developers don’t have a good enough grasp of quality issues.
2. Careful risk-management
An essential part of every successful project is risk-management. In particular, I find it important to limit scope of the solution/version worked on (not trying to do too many – possibly half baked – things at the same time), involve users from the beginning, consistent focus on writing well-crafted maintainable software (avoiding technical debt) and to address technical risks early on (like for instance scalability, performance or integration-issues).
3. Set clear goals
People, development process, technology, and clear goals are all important for success. Even great developers fail at projects if a process is wrong, technology has major problems or goals are unclear. In particular, the value of a good R&D process is often underestimated. For larger projects, average developers all following a good software process will perform far better than great developers following a bad process.
4. Long-term priorities
Remeber they must be balanced with short time priorities. Quick workarounds, hacks and half-baked solutions may help to accomplish some business goals on the short term. However, unless addressed and reworked afterward they risk permanently lowering the quality of the solution. There is also the risk of imposing a technical debt that will effectively tax all future development. After many such short-term solutions, it is likely that development productivity will decrease substantially to the point where new features or bug fixes that should take hours will consistently take days or longer.
5. Upgrade your system
Use modern efficient technology as long as they are not bleeding cutting-edge. You should use modern technology before it gets mainstream only if it offers substantial benefits and is actively maintained. Even better if they have a significant growing community, reasonable tool support and training/support.
Note that besides obvious technical benefits and savings, use of non/pre-mainstream technologies also helps attract the very best developers.
6. Automate your software development
Investment in automation is key for efficient (agile) software development. Partly to save costs in the long run, partly to be more agile and responsive. In particular automate the build pipeline, deployment tasks and (most) technical tests used for regression. Beware that some automation efforts like for example GUI test automation require special skills and tools to do right (high risk of failure or low ROI if done wrong).