SATURN 2018: How are we growing great software designers?
This is my position paper for the SATURN 2018 workshop on Growing Great Software Designers. You may also be interested in the workshop’s summary outcomes.
How are we growing software designers?
George Fairbanks
6 May 2018
SATURN Workshop: Growing great software developers
Using broad strokes, we can paint a picture of how we grow developers today and compare that with how we did it in the past, then make some guesses about how we could do it in the future. We can start our picture by listing the activities that we use to grow. By looking at how frequently the activites have been used and who is driving them, I can see some trends.
Here is my list of activities for knowledge transfer and skills development. Caveat: I’ve grouped them roughly but not everything fits neatly into categories.
- Education (ie distilled ideas with broad agreement): University education, corporate education (via external), corporate education (internal), books
- Research: Conference literature
- Experience reports: Blog posts, watercooler / lunchroom talk, conference / company prepared talk, co-worker word of mouth
- Advocacy / editorial: Keynotes / blogs, lunch and learn / tech talks
- Code-centric: Code reviews, coding standards, patterns in code you read / in your project, patterns in code you use (eg libraries, API surfaces), previous projects, Effective Java (and similar books), Stack Overflow and similar, how-to examples
- Design-centric guidance: Architecture / code guidelines, API / tooling affordances
- Personal experience: Personal coding / design, reviewer of code / design, overall project history
- Other: Conference attendance, role consolidation (DevOps), periodic employee performance reviews, apprenticeship / mentoring, certification (more of a hurdle than knowledge or skill itself)
Perhaps you would compile a different list, but my guess is that we’d have a lot of overlap. Some things pop out as changes over time because they simply didn’t exist 20 years ago, covering pretty much every activity depending on the internet. Simply put, the internet made possible many more ways to grow as a software designer. I don’t see the Education or Research categories as having changed much.
A few trends stand out, which I’ll highlight by asking three questions.
First, is this activity initiated more often by the individual or by the company? That is, does the person self-select into the activity (eg, I decide to do this because I’m curious) or does the company push it (eg, engineers at level 7 are sent to training).
Second, is it happening during work hours or not?
Third, is the growth deliberate? I’ll call the two extremes implicit and explicit. The intent here is to distinguish the “unplanned but clearly they are learning over time” kind of growth that happens simply by being on the job with your mind open from a more systematic effort to identify growth areas and skills plus an agenda to achieve growth.
Focusing on those two dimensions, I see a trend toward software design skills development that is:
- initiated by the individual
- outside of work hours
- implicit in its goals and progression
Contrast this with something less often seen today than 20 years ago:
- initiated by the company
- during work hours
- explicitly defined skills and agenda to apply design activities
I expect that many people around my age would agree with the broad strokes of this observation. However, I expect considerable debate about whether that’s a good or bad trend, and about how things will be different 20 years from now.
Looking in my crystal ball, I see more knowledge and techniques being pushed into the canon taught in universities or otherwise generally agreed upon as “the body of knowledge in software engineering”. Other knowledge will not be as universal, but within a given company it will be standard practice. We will see software engineering education get a slightly larger share of the time in the undergraduate curriculum and companies will lean more heavily on deliberate skills development.
My reasoning is that the last couple decades saw a ton of disruptive innovation (eg the web) where success depended not only on core skills but also knowing the specific quirks (JavaScript and browser technologies). To me, it feels like the rate of change in the latter has already slowed and there are financial incentives to stabilize web platforms. These technologies forced normal software developers to become distributed system developers and database experts. There just aren’t that many more deep areas of knowledge in software design. Functional programming is another deep area but I expect it will evolve such that it won’t be much more complicated to use than existing programming languages. I’m not suggesting that innovation will stop, but I am suggesting that arbitrary churn (how many times have we re-invented the tech surrounding remote procedure calls?) may slow down as the cannon is established and our educational system teaches it.