The Software Design Philosophy: Discussing Code Complexity
Software design is the process by which an agent creates a specification of a software artefact intended to accomplish goals, using a set of primitive components subject to constraints. As the software and design project becomes more and more complex, there are chances it might reach pinnacle of nexus too soon. However, the the code quality is often not the highest priority in most design choices.
Developers usually get away with easy fixes and a quick to complete mindset in smaller projects. But as soon as the complexity increases, the cracks may begin to show. It ultimately, comes down to the art of balancing between time and effort which is the fundamental investment for any software project in an organisation.
Tactical vs Strategical Development
The development teams may spend days, weeks, months, and maybe even years building an application. However, when doing so the team should be capable of seamlessly switching between the two proven strategies according to the business and technical requirements.
To fight against the complexity dilemma, the development teams need to clearly distinguish their game plan between tactical and strategic approaches. While the tactical way is focused on getting something to work, the strategic way aims to produce a quality design that also solves the immediate goals but with more time and effort.
The common and proven way of development is to never go through major design phases upfront. Instead, you should be doing lots of incremental design improvement work over time and that is slightly different than just “doing Agile”, because Agile is too focused with features. On a larger product development, organisations work in a way that they are not inherently designed to be solvable but benefit from the mix and match of approaches.
Every approach has its exceptions, and every principle has its limits. If you take any software design idea to its extreme, you will probably end up in a bad place. Beautiful architectures reflect a balance between competing ideas and approaches. There is quite a bit of scientific evidence that outstanding performance in many fields is related more to high-quality practice than innate ability.