3 ms·
I actually appreciate this question for multiple reasons. Earlier in my career, I was praised for creating highly flexible solutions that could be easily custom
by mrburton 8y ago
I actually appreciate this question for multiple reasons. Earlier in my career, I was praised for creating highly flexible solutions that could be easily customized. As a result, you can become conditioned to overengineer a solution.
Here's my advice on how to avoid it. I learned to rephrase the following question: Do I need this now?
At face value, this is a pretty easy question to answer, right? Here's the mental trap. I can always create a false scenario that "justifies" certain choices. "What if we have a spike of 1,000 users because of an announcement?" or "We need to make this system elastic now so we can scale up and down easily!"
Although these questions are valid, they don't need to be addressed immediately. This goes back to "Bring the pain forward". Instead, try to rephrase the question of "Do I need this now?" to become "Can I build this out later?"
This simple rephrasing does a few things.
a. It tells you and the team that you're not avoiding it, but you're prioritizing it. The last thing you want to do is solve a problem that isn't a problem that needs to be solved now.
b. It keeps important things on the radar. Very much like you do with Scrum and the backlog.
It's all about reconditioning engineers to make choices that are aligned with the business's immediate needs vs. "Wouldn't our system be amazing to the engineering team if we did this?" As engineers, our job is to support the business. Or let me rephrase that more strongly, our jobs as engineers is to allow our business to be so amazingly awesome in how we help our customers.
Any excessive code is distracting and introduces latency in development. Remember, we want to build fast scalable solutions. That means having a fast and scalable development process.