Tradeoffs in Software Development
2020, December, 27
Scribbling down some thoughts on tradeoffs in software development
Build Fast Vs Build Right
Build Fast : Create working feature as fast as possible even though the implemenation may not be optimal.
Pros: Users get to use the features soon which can lead to faster feedback cycle.
Cons: Since implementation is not well thought out, it could lead to code refactor and technical debt in future.
- When requirements are not clear or more user feedback is required, Build Fast.
Build Right : Take time to think through the requirements of the feature and come up with an optimal solution. This might involve brain-storming multiple ideas before investing time in implemention.
Pros: Solution is more likely to be stable, performant and scale well in the future.
Cons: Takes time to develop and deliver the working feature to users, resulting delayed feedback.
- When creating anything that needs to be reused, Build Right
Build for Today Vs Build for Future
Build for Today: Implement a feature based on today's requirement. Not adding anything extra for undecided future requirements.
Build for Future: Implement a feature based on possible future requirements that could emerge but user has not requested for yet.
- When deciding whether to add an extra functionality that is not currently required, try to answer the question, what will the cost (time/money) to add this later ? If it's a small change then do not add it now. Unused features increase complexity.
- Differenciate between we really need this vs this is nice to have
Build Vs Buy
Build: Spend resourced to build a required functionality in-house.
Pros: Better control
Cons: Reinventing the wheel
- If it's something that needs to be customized a lot or is part of the business's core competency, it's best to build it on own for better control.
Buy: Purchase an off-the-shelve solution from a vendor.
- If it's not part of core competency and does not directly impact customer experience, then buy it.