The Most Important Question to Ask Your Clients
Finding the Perfect Balance of The Iron Triangle
My first development job was as a web developer at an agency.
I finished a three months javascript boot-camp a few weeks before, and it was my first real-life experience as a developer.
My learning buddy was an experienced engineer who I admired and was very instructive. On our first project, at a casual meeting with our CTO, he asked a question that stuck with me till that day.
He asked: What are we optimizing for?
As a junior and newbie developer, I was so impressed. Aren't we just producing some code? Why is it so important to optimize for something?
The Iron Triangle of Software Development
Every software project is a dance of trade-offs: quality, speed, and cost.
The rule is that you can only choose two.
As a consultant, the goals and scope are often straightforward. You know them from your day 1.
Yet, understanding the deeper, actual 'why' behind them isn't always straightforward. This can lead to disappointment and misalignment.
Usually, as a consultant, you start a new project with clear goals and user stories.
But, understanding the business drive behind a project, which is the reason a client has hired you, is critical.
The Iron Triangle of Software Development
In Real Life
Going back to my mentor at the dev agency.
The CTO's answer to my buddy's questions surprised me.
"Maintainability".
I thought, "Isn’t he just want it ready by tomorrow"?
But that was an essential lesson for me.
As developers, we always serve the business. Not the technology.
In this project, we worked on a client's new version of an e-commerce site.
The previous project used a poor technology and was hard for us to work with, run, build, and add new features.
So, the CTO asked us to build it in a way so we don't need to rebuild it for the next 5 years.
And that is what we focused on while working on the project -
We choose stable technology.
We made sure the code followed best practices and tested it well.
We modeled the data very well. For example, the backend represented the all-order experience as a tree. This made it super easy to edit and delete some aspects of the order.
We reviewed each other's code.
And the result followed. The code and infrastructure were very readable, maintainable, robust, and well-handled. The project took longer than it would have if we optimized for speed. But the CTO was happy. This was what he optimized for.
A Different Answer
A few years later, I was working at a larger startup. I and another team member were assigned to create a new product.
When I asked our team lead what we are optimizing for, he answered, "Speed. The product can change the category, and other competitors are already working on it. We must ship quick".
The technology definitions weren't clear. But the stakeholders knew very well what business outcomes they wanted and wanted fast.
So that is what we've done. For example, this time, we've skipped testing some of the code.
We started by making a simple version, and iterated with the product owners every day to make it like they wanted.
The result? we had something working on a complicated project in a matter of weeks.
The product owners launched the product and were satisfied with the result. Clients loved it. They were also surprised by how fast we had something working.
This realization sparked a pivotal shift in my understanding of software development.
Our job isn’t about the code or the technology; it’s about aligning our work with the business needs.
Setting Yourself for Success
This principle is now serving me so well as a consultant. In my three years as a consultant, I’m always starting a project with the “What We Optimize For” question.
It sets your mindset and aligns stakeholder expectations. It can define a project success.
In your next project, try asking your client or manager: What are we optimizing for? And then build your plans based on the answer.
This approach not only leads to successful projects but also to continuous growth as a developer.
Thanks for reading!