Aristocracy, Democracy & System Design
What is your preferred implementation strategy, a complex system with more functionality or a simple system with less functionality?
There is no simple answer to this complex puzzle. A complex system is difficult to learn but easier to use. A simple system is easier to learn but makes complex functionalities difficult to implement. There is always a trade-off.
Whatever you choose as your implementation strategy, one important thing to consider here is conceptual integrity i.e. system design must follow a consistent philosophy.
But is it possible to achieve that in a solution implemented by multiple minds?
The Aristocrat’s Mindset:
How the system will be implemented, will be dictated by a few architects of the system, which include functional and technical team members.
The Democrat’s Mindset:
Aristocrats don’t know the limitations encountered during implementations, hence let all minds work on the problem at the same time. Anyways we are short of time.
A Pragmatic Approach:
There are 2 challenges posed here:
1. Distribution of work
2. Timing of phases
Both the mindsets have their merits so let's try to marry the two.
A pragmatic approach here will be to split the responsibilities and implement the phases sequentially. The design phase should be the phase where the architects design the system. In the second phase, the implementation team is hired to implement the solution. The design team then works with the implementation team and to execute the design and modify it if is required and have consistency in how the exceptions are being implemented.
Wait this is 2021 and not 1975, isn’t everyone is agile?
My View: The technical and functional design is the blueprint of the system. Trying to create these things along with implementation results in little conceptual integrity and loose blocks in the system. The implementation can be agile but the blueprint and the principles have to be ready before the implementation.
Still, you might to tempted to ignore the argument and get started and show results early in the project. It is just going to delay the inevitable. A system with low conceptual integrity is error-prone and difficult to debug and maintain. So you might be able to show results in the beginning, but it will hit you back at the time when the end looks close, the system goes in to test, the budget is nearing its end and the go-live is scheduled.
The decision is yours.