Abstractions, what makes things good, good job posts 💡
Monday Ideas — Edition #80
Hey, Luca here! Welcome to the Monday Ideas 💡
Every Monday I send you an email like this with 3 short ideas about making great software, working with humans, and personal growth.
Paid members also receive a long-form, original essay on Thursday, like the last one:
To receive all the full articles and support Refactoring, consider joining 1400+ engineers and get the paid membership!
p.s. learn more about the benefits of the paid plan here.
🐺 QA Wolf (Sponsor)
Kiss bugs goodbye with fully automated end-to-end test coverage! 😘
QA Wolf offers a cost-effective approach to getting 80% test coverage in just 4 months.
They will build and maintain your test suite in Playwright (no more dealing with false positives or flaky tests) + provide unlimited parallel test runs on their infrastructure at no additional cost. The benefit? No more manual e2e testing, no more slow QA cycles, and no more bugs.
They have multiple case studies of customers saving $200k+/year in QA engineering and infrastructure costs. Schedule a demo to learn more.
QA Wolf is a sponsor of Refactoring 🙏 learn more here about how we run transparent partnerships.
1) 🗣️ Names are abstractions
A couple of months ago I wrote an article about how to name things — which, as we know, is the hardest problem in software!
There are only two hard things in Computer Science: cache invalidation and naming things. — Phil Karlton
Looking back at my article, I realized that a lot of my advice looks like some version of: do not create premature abstractions.
Names and naming conventions are particularly sneaky because they may not feel like abstractions, but they are.
Conventions should encode something repetitive, so that when I see one I immediately understand what it does. Instead, codebases are often full of -Managers, -Providers, -Services that have pretty much nothing in common.
When I see an EmailManager, I will ask myself: what does a Manager do? If there isn’t a good answer for that, then 1) it’s confusing, and 2) you are polluting the “Manager” keyword for anybody who wants to use it for good in the future.
Of course, it goes both ways: when there is a convention in place, you should use it whenever it is fitting.
I wrote (many) more ideas on this in the full article 👇
2) ❇️ What makes good things good
When I reflect on my personal growth, I have found it useful to see my abilities through the lens of taste and skill.
Great taste is knowing what’s good, and great skill is knowing how to build things. These two elements work together for growth: whenever my output is subpar with respect to my taste, then I know I need to improve my skills.
There is a third element, however, that I have consistently found in the most experienced people I know.
They do not only know what is good — they also know exactly why.
They know what makes good things good.
Which is less trivial than it seems.
I may watch hundreds of TV shows and develop a good, intuitive taste for good ones, but I may not be able to explain how my judgment works. And that may be fine, unless I ever want to create a TV show. At that point, closing that gap becomes crucial, because knowing what makes good things good is what ultimately allows my taste to turn into skills.
In my experience, I have found two ways that can help you with that:
Just build stuff — being dissatisfied with your output constantly triggers your reasoning and makes you ask “why do I think this is crap?”.
Discuss with others — when you discuss some subject, you need to elaborate on your judgment. If you disagree with somebody about something being good, chances are you want to figure out why.
I wrote a full essay about this, which ended up becoming one of the most popular articles of last year 👇
3) 🎒 Describe your company in job posts
An extremely underrated part of a good job post is the description of your company.
Chances are, unless you are the likes of Airbnb or Shopify, that candidates will do heavy research on you before applying for a position.
In a wide survey about engineering careers, which I ran last year, close to 77% of engineers declared they do research on a company’s business before getting hired, and ~60% look on Glassdoor, too.
By writing an effective intro about your company in the job post, you can drive the right narrative and make sure the candidate knows everything you care about.
In my experience, this means covering three main parts:
1) 👁️ Vision & Mission
You should state what is your mission as a company, and how it is fueled by your particular view of the world. Good vision / mission statements are usually something along these lines:
We believe X matters / will happen, so we are building Y to help with it.
Great people are driven by purpose, they want to do work that matters.
2) 🚀 Where we are
Once you have aligned people on your vision & mission, build momentum by telling them what you are doing right now.
What challenges are you facing?
What are you going to build this year?
How many customers do you have?
Did you get a new funding round? Nice! What is it for?
Is the team going to grow? How?
If possible, link external resources to back these up. Have you been in the press? Have you written anything on your blog about it? Put external links to make people dig deeper if they want.
In this section you are saying: not only do we have a great mission — we are doing these amazing things now and we need your help. You should make the candidate's mind race about what you can do together.
3) 🤝 Culture
Culture is what it feels like to work in your company. This section answers the question: "Would I enjoy working here every day?"
Culture sections are fluffy sometimes, and engineers can spot this immediately. Good culture is specific, it provides guidelines on how you should behave and make decisions.
So list your values / principles, and show how you use them in practice.
A few examples:
✍️ Asynchronous communication — by GitLab. GitLab explains their async culture in every single job post, and links to their legendary handbook to help the candidate learn more.
🥣 Be a Cereal Entrepreneur — by Airbnb. This directly ties in with the company's beginnings and what the founders did to make the company survive. It is memorable, and its history makes it credible.
You can find more ideas about how to create a great job post in this full article 👇
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. 1400+ engineers and managers have joined already! Learn more about the benefits of the paid plan here.
2) 🍻 Read with your friends — Refactoring lives thanks to word of mouth. Share the article with your with someone who would like it, and get a free membership through the referral program.
I wish you a great week! ☀️