Sunday, October 20, 2019

Reflections on Software: Ending the Arms Race

My original plan when opening this site was to explore the software industry. But as I continued I realized there were other subjects I wanted to explore just a little bit more. It also dawned on me that writing about the field might not be as important as I first thought.

But with this post I'm going to break that trend and reflect on the industry, why I haven't written about it much, and ending the arms race (or why developers can relax a bit more than they do).

Software as a New Industry

If you take a look at the Stack Overflow Developer Survey from 2019 it's hard to miss that our industry is young - most developers out there are under 35. To me this doesn't point to the innate ability of young people, but rather that there's been an explosion in the number of working developers in the past few decades.

After all, the internet didn't become ubiquitous until the mid-nineties and the industry has only grown since then.

The Software Industry is New. So what?

With the software industry being so new we're seeing rapid change in it's frameworks, management styles, and even government regulations. I won't go into depth here, but this is all to say that we're in the midst of growing pains.

The other facet of this newness is that there's confusion over who qualifies to work in the field, confusion over what any given developer can do, and confusion over how we as developers should manage our careers. Even HR departments tasked with sourcing developers often have a tenuous understanding of the field.

The point I want to drive home here is that because of this confusion there's become a tendency for us developers to project our ability, learning and skills. Our fear that we'll be out of work one day means that we can often be found ramping up our Github, discussing development online, writing blog posts, and so on - exactly the kind of thing I'd be doing if I focused on software at this site. 

Meeting in the Middle

The above situation raises the question, however, of how to rein in the confusion and simplify how we look at development. A question that when answered will hopefully have us realize that showing off our skills isn't so important after all.

My approach to the confusion would be to simplify the definition of what developers actually do.

As developers we're usually hired into organizations with a functional code base, and spend most of our time maintaining and adding to that base, rather than developing new projects. And even when we are involved in new development there's often preexisting code to model the new development after.

All of this highlights that our field is rarely complicated, and that to work in software a few broad skills are often enough:

 - The ability to read, write, and understand code
 - A broad enough understanding of software to adapt to new technologies
 - An ability to solve abstract problems

Ideally we have some soft skills too, but if we limit the conversation to the production of code we're faced with this question:

Do we have a basic understanding of how software works, and do we have the ability to write it

That's it. It doesn't matter which technologies we've used, which side projects we've worked on, if we have a blog, or are involved in open source. All that matters is that we have a mindset for producing software, a history of doing so, and a genuine interest in the field.

And so everyone who's working in the software industry can bank on this point. Hiring managers need to make sure that their hires meet these criteria, and developers should make sure they meet them too.

Rather than focusing on every last skill, no matter how minor, focus on broader understanding and ability.

Pulling it Back Together

So to turn back to my original comment - why I haven't been writing about the field - it's because the industry doesn't need more people writing about it.

In the midst of the confusion and in the race to express our know-how the knowledge out there on the software industry is astounding. That amount of knowledge is in fact so vast that it's possible to learn anything we want to given enough time, energy, and motivation.

And so while I've considered writing new posts about software since opening this site, my ideas always felt trite or unnecessary. The truth is that I can't say much that hasn't already been said somewhere else, and by someone who likely said it better than I could anyway.

Where's the Humanity?

But if I did have to offer a prescription for both new and old developers, it'd be to focus less on technical skills alone, and to embrace subjects that are far afield from our industry.

In my eight year foray into development I've been much more likely to find developers who are too focused on code, than I am developers who can't solve problems. The truth is - all of us can program - but our real increase in productivity comes from defining problem spaces, learning how to work with a team, understanding our domain, and bringing disparate knowledge into our work.

And beyond productivity broadening our minds makes us better humans, which can be meaningful for reasons beyond job security.

Wrapping Up

The truth is that our field isn't that interesting, and needs no more explanation than any other skilled trade. For a person with the right mindset it's not even that difficult to do well. There's no magic involved or silver-bullet to become ten times more productive. Like other trades, our skill level correlates with our commitment to improving our craft, our commitment to learning.

And for those who have a track record of getting things done there's never going to be a shortage of business owners willing to leverage their skill to solve problems and build products.

So maybe it's time for us to sit back, relax, and end the arms race. To take our roles seriously and commit to continuous improvement, but also recognize that if we can write software well that we don't have much to worry about in terms of career security.