Addressing Tech-Debt
As the business grows quickly, need for more features and quick demands for software delivery builds up. I have worked in organizations who took short cuts and worry about it later. . I have also worked in companies, who were very methodical and managed it very well.
In most cases, engineering managers are coached to say 'no' or pad up the schedules :-). Or coached to come up with excuses like system is complex or I inherited it.
In-fact answer in neither of the two. My answer would be, be 'realistic' and be 'prepared'. So, you have to do both(deliver quickly and well).
Be realistic means, making an argument that, how short-term solutions will impact long term objectives. Be "ready' means, anticipate these situations always and be prepared. Be prepared in terms of having solid technical foundations. I recommend, people to always in 'refactor' mode.
So following things comes to the mind.
1. As and engineer, Be in "refactor' mindset always. There are always opportunities to improve and be ready.
2. As an Engineering Leader, encourage your teams to always learn and adapt new technologies. Allocate certain amount of time in each sprint for tech-improvements.
3. Don't overlook value automated testing brings. Investing in it is worth it.
4. Invest in Dev-ops, enabling "motivated" developers.
5. Don't be complacent. We are in tech business, things change very quickly. If you are in mobile software, you know apple and customers will force you to change very quickly.
6. Design the software with basic rules, ex: if you are building backend software, stick with basic principles of building for performance, reliability and service oriented/api based, separation of concerns etc.
If you like to know more about this, please contact us.