✂️ Cut your QA cycles down to minutes
This week I am happy to promote QA Wolf, which is a long-time partner of Refactoring!
If slow QA processes bottleneck you or your software engineering team and you’re releasing slower because of it — you need to check out QA Wolf.
QA Wolf's AI-native approach gets engineering teams to 80% automated end-to-end test coverage and helps them ship 5x faster by reducing QA cycles from hours to minutes.
The result? With QA Wolf, Drata’s team of 80+ engineers achieved 4x more test cases and 86% faster QA cycles.
1) ✨ The Happiness Equation
The first idea of the week is actually… a video!
This year we would like to experiment with doing more videos (other than podcast interviews), especially about personal topics that I really care about.
This is about happiness, and builds on this past article I wrote.
I hope you like it! Let me know what you think about it.
2) 🔄 Code quality is about systems
Code quality is not about individual performance or heroic efforts. It's about having systems that consistently produce good outcomes.
I believe a team of average developers working within a well-designed system will outperform a group of exceptional developers working within a suboptimal system.
So here are the steps that make up your quality system, and how they reinforce each other:
Encoded coding practices 📝
Everything starts with clear, documented practices that define what good code looks like for your team. These may include: system design principles and patterns, code organization and naming conventions, security and performance guidelines, docs requirements, and more.
Good encoded practices inform everything else: they make coaching and pairing easier; they enable laser-focused static analysis, and provide clear guidelines for code reviews.
Coaching & pairing 👥
The best teams actively share and discuss knowledge through good collaboration.
In my experience, the best ways are:
👯 Pairing — I am a big fan of pair programming. I wrote about it plenty of times, and will continue to do so!
✏️ Design discussions — a good design process, possibly supported by good design docs, does wonders for your team’s growth. It helps you get to better solutions, coaches younger co-workers, and intercepts issues before it’s too late.
Static analysis 🤖
One of my predictions about AI is that static analysis is going to be huge. What started as simple linting for stylistic errors, is gradually evolving to intercept code smells, security vulnerabilities, optimization opportunities, and more.
This is healthy because the more you can catch with automation, the easier code reviews get for humans.
Automated testing ✅
A solid test suite makes you faster by creating the confidence to change code without the fear of breaking things. I am very opinionated about testing and I don’t believe all tests are good. You should be intentional in what kind of tests to invest in, and for what parts of your codebase, to make sure the ROI is positive. I wrote more about this here.
Code review 🔍
Code reviews are your last line of defense. When everything else works, reviews should rarely spot crucial issues. Conversely, if they often do, you should ask yourself what other parts of the process are failing: should you discuss design more? Do you have enough encoded practices? Is static analysis powerful enough?
Code reviews are the worst moment (before shipping) in which to spot problems, because they are the last. So, one of the goals of code reviews should be to continuously reduce their own scope, by making engineers uncover rules that can be enforced by previous parts of the dev process.
More thoughts (and hot takes!) about reviews in this previous article.
Also, here is our full piece about code quality in the age of AI 👇
3) 🔀 The Delegation Path
One of the most popular approaches to delegation is the Eisenhower Matrix, which buckets your tasks in four quadrants, based on urgency and importance.
The matrix advices to address tasks based on the quadrant they are in, and, in particular, to delegate those that are urgent + not important.
Now, I have found this advice hard to follow in real life, for two reasons:
Urgent tasks — are often hard to delegate. Delegation is a long-term play that in the short-term may require more time/effort than doing the thing yourself.
Non-important tasks — are ok, but they are often trivial, so if you only delegate those, you are limiting people’s growth.
So, I feel like Eisenhower Matrix is just tactical advice — incomplete at best.
Instead, to look at things from a more strategic perspective, there are three angles you can use. Ask yourself these questions:
🌟 Unique value — Where is your time spent best? What is the unique value you bring to the table?
🎓 Skills — Are there people better equipped than you at handling some of your tasks?
🌱 Growth — Are there people who are eager to learn how to do some of the things you do?
My rule of thumb is: if at least two out of three drive me away from a task, I should probably delegate it.
So, I have found that you can draw a path on the Eisenhower matrix, that goes from the easiest + least valuable to delegate, to the hardest + most valuable 👇
🥉 Not urgent + not important — despite what the matrix says, you can’t always delete these. Conversely, they are the safest and easiest to delegate.
🥈 Not important + urgent — you need some structure already in place to delegate these in a timely fashion, but you can still do so with little expectations on quality.
🥇 Important + not urgent — the heart of good delegation. You need to establish what success looks like, how communication happens and who needs to be involved.
🏆 Important + urgent — the apex of delegation. When you are able to delegate these safely, you know you made it.
More ideas on good delegation in this previous Refactoring article 👇
And that’s it for today! If you are finding this newsletter valuable, consider doing any of these:
1) 🔒 Subscribe to the full version — if you aren’t already, consider becoming a paid subscriber. 1700+ engineers and managers have joined already! Learn more about the benefits of the paid plan here.
2) 📣 Advertise with us — we are always looking for great products that we can recommend to our readers. If you are interested in reaching an audience of tech executives, decision-makers, and engineers, you may want to advertise with us 👇
If you have any comments or feedback, just respond to this email!
I wish you a great week! ☀️
Luca