Minimum viable testing, no-code agencies, surprising reviews 💡
Monday Ideas – Edition #55
Hey, Luca here! Welcome to the Monday Ideas 💡
Every Monday I will send you an email like this with 3 short ideas about making great software, working with humans, and personal growth.
You will also receive a long-form, original article 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.
💻 Typo — AI-driven engineering management
Typo is an intelligent AI-driven engineering management platform that enables modern software teams with visibility, insights & tools to code better, deploy faster & stay aligned with business goals.
By seamlessly integrating with your dev tool stack (Git, issue tracker, CI/CD, incident management, Slack), Typo connects the dots between engineering signals & developer experience to deliver the following:
👑 For Leaders — align engineering with business goals & support teams to deliver their best with developer wellbeing insights.
🎽 For Managers — identify delivery bottlenecks, predict release delays & drive continuous improvement with customized team goals & weekly progress reports.
🔨 For Developers — measure the impact of their work on team goals & ship code faster with automated dev workflows in Slack.
As a Refactoring reader, you get 20% off any Typo plan!
Typo is a sponsor of Refactoring 🙏 here is how we run sponsorships transparently.
Back to this week’s ideas!
1) 🔍 Minimum Viable Testing
Many people ask me how to test software properly, what types of tests to focus on, how much they should care about coverage, etc.
Here is my preferred testing workflow:
Use a statically typed language — Most languages today have statically typed versions you can adopt. My opinion is that this is a no-brainer for 99% of teams. Static typing catches a ton of bugs early, while also documenting the code thanks to types and annotations.
Write unit tests when relevant — Unit tests are an important part of your testing investment. However, I am not adamant about coverage. Write them for whatever is non-trivial or subject to implementation changes in the future.
Write plenty of integration tests — Integration tests are about testing execution paths that involve multiple functions / components. Figure out the most important ones for each area of your product, and test them in depth. To identify them, think about business paths, based on how your product is used. API endpoints are also good candidates for integration tests.
Write just a few, critical end-to-end tests — End-to-end tests are expensive to develop and maintain. My rule of thumb is to invest in testing those parts that you would check manually otherwise. The main goal of end-to-end tests is to remove manual checks, so you can release faster.
Avoid staging if you can — I wrote a full article about this. TL;DR is you can probably avoid using a staging env by implementing a combination of gradual rollouts (with feature flags) and live previews for PRs. The idea is: the less steps to production, the faster you release, the better feedback loop you have, which also helps stability because of faster recovery from mistakes.
Here is a cheatsheet about the ROI of the various types of tests 👇
Aaand here is the full, exhaustive article I wrote about testing software in 2023 👇
2) ✨ Bootstrap no-code adoption with agencies
Sometimes, it might be scary to build a complex product with no-code tools, especially if your team hasn’t much experience with them.
In this case, you can bootstrap the process by working with a specialized agency. Here are the best ones I know of, based on recommendations by readers and reviews on Clutch (no affiliation):
8020 — US-based. One of the first no-code agencies to appear in the market. They specialize in Webflow development.
9x — Berlin-based agency that works with the likes of Bubble, Airtable, Zapier, and Retool. They also provide training to your people so they can maintain the product later, and build more in the future.
AirDev — the most trusted no-code agency on Clutch. They use primarily Bubble to build products for startups, and internal tools. They also run a bootcamp to educate people about developing with Bubble.
Codemap — a marketplace that connects companies with vetted no-code experts. A good solution if you are looking to hire someone for the long-term, rather than working with an agency.
I wrote a full article about how to build great software with no-code tools 👇
3) 🏅 Performance reviews should be unsurprising
I believe performance reviews are mostly useful as a prime moment to act on feedback — by setting goals and priorities — rather than sharing it.
In fact, in healthy relationships, feedback is frequent and mainly shared 1) on the spot, and 2) in recurring venues like 1:1s. So, feedback in performance reviews should mostly ratify what has already been discussed privately.
As a rule of thumb, if people are surprised by your review, you did something wrong. You can find more ideas about performance reviews in this recent Refactoring essay 👇
And that’s it for today! If you are finding this newsletter valuable, 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! ☀️
Luca
I don’t agree with the unit test suggestion. I would rather suggest using TDD instead, which is based on unit tests of course.
While it may be true that unit tests change often, especially in the important parts of the system, I’ve never face situations where this was a problem. On the reverse, working in TDD they become the first feedback of doing things right.
So I would definitely define the ROI of unit tests as HIGH. 🙂