Tag: expertise

  • Lessons from Hiring Software Engineers

    Lessons from Hiring Software Engineers

    I’ve been a jack of all trades web developer for nearly 15 years and moved to working full-time in hiring in September 2020. At Automattic, we’re hiring as fast as we can. This has given me a chance to work with and evaluate hundreds of software engineers over the past eight months.

    The Day-to-Day: A Bit of Context

    As a full-time hirer, my first responsibility is to kindly assess, mentor, and guide candidates through our hiring process to determine if they would be successful at Automattic. On the surface, it sounds like all I do is run interviews, grade code tests, and guide trials all day. 

    While that may be my primary responsibilities, it comes across less as “grading” and more as:

    • Digging into the why behind someone’s code.
    • Becoming a PR Review expert.
    • Delivering kind, constructive feedback.
    • Implementing new ideas on how to accurately and more quickly evaluate candidates. 
    • Formalizing/automating processes to make hiring more efficient.
    • Working on interesting technical challenges to improve our hiring toolkit.
    • Improving my own problem solving and designing abstractions skills by challenging my assumptions of how code can and should be written.
    • Changing someone’s life by letting them know they got the job. 🎉

    The Human Side of Engineering

    Most engineering roles at Automattic are focused on coding in order to help people. In hiring, it’s a bit more meta: we are focused on identifying the best people to write code in order to help people. 

    Engineering hiring is an interdisciplinary role that allows you to think deeply about how to best evaluate and mentor your candidates. Even when a candidate might not be ready to be an Automattician today, most are eager, kind, and smart. Our goal is to help them learn through useful feedback and mentorship on how they can grow to be successful their next time around.

    If you’re like me and have a hard time with giving direct feedback, then working in hiring is also a huge opportunity to grow as a person. I’ve learned more about how to confidently give effective, constructive, useful feedback in the last eight months than I have in my whole life.

    Giving Effective Feedback

    This should be its own post to dive into the details. Here are a few quick lessons learned:

    • Be positive, and focus on their ability to grow to meet the challenge.
    • Be direct. If the feedback isn’t clear and actionable, you can’t be sure it was understood. And if you can’t be sure it was understood, you didn’t really give any feedback.
    • Give feedback continuously. Don’t save it all for one big review at the end. The “official” feedback shouldn’t be a surprise – they should already have heard it before. This also allows people a chance to correct problematic areas before they become a bigger problem. It also shows you how they are at receiving and addressing feedback.
    • Set clear expectations. What does successfully addressing the feedback look like? How will they know they’re doing it better now?

    What Makes a Good Developer?

    This is something I’ve spent a lot of time thinking about recently. I think it’s different for each organization. For example, you can be a really technically skilled engineer and not get a job at Automattic. And you can be a great engineer for Automattic, and not be able to get a job at another big organization. I don’t think I have the technical skills to pass more algorithmic-focused code tests, but I’m a great match for the kinds of problems that need solved at Automattic.

    So, more accurately, the question should be, “What makes a good developer at [insert organization name here].”

    For us, a brief list looks like:

    • High self-motivation and drive
    • Technical ability
    • Fast learner
    • Great written communication
    • Can adapt and solve problems from many different areas, even if they’re not familiar with the language or codebase
    • Good self-management and dependability
    • Can give and receive feedback well, allowing for a lot of positive growth

    There’s plenty more, but the main takeaway here is that technical ability is one of many pieces. It’s OK to not have the strongest technical ability as long as you have many of the others and, especially, if you can learn whatever you need to learn.

    How do you Evaluate that?

    Having a list of things we’re looking for is one thing, but how do you fairly and accurately determine someone has those qualities?

    This is much harder to do than it seems, and relying on your own intuition of, “I know it when I see it,” is a great way to have a super-biased, toxic, homogenous company.

    I wrote about Qualities of Expertise earlier this year as part of my learning around evaluating expertise. It’s hard, as the problems that require expertise to solve are open-ended, contextual, and don’t have a clear right/wrong answer.

    The best way we’ve found to evaluate this is to have a 25 – 40 hour, paid trial where we give candidates a close-to-real-world codebase with some basic direction and let them solve it however they feel is best. It’s like a paid-mentorship and code camp where you might get a job offer in the end.

    The great thing about the trial is that there are no right answers. There are multiple, valid approaches to everything. It’s less about the direction you choose, and more about:

    • How you arrived at your decision.
    • How you communicate your decision.
    • How you solve/implement it.
    • Does it work? Does it work well? How do you know?

    There’s no accidentally passing the trial. If you receive an offer, it’s because you’ve been thoroughly vetted and deserve the offer.


    The fast-paced learning and self-improvement is keeping me highly engaged in Engineering hiring. My next big step is learning more data and rubric development. I doubt I’ll run out of things to learn anytime soon.

    If you’re a software developer looking to grow in these areas and have the opportunity to work in hiring, I highly recommend it.

    Thanks to Thuy CopelandDerek Springer, and Boro Sitnikovski for edits and feedback.

  • Qualities of Expertise

    Gaining expertise is difficult enough, but how can you tell if yourself (or someone else) has reached expert status? Unfortunately, multiple-choice tests are ineffective predictors since the benefit of expertise is being able to conjure up complex, situational-dependent solutions where there is no “correct” answer.

    One of the simpler ideas is to see how long someone has been in an industry (say, 10+ years) and give them the benefit of the doubt. Surprisingly, for programmers at least, “programming experience gained in industry does not appear to have any effect whatsoever on quality and productivity.”1 Ironically, what does increase with experience is the confidence in your incorrect decisions.2

    If you have the same one year of experience, ten years in a row, is that nine years of experience?3 Putting the time in is not necessarily effective. You need a strong feedback loop that allows you to hone your decision making and see what is effective,4 and an opportunity to vary and increase the difficulty and scope of your work.

    To find expertise, we’ll need to look beyond the CV, using some generalized qualities across different domains.

    Discrimination of subtle differences

    The ability to make fine discriminations between similar, but not equivalent, cases is a defining skill of experts.

    Empirical evaluation of the effects of experience on code quality and programmer productivity: an exploratory study

    One of the most chill shows I watch is The Repair Shop. It’s a team of repair experts, taking worn down heirloom objects and returning them to their former glory. In one episode, art conservation expert Lucia Sclaisi is shown restoring a damaged painting. Where I see an old painting with a hole in it, Sclaisi sees:

    • the time period
    • the likely artist
    • the style
    • what has sullied the surface based on the color of the grime (she identified it as nicotine)
    • how highly finished it is and what finish is used (and thus how to best clean it)
    • and surely much more they didn’t show/I missed.

    An expert can get information from clues that the novice didn’t even realize existed.

    However, it’s not simply about knowing the information. If a quick Google search can tell us the answer, then it doesn’t require expertise. The big piece is knowing how to apply the information to make successful, situational-dependent decisions.

    Consistency

    We all get lucky from time to time. Sometimes when the problem is a nail, we happen to have a hammer. Being able to consistently formulate a good solution to a variety of problems is the key here.

    Situational-Dependent Solutions

    I’ve mentioned “situational-dependent” several times now. What does that even mean?

    As Andy Hunt emphasizes in Pragmatic Thinking & Learning: context is key.5 The same problem in a different context may require a different solution. Problems rarely have a one-size-fits-all solution. It requires expertise to correctly apply information within the right context.6

    This means when encountering a new problem, an expert often asks important questions about the context. For example, the art restoration expert may ask where the painting has been stored, under what conditions, etc. I have a guess as to how some of these details could impact a painting, but I’m not sure how I could practically use that information. An expert does.

    These details, which may seem unimportant to the novice, reveal nuances that can significantly inform the expert’s solution.

    Assessing Expertise

    Accurately assessing these qualities when hiring is easier said than done, and likely looks different across industries. However, the key qualities of expertise remain:

    • Ability to discriminate between subtle differences
    • Consistency
    • Situational-dependent solutions in the right context

    If you are trying to assess expertise in an area that you don’t have much domain knowledge, Tyler Alterman has some great recommendations in their article, Why and how to assess expertise.

    In many of my examples it’s easy to see the difference between a novice and an expert. Assessing someone proficient in a subject vs an expert can get tricky. In the end, if someone can consistently discriminate subtle differences in context-dependent situations to find the best solution, they’re well on their way to expertise.

    Sources

    1. Oscar Dieste, Alejandrina M. Aranda, Fernando Uyaguari, Burak Turhan, Ayse Tosun, Davide Fucci, Markku Oivo & Natalia Juristo. Empirical evaluation of the effects of experience on code quality and programmer productivity: an exploratory study. Empirical Software Engineering. Feb 2017.
    2. James Shanteaua, David J. Weiss, Rickey P. Thomas, Julia C. Pounds. Performance-based assessment of expertise: How to decide if someone is an expert or not. European Journal of Operational Research. Apr 2000. p.254
    3. Andy Hunt. Pragmatic Thinking and Learning: Refactor Your Wetware. Sept 2008. p.15
    4. Tyler Alterman. Why and how to assess expertise. Effective Altruism Forum. Feb 2016.
    5. Andy Hunt. Pragmatic Thinking and Learning: Refactor Your Wetware. Sept 2008. p.35
    6. Iris Vessey. Expertise in Debugging Computer Programs: An Analysis of the Content of Verbal Protocols. IEEE Transactions on Systems, Man, and Cybernetics. Sept 1986.