Gardening and Carpentry
A while back, Allison Gopnik wrote The Gardener and the Carpenter (Hidden Brain podcast if you want a brief overview). A quick overview might say that a carpenter creates a concrete object out of inanimate items but a gardener makes a non-concrete object about of animate items. The carpenter shapes something to match his or her will. A gardener coaxes growth through maintaining an environment, but cannot predict or force things to match his or her will.
It occurs to me that software engineers may be both carpetners and gardeners as they move through their careers. Charity Majors, in a seminal blog post, argues that technical staff may alternate between managing and individual contribution like a pendulum. One of the primary points is that those are different tasks. As she says:
Management is not a promotion, management is a change of profession.
If I were to apply metaphors for this change of profession, I believe that the change from Carpetner to Gardener feels highly apt.
The Carpenter
Engineers are often like carpenters. The output is generally fairly concrete: write this code, add these features, implement this UI, fix these tests, etc. There’s often a binary outcome: pass or fail, hit or miss. We even talk about engineering in the context of carpentry. Steve Jobs has a famous quote about carpentry that is often used as a metaphor for what good software design and implementation looks like.
Engineering speaks often in the expressions of design, creation, and craft. We often focuse on elegance, ease of use, obviousness, and how well something works. These are borrowed from the language of other crafts skills. We talk in terms of code architecture and call our supporting software “tools.” The final outcome is called “build products” or “artifacts.” There’s a strong notion that the output from engineers is something that’s built, that’s finite, and that’s measurable.
The Gardener
A manager has a very different task. Engineering management is also often focused on outcomes, but those outcomes are around meeting business objectives. In order to do that, a manager must support the team that’s doing the actual work. The output is less “do X and then Y happens” and more amorphous.
The manager must make decisions that allow the team to perform their best work. They need to receive the business objections, envision the future, and make sure that the team has all of the knowledge, tools, and support to deliver. This is, to stretch the metaphor, a bit like plotting a garden, gathering the necessary seeds and tools, and applying fertilizer and other nutriants to the soil. When a team member is blocked by something, it’s on the manager to weed it out. If a member of the staff isn’t flourishing, the manager must decide how to feed and water back into flowering. If an individual contributor is causing harming the entire garden, the manager must decide whether to winnow.
A manager cannot ensure the output from their actions. They do not product concrete objects. Instead, a manager must create the environment in which others can do their best work. We cannot predict how our flowers will grow or the exact yield of our crops, but we can do our best to ensure that our environment allows for the best possible outcome.
Gardening the Carpenters
These metaphors are obviously imperfect and they don’t really fit in together. A gardener does not grow carpenters. However, I think they describe the nature of the work fairly well. A carpenter has a concrete notion of what the output will be. The craft is how to fit the pieces together and to use the tools at their disposal. The feedback loop is immediate and direct. If a software engineer does their job, the feature is finished or the bug is fixed or the tests are working.
A manager has a general notion of what the output will be. Their craft is to remove barriers and provide support. The feedback loop is indirect and delayed. When a manager does their job, there’s a lag time to verification. Are software engineers able to complete their tasks? Do they have job satisfaction? Are they growing their skills? Is the team accomplishing the business objectives?
Individual contributes can focus on the immediate needs of the product. Managers must focus on the longer term goals and create a supportive environment to accomplish them. Majors is absolutely right: these are two very different jobs with very different skillsets.