Jacob Stoebel


Building software is primarily a human endeavor. Any code that we happen to generate is merely incidental. The real challenge then is how we build sustainable systems of humans who can effectively interface with the required technology to get stuff done. For that reason, software development must be a values driven profession. Here are mine.

Continuous Learner

Tech is changing fast. The people that make it are changing even faster. Whether its a new front end framework, a deployment tool, or your co-worker's favorite new TV show, we need to have the curiosity to absorb new knowledge and skills to adapt to a quickly changing world. Not because our boss told us to, or because we're chasing a bigger paycheck. Because we are genuinely curious. Because we have questions about the world that follow us around until we find the answers.

Creative and Independent

This is related to the above. Systems are way too complicated these days for teams to function in a top down manner. The problems still left to be solved do not have copy/paste solutions. We need to creatively identify the problems and chase them down without constantly being supervised or told exactly what to do. With that said, when we are working with other humans, we need to be kind, humble, attentive, and receptive to feedback.


Not having the necessary skills is a challenge that can be solved. Assuming you have nothing else to learn is an intractable and dangerous problem in this industry. There is always more we have to learn. When we assume that our learning is "done", we open ourselves to making mistakes. Worse than that though, lack of humility makes us difficult to work with and spreads a toxic energy across our team and organization.

Productive Argument, or Hit the Horseshoe, Not the Anvil

Arguing can be productive when it pushes a team forward but it can also come with some nasty side effects. A team might work out the most efficient code by arguing, but if someone leaves the meeting feeling ignored or unappreciated its a net loss. If we're too harsh with our team when we argue they might not speak up the next time. I heard a fantastic analogy once that arguing should be like a horseshoe on an anvil. If we place a horseshoe and whack it with a hammer, the conflict between the hammer and anvil is the force that can shape the horseshoe. Conflict works the same way. If we focus on attacking the subject at hand and not each other, we'll get the best results. Likewise if we miss the horseshoe and hit the anvil directly, all we get is sparks. Not very helpful.

Productivity is good. Generativity is better.

This one comes from Jessica Kerr's blog. In summary, its great when developers can be productive by shipping clean, maintainable code, fixing bugs, etc. Its ten times better though when developers can be generative, or when their efforts are a force multiplier that can help other people on your team also do better work. This could include contributing to documentation, mentoring new team members, or collaborating with other teams in your org. Think of it this way: would you rather do great work fast, or empower your entire team to do great work fast?

Take care of your humans

There is a prevailing narrative among developers that we are like Vulcans, perfectly logical and free from pesky emotions. In reality, emotions are at the core of the human existence -- they drive our basic neurological functions. If someone on your team is made to feel unworthy, unintelligent, unappreciated or has their feelings hurt in any other way, that has tangible consequences for your team. Its not something they can just "get over" or "grow a thicker skin" about. To say otherwise is to deny basic psychology. We are all responsible for taking care of our fellow humans.