Collaboration Skills For Software Engineers
Questions by Per Hammer in November 2021
- Let’s try to orient ourselves. We’ll be talking about code-bases and team-sizes today. Who thinks they’ve worked on the largest codebase here? What’s the smallest? Likewise - who thinks they’ve worked in the largest team? (Let’s assume “team” means “group of people who routinely work on a shared code-base for a product”.) And the smallest?
- In 2011 (or thereabouts) Clift Norris identified “a fundamental constant for the average amount of code an untrained programmer can write before he or she its a wall”. The idea is that anyone can get “good” at 2,000 line programs, so let’s talk about what skills we think programmers need at this level - or, as we’re all mostly beyond that limit - what skills we think programmers DON’T need at this level? (We’ll come back to those in a minute.)
- Norris Numbers typically increase in powers of ten, so let’s talk about projects around 20,000 lines of code - what additional or different skills do you think are needed here?
- We’ll get to team-working and collaboration skills in a few minutes, so if you think of any of those skills as we climb up the ladder on lines of code, please note them down and we’ll cover them after. For now, we’re getting bigger - now we’re transitioning to 200,000 lines of code - what new skills or techniques do we need?
- Does application architecture play a role here? We’ve been talking about “combined code-base” in terms of KLoCs, but what if you’re highly-distributed and each individual component is quite small? Do we hit skills-thresholds earlier or later in that case?
- Last one for Norris Numbers we’ll talk about - 2 million lines of code - what do we need now?
- Switching gears, but staying with the same concept, can we talk about a Norris-like number for working together in a team? Let’s try to establish a baseline and some kind of scaling factor. What’s the basic “team” size that anybody can work in without any specific training? Or, turning the question around, at what size team do you think people need specifically trained on how to work together? (2 pizzas?, 7+/-2? etc.)
- Starting at the baseline then, what do we consider the “baseline” collaboration skills needed by software engineers?
- And going up one level - how do we scale? Fibonacci, square, cube? - And what additional or different skills do you think are needed now?
- Are these “team skills” (e.g. team must have at least 1 person with this skill) or individual skills (e.g. everybody on team must have this skill)?
- Optional Going up one more level, what team size are we at now, and what additional or different skills are needed now? Are they “team” or “everybody” skills?
- Optional Do we see any patterns or similarities between kLOC curve and the team-size curve? Does “more kLOC” have to mean “bigger team”?
- Optional How would you differentiate between “engineering skills” and “collaboration skills”?
- Optional How do the collaboration skills we’ve talked about translate outside of software engineering? What are some industries we might learn collaboration skills from? What should we ask?
- What else could we discuss in this context, if we scheduled another/follow-up conversation?
This work is licensed under a Creative Commons Attribution 4.0 International License.