I recently got the opportunity to join another team at my company working on strangling a large chunk of our monolithic application. I knew it was going to be a huge, scary project but I was excited for the opportunity to have a massive impact on my company. We started off with a week or so of meetings just trying to get our heads around the problem at hand. The discussions were fun and lively. Occasionally good natured arguments would break out, or we would hammer on a single point on and on ad nauseum. When the meetings were over I was exhausted but still looking forward to starting the work. Then things got really intense. It was time to break down the work into stories. We struggled and fought over how best to begin the work of deep analysis. With a problem so huge, where do you even begin? We had a massive team, and couldn’t afford to have them sit on their hands while we worked on our analysis. So we started with low hanging fruit, tasks that could be started while spikes for analysis were going on.
During the analysis, we used a SQL profiler to watch any of the CRUD operations that happened to the database. The profiler also showed us the stack traces if we needed some additional context for what happened. From there, we did our best to break the different queries into domains, like order, payment, catalog, etc. From there, we were able to create stories for the deeper analysis on each of those queries.
After that, and this is when things got terrifying, it was time to starting pulling apart the business logic and putting it into microservices. These microservices (in order to satisfy requirements for downstream systems), would replicate the logic from the monolithic application, updating the data in that system’s database. These new microservices would handle order flow from a shipment notification to the system all the way to the final payment request.
This was terrifying because we knew if any of the updates to that application were incorrect, it could have catastrophic consequences downstream. In earlier discussions it sounded like the traditional “strangler” pattern wouldn’t work because we couldn’t prevent duplicate payment calls. But today we discovered it would be possible. I honestly can’t express how relieved I am.
So my point, I guess, that I’m trying to make is this job can be really frightening at times. You can dive into a project with very little context and find yourself in situations where you simply do not know the right answer. You can end up with what might seem like an impossibly huge task. My advice would be, take a breath, take a step back and try to find the forest in spite of all the trees. Get yourself a full view of the problem and then see how you can break it down. If it still seems scary, it’s still too big. Break it down further. Eventually, what you’ll have is a huge pile of simple problems and a small spile of hard ones.
I'm a father of three and a software engineer for both hobby and trade. I enjoy tabletop role-playing and board games - especially of the heavily social variety! I also occasionally participate in game jams with friends.
I'm particularly interested in self-improvement in all of those things. I enjoy progressing through a new skill and learning ways of maximizing my time and focus.