Monday 3-2-1 – good principles, tech debt vs product maturity, choosing agencies 💡
Hey, Luca here 👋 welcome to the Monday 3-2-1 ✨
Every Monday I will send you an email like this with 3 short ideas about:
🎽 Engineering Management
🔨 Technical Strategy
🎒 Hiring & Onboarding
You will also be receiving the regular long-form one on Thursday, like the last one:
To receive all the full articles and support Refactoring, consider subscribing if you haven’t already:
p.s. you can learn more about the benefits of the paid plan here.
1) 🎽 Good principles are specific
It might seem counterintuitive, but in order to be useful, principles should be specific.
Simple propositions like "we write high quality software" or "we care about customers", are not going to cut it. They are not going to be useful in real life.
To tell whether a principle is good, ask yourself: how am I able to tell if we are not following it? If you don't have a good answer, chances are the principle is not clear enough.
Examples of good principles:
Fix problems, even when they are not yours — by Asana
We peer review every change — by Skyscanner
Psychological Safety — by Artsy
Engineers own their impact — by Airbnb
More on creating principles 👇
2) 🔨 Tech debt vs product maturity
When it comes to startups and fast growing products, you may hear about taking on debt intentionally, as the result of prioritizing speed and growth over quality.
Regardless of whether this would make for a good strategy, this debt is most often inevitable rather than intentional. Fast growth, in fact, naturally leads to technical debt, because when the product changes at a fast rate, your engineering abstractions get invalidated equally fast.
Such volatility, though, changes with the maturity of your product. For the sake of simplicity, let’s consider three stages:
0 to 1 — you start building a product from scratch, with a set of initial assumptions.
Product Market Fit — you figure out what works, double down on it, and scrap the rest.
Scale — you grow your business predictably and harden your tech.
The earlier you are on this scale, the more your product needs to move fast, and the more leverage you get by accruing debt.
The later you are on the scale, the more debt becomes a drag that prevents your product from growing. Your scale is such that you get the most leverage by repaying debt.
For early stage startups it might be inevitable and even healthy to accumulate debt early on. At the same time, though, you should create processes to help repay debt from the very beginning.
More on managing technical debt 👇
3) 🎒 How to find agencies that fit
Not all agencies are a good fit for your company, just like you hire only a small share of all the candidates you interview.
The fit between your company and your (potential) partner goes beyond the specific project you have in mind, and is based on more foundational elements.
When you talk with an agency, consider these elements:
🌟 Culture — do they share your values, and you share theirs? Do they feel like people you would hire? Relationships are key — you should always work with people you like.
📱 Product — look at their past work: is it close to what you need? Did they work with other (e.g.) early stage startups? Did they build other (e.g.) marketplaces?
🎨 Design — is their design language close to what you have in mind? Does their process fit your organization? Look at some case studies and how they worked with other companies.
🔨 Technology — do they have experience with the technology you need? Be suspicious of vendors who say they can do everything. Good agencies are specialized in a few things.
💰 Budget — last but not least, consider your budget expectations and constraints. The agency may operate in a different segment than yours (e.g. large corps vs startups) and you may not find a fit.
Answering these questions is not easy. They require you to introspect and develop clarity about your company and your needs. But the more you are aware of your needs, the more you can find vendors who are a good fit for those.
More on working with agencies 👇
And that’s it for today! If you liked the article, consider doing any of these:
1) ✉️ Subscribe to the newsletter — if you aren’t already, consider becoming a paid subscriber. You can learn more about the benefits of the paid plan here.
2) ❤️ Share it — Refactoring lives thanks to word of mouth. Share the article with your team or with someone to whom it might be useful!
I wish you a great week! ☀️