How many times are you supporting or developing system and felt it could have been better designed?
Move fast and break things culture in software has allowed engineering team to get product early to market but has created huge
Tech Debt that team has struggled to come over.
Engineering team is put under feature pressure to get the things done and other important things are left as nice to have.
Important things in system are put as “Non Functional” requirement but in reality these are the requirement that are must for system to be functional in long run.
In real engineering project like civil engineering people are trained to think about
- What material to use ?
- How many people it can accommodate ?
- When maintenance must happen ?
- Where are the emergency exit ?
- How to evacuate in case of emergency ?
But many Software system are build without thinking about basic Operations or Support requirement.
These cutting edge fails to delivery to basic engineering needs if no upfront thought is put in.
As a software engineer we have to think about Design Pressure as first thing. What are these design pressure ?
- How service executes ?
- What load it can handle ?
- It is possible to run it on developer laptop ?
- Is it possible to debug it ?
- How Coupling is used or Cohesion is used ?
- Does it support automated packaging or deployment ?
- Is it testable or maintainable ?
- Single responsibility or multiple responsibility ?
- Separation of concerns ?
- Can you observe system from outside ?
- Does system has pipeline or chokeline architecture
- What are system dependency or it needs whole world
- Does it capture metrics or you have to make a guess.
- Does it fit in your HEAD or you need BIG head or multiple HEAD
These are things that are very difficult and expensive to add later.
The reason why we don’t look at these things first is because “We get bored” or “We like complex” or “We want to copy what google or facebook does”. Not every company has problem that google or facebook is facing so we should be careful in picking tools/tech that is used by big internet company. I want to end with “tale of two value” of software system.
Software developer are hired to build new features and stakeholders work closely to get this thing implemented. This is the “what” part of Software.
If this part is done properly then Software remains “Soft” or it becomes Big ball of mud. This is “How” part and engineer has to take all the responsibility of this. Both the value of system are important and urgent, but more focus is put on behavior because it becomes Urgent as soon as project starts.
If we ignore “Design Pressure” then system will become costly to develop & making changes will be impossible. Let me know about your experience with Design pressure.