The Algorithms recently flung this article my way which crystallized the idea of "serious leisure" for me. It brought to mind Dungeons & Dragons and Role-Playing Games, but it also made me think about my experience with Software Engineering. The study's hypothesis is that involving yourself in an intense hobby over the course of years/decades has benefits beyond simply relaxing and having fun. It's about skill development and mastery, a sense of accomplishment, and a sense of community.
I played D&D intensely throughout my teenage years. I get what the article is saying.
It also occurred to me that I've been doing "Software Engineering" for much longer: almost 40 years now. Of course back then, as a kid, I just called it "coding" and on the surface it was usually about creating video games. But as I look back, I see that where I really got the satisfaction was learning how to tell the computer to do something complicated. I'm sure self-esteem and dopamine also had something to do with it.
I'm lucky that Software Engineering as "serious leisure" eventually led me to a successful career. There are not a lot of professional D&Ders out there.
A Metaphor I Hacked and Slashed Together
If you're unfamiliar with D&D, the players role-play characters (defined by a series of stats and abilities and history) to engage with a complicated set of rules in a form of group storytelling. One of the players is the Dungeon Master, who you can think of as the master storyteller and referee, but he's irrelevant in this context.
The characters stats are: Strength, Dexterity, Intelligence, Constitution, Wisdom, and Charisma. These stats are used with dice rolls to bolster the chance your character has to successfully perform some action.
I've always found myself thinking back to those six simple stats in weird ways (probably because I spent my formative years playing D&D!). Of course, it's just a simple model for something way more complicated, but it's useful because it gives us some shared jargon for the purpose of the game (and this blog post).
Fighters should have good Strength. Wizards excel with ample Intelligence. Rogues need a high Dexterity.
The Primary Stats
Being a good Software Engineer starts with Intelligence. You need to be able to understand abstract concepts and logic so that you can take some task and turn that into code that makes the computer do the thing. The discipline of Software Engineering may start with Intelligence, but luckily it doesn't end with Intelligence.
As you start to advance in your career, having a healthy dose of Intelligence, Wisdom, and Dexterity can play a large part in your success.
Wisdom in D&D it's "street smarts" and for Software Engineers it would be put right after Intelligence in the "must-haves". Wisdom is knowing how to build things the right way: architecture, systems design, optimizations. Wisdom is knowing how to prioritize and to delegate. Wisdom is knowing when to be pragmatic, when to plan, and when to act.
Dexterity in the sense of being able to shift contexts and roles quickly: data analysis, testing/debugging, coding, etc. Dexterity in the sense of being able to learn new languages and frameworks and tools.
Wait! Let's not forget that stat that everyone ignores in D&D: Charisma. This is your ability to win friends and influence people. Knowing when to accept that you are wrong, being able to convince peers and leadership when you are right. This is kind of self-confidence and kind of self-awareness and kind of emotional intelligence. This ability becomes increasingly important as you move up the chain.
The "Physical" Stats
So where do Strength and Constitution come in? Cuz you knew it was coming... Ima take some liberties here, because it's my blog.
I'm defining Strength as your self-discipline: the mental muscle required to tune out the noise of constant distractions. Can you stay on track? Can you keep it moving forward?
And Constitution, well I will boldly claim this is your desire and ability to do a lot of hard work and put the time in and not give up. Can you keep debugging until you find the root cause? Can you see a project through to the end? Can you avoid burnout?
Leveling Up
There you have it: A full character sheet for the modern engineer. The best part of this model? In D&D, you aren't stuck with your Level 1 rolls forever, and the same is true in your career. Most of these "stats" can be improved with intentionality. In fact some of the stats require time and experience (like Wisdom).
- Intelligence & Wisdom: You get gains on these by shipping code, failing fast, and seeing enough production outages to develop that "gut feeling" for architecture. We learn from mistakes as much as we learn from mentors.
- Strength & Constitution: These are trained through repetition. You build self-discipline and stamina by setting small, achievable goals and gradually increasing the "weight" of your projects.
- Charisma & Dexterity: These are Skill Proficiencies. You don't just wake up with them; you practice them by stepping into cross-functional roles or leading a difficult meeting or volunteering for a task that no one else wants to do.
And don't forget that every promotion attempt is a roll of the dice. Sometimes you roll a Natural 20 and everything aligns; other times, through no fault of your own, the timing of your impact or the audience just isn't right. Everyone can roll a 1.
Ok, I think I'm done with the metaphor now.
What About That AI Tho?
And where do the new AI tools fit into it?
I don't think Software Engineering as a discipline is dead any time soon. Time may prove me wrong. What I think these tools can do for us today is help us make up for some of our deficient "stats". Move faster, build more things in less time, learn quicker, keep us on track.
It's not about who writes the C++ or the SQL, it's about making the computer do the thing.
More Reading
I found The Software Engineer's Guidebook by Gergeley Orosz a pretty useful resource. It talks a lot more about what is expected from good software engineers at a variety of levels (i.e. "fresh out of college" up to the Principal Engineer / Architect).