I have gone through that dance often enough. It ends up being more time consuming than doing it right in the first place each and every time.
I have gone through that dance often enough. It ends up being more time consuming than doing it right in the first place each and every time.
From the example in the article, if it would take them 2 months to build a robust email delivery system or 2 weeks to put a temporary hack in place, it could be worthwhile to the business to do the hack if it means they can start user-testing 6 weeks earlier.
Also, if they're still in the product-fit stage of their business development, they might find that the product isn't as useful/worthwhile as they thought, and scrap it after 2 weeks testing. This would allow 6 weeks of overall developer effort to be spent on another initiative.
Just because you know that developing throwaway code is waste, doesn't mean it's necessarily a bad business decision.
- be able to switch to other, more important tasks more quickly;
- allow the business to better discover what the actual requirements are while they have an MVP solution in place.
Resources are finite: you only have a limited number of engineers, and the business needs to be moving forward. This approach allows you to do so, while mitigating a lot of risks at the same time.
The costs are not lost: they bring back business value in terms of fast progress, and mitigates risks.
I worked at a company where there was an API and an explicit place for such hack code, for consultants to customize the product. The way it was done, was to ensure such code was a pure leaf.
If this has happened, your encapsulation was insufficient or you waited too long to replace the stop gap solution or maybe your documentation wasn't clear about what assumptions made by the throwaway component are safe to make in the main codebase.
> The only time when it can actually be allowed is when it it concerns a feature that is a pure leaf in the system with nothing else built on top of it.
I think the article's description of when stopgap solutions should be used is far better. Yes, a leaf feature is likely to have fewer encapsulation issues, but that is only part of it.