We can't be experts at everything

May 30, 2014

The longer I do this software development thing, the more I realise that we can’t be experts at everything.

Generally an expert is defined as someone who has more than 10,000 man-hours of experience with something. That’s a lot of hours. It means that if you’ve been doing whatever it is you do for your day job, without too many breaks, it’ll take you just over four years to get there.

I started learning BASIC around thirty years ago, when my dad used to bring home his HP-85 each night for us to play with. Big suitcase-looking thing, with really clunky buttons. And a screen not much larger than an original iPhone’s. By today’s standards, it was really limited. Limited memory (something stupidly small like 16 or 32kB of RAM) and really, really slow. It had cassette-tapes for storing programs, which used to take ages to spin up, and the whole thing sounded like a power tool when you turned it on. And occasionally, randomly, capriciously, it would corrupt itself and lose everything.

I loved it. I started with the normal “hello, what is your name?” console programs, and graduated to writing my own primitive games; snake and Pac-man and top-down racing games mostly.

By the time I hit my teens, I’d grown a little bored with BASIC, but there had been a sudden explosion in languages and computing power. Over the years that followed, I became proficient in Assembly, then Pascal and C, and then C++. There was always something new and shiny and faster and more powerful. And always, in order to learn the new stuff, you always needed more RAM, more disk space, a maths co-processor, a faster CPU. Only a couple of my friends had the remotest idea what I was ever talking about, and while they were off discovering girls, I was usually parked in front of a keyboard and monitor, trying to make my crudely drawn games and graphics more presentable.

Quite the stereotypical computer nerd.

I stuck with Pascal through high-school, and it stood me in good stead at uni. While some of the kids were still having to learn Pascal and C/C++ (on top of the actual course matter itself), I already knew those, which was an advantage, and was the go-to guy for a bit. Relatively speaking, I was an expert. But I was no longer the the expert.

And yes, I learned COBOL. Not by choice. I sometimes think those lecturers forced us to learn a bit of it just so we’d know how hard they and their punch-cards used to have it.

Good times…

Things settled down for a bit as Microsoft and IBM did their little dance about who was going to own the desktop. And then after Microsoft Windows appeared, there was a sudden explosion in event-driven programming languages. Visual Basic meant that now you could write applications with proper-looking buttons and menus. You could run more than one program at a time. No more TSRs! Delphi. C++Builder. Microsoft Visual C++. PowerBuilder. Fifty fucking flavours of Java: Beans. Swing. AWT. And Eclipse…

I tried. God help me, I tried to learn them all.

By then I was working for a company who wrote software for hand-held terminals (barcode scanners, stock-taking, meter reading; pretty dumb creatures by today’s standards). Proprietary stuff, mostly based on C and BASIC. You built and wrote your own hardware interfaces, and everything spoke to everything else using serial ports. We were all experts in there, too.

And then, overnight, there was HTML. And ASP. And PHP. And Perl. And fifty more fucking flavours of Java. JavaScript. JScript. VBScript. VBA. I was spending most of my evenings poking around on the internet, trying to learn a bit of everything, and I just couldn’t keep up. No one could. You want to try all these new, shiny things, but there just aren’t enough hours in a day.

At work, we ended up settling on C# and .NET for most of our PC-based development at that point, which was a bit of a relief, because trying to stay on the bleeding edge of all The New Shiny was exhausting for all of us. So it was Windows forms ftw, with various databases (which we were experimenting with too), and varying measures of success.

I’m not even going to go into the database systems that were sprouting like mushrooms at that point. Though, to be fair, SQL was pretty much SQL, and once you’d got a handle on tables and indexes and keys and 1/2/3NF, the data manipulation language is just semantics and sugar anyway… One of my former colleagues used to say, “it’s nice and quiet down here in the database.”

Then we moved to Australia. And all of a sudden, there’s high speed, cheap internet. I know that phrase may give Australians pause. High speed and cheap? In Australia? And yes, relatively speaking, Australian Internet is light-years ahead of South African Internet.

_Back in the early-to-mid-2000s, only reasonably large companies could afford to host and run websites there. South African online shopping was a joke. Probably still is. No one did it. No one could afford to run the sites. And it was sooo sloooow… everyone was on dial-up, even those in metropolitan areas. Their idea of “broadband” was a 384kbps line, with a 3 gigabyte limit, costing the equivalent of about $30 per gig if you wanted a top-up. That was the cheapest option. And this was in a major metropolitan area, over their copper lines. Costs went up geometrically from there. Mobile connectivity… Well, there wasn’t any. GPRS and Edge don’t really count, and no one could afford the usurious rates anyway.

But I digress…

The point I was so slowly getting around to making, is that the internet connectivity was so slow, unreliable and expensive that no one could afford to build and host their own websites. So no one built them. Which meant that no one other than people working for Microsoft shops was using ASP.NET. Or any of the fifty fucking flavours of Java-based web servers. Sure, you play with them a bit during the initial buzz over their release (they’re New And Shiny, after all), but you can’t afford to run it, or host it, and no one will come and look at it unless it’s either donkey porn or pictures of cats. So you let it slide, and go back to building your precious windows forms and console apps._

So I get to Australia, and my very first gig is leading a team who are building an ASP.NET website. In VB.NET. A website. This is a joke, right? No one builds websites, the Internet’s too slow and expensive. Windows Forms, that’s the way of things. Isn’t it? Isn’t it?

It’s not. Just about everything Internet in this country is driven through a web browser. It completely blew my mind. Now it was ASP.NET. And JavaScript. And AJAX. Web Services. XML-RPC. DCOM. SOAP. WCF. JSON. The acronyms go marching on. And on. Another steep learning curve. Nose to the grindstone. Shoulder to the wheel. Fast-forward a year, and I’m pretty sure I’ve got a really good handle on it. I’m teaching other people how to do it properly. But things are still accelerating. And I don’t have time to learn it all. While I was grokking ASP.NET WebForms, someone resurrected ASP.NET MVC. And SignalR. And frameworks! I blinked and there were IoC frameworks and Dependency Injection and Entity Framework and NHibernate and Unit Testing Frameworks. All with their own idiosyncrasies and methodologies. And Windows Presentation Foundation. And Windows Communication Foundation. And Workflow Foundation. Identity Foundation. Fifty fucking flavours of ‘Foundation’, and I can’t learn them all!

And that’s only just part of the Microsoft technology stack! What about the others?

I. Just. Can’t.

But wait! There’s more! Some guy called Steve invented the iPhone, and a company called Google invented Android (and now there’s fifty-fucking-one flavours of Java because you have to be able to use it to program Android apps too). Now there’s Objective-C, and Xamarin and Windows Phone and XML and XAML and AXML. And the devices are all just different enough to give UI/UIX developers headaches because of all those funky screen sizes. Thank goodness HTML5 and CSS3 are so quick and easy to learn, right? No time taken to learn those. Why do you think we have UI/UIX geeks? Because UI stuff is hard, and it’s subjective too, so there’s always someone who’ll hate it.

And God help you if you built anything in Silverlight because that shit won’t run anywhere except on a PC.

Oh, and while you were sleeping, every man and his dog made their own JavaScript framework. Because JavaScript. And a bad case of ‘mine is bigger than yours’. Which one do you pick? Now there’s five hundred fucking flavours of JavaScript framework, and which is the one you should be learning right now? Angular. I think. And Node. Hang on. Or maybe it’s Knockout. And maybe ReactJS. Or Durandal? I’m not sure. Probably a good idea to get some Ember and Backbone in there too, if you want to keep your skills marketable. And what’s WinJS? Is that a JavaScript framework? Best you learn some before you find out the hard way. And don’t forget to learn TypeScript and/or CoffeeScript, while you’re at it. Just in case. Oh, and are you testing your stuff? What with? Jasmine? Ask me again this time next year and I’ll have a different answer. And a different one 6 months after that. And you know about ES6 and Google’s Dart, right?

And what are you going to build and deploy them with? Gulp? Grunt? Fart? Sneeze? Who knows?! I don’t.

So how do you solve this? As good little software development geeks, our job is to optimise for efficiency and reuse. Lean, mean, agile, and thinking 20 years ahead (because in some government departments, that’s how long it’ll take to rotate out an existing solution). We have to build solutions that are fast, cheap and reliable, on a shoestring budget, with very little time and at least one manager who doesn’t have a cooking clue what it is that we do. Somehow we’ve got to remain relevant, and if we want to succeed and still be The Expert, we need to be more relevant than that other guy.

And that’s the nature of the game we’re in. If you’re more than about a year behind in terms of the technologies, then you’re becoming obsolete. Your problem is actually trying to predict which is the Next Big Thing in software development. And depending on which echo chamber you’re living in, or which Kool Aid you’ve drunk, that’s just about impossible to do.

Doctors already solved this though, a long time ago. If all you ever do is try to become an Expert In Everything, and wonder why you’re always just running in place, then you’re doing it wrong. Essentially you’re just a general practitioner. A GP. They work bloody long hours too. But if you want to be The Expert, then you need to become a specialist. Like a neurosurgeon, or an anaesthetist. But they’re constantly having to learn about new techniques, new drugs, new diseases.

It never stops.

Basically you need to become The Mobile guy, or The Cloud guy, or the Big Data guy. And then the best you can hope to do is become familiar enough within that field to know what’s going on, what’s new, and sometimes (most importantly), what not to use. Everyone around you is in the same boat. If you’re lucky, the people in your team are halfway competent, and will complement your skill-set.

And then finally you get your head around that you, yourself, will eventually become obsolete.

Like it or not, there’s always someone younger, smarter, and faster than you. And they all want to be The Expert too. Some are convinced they already are.

Lucky you though. You have experience too. So you’ll move into management.

comments powered by Disqus