[OPINION] Solve Technical Debt: Expectation vs Reality
--
How to solve tech debt without create a new tech debt? :]
In a startup tech company, it is often that we need to create a big decision about the development feature in our application. You only have a few team mates and it is quite hard to create a scalable application. Your boss ask your team to deliver the features as soon as possible. Guess what happened next? Your team is going to create an application without implementing any software engineering best practices. Without any strategies, what do you cares right now is your team can deliver a new feature to the users before your company’s competitors did it.
Time flies so fast, your application is now become a giant unscalable buggy application. There are no unit testing, no automation testing, and it spend more time in the regression phase. Your feature development timeline is often distracted by the critical bugs found in the regression, and switching context happened between developing feature and fixing bug. Your application is monolith and already have a ton of features, slow build time, slow delivery to the QA, and you need to work overtime again. The team is really frustrated, most of engineers feel burn out, and they can leave the company and find the better place.
Someday your boss realize this problem and decide to fix it, but this is just the beginning. This problem is not easy to solved. Every decision that made has the consequences. How your team design the plan, the roadmap, the new design of your application, will determine your team life in the future.
How To Solve a Big Tech Debt?
Personally I still don’t have an answer. I just a rookie software engineer with 2+ years experience in the professional world. I don’t have any experience how to dealing with this kind of problem. But I’ve been in this condition right now, try to solve a ‘giant mountain’ problem, and it become even worst right now because our wrong plan and decision.
Yes I still don’t have an answer, but I can give some small tips if you have this kind of problem and your boss and team decide to solve it, of course to have a better life :]
- Realistic
Yes you need to realistic. Watch your company situation, even your team have a big technical debt, believe me your first priority is still the company business. At the end your user doesn’t care about your new technical stack, they just care about the good application with minimum bug. So at the first you need to write down every possible constraint that might appear. - Focus on the Problem, Reduce your ego
As a software engineer, it is normal if we like a new cool technology and want to implement it to our project. But again, in this kind of situation you have to reduce your ego as best as you can. The new hype technology doesn’t mean it can solve your problem easily, maybe the old school technology might solve your problem. Less is more, you have to pick the technology, design, or whatever it is based on the problem. Again, always remember about the consequences, every decision has a big impact to your company. - You Can’t Make Everyone Happy
Whatever decision that you made, it is impossible to make everyone happy. If you already have a plan, then just go ahead. You can’t make an instant impact, alway iterate it, improve it, and always make a progress. - Don’t Forget Team Sanity
Last but not least, your team sanity is really important. Always listen to them, listen to their feedback. If you a leader, it is better to set up a regular one on one. Give a reward and appreciation to them, because this job is not easy at all.
Why I write this article? basically it is just to share what I feel right now. You know, just want to reduce my anxiety, to get a better sleep, and enjoying my life. Become a software engineer is not an easy job. You need to learn every day to survive in this industry. Keeping your sanity is always important.
And yes, this is my first article that not talk about swift or iOS development, but I hope this can be helpful to all of you guys. Have a great day and see you in another article!