00:00:12.660
Okay, my name is Jack Christensen, and I've been doing software development professionally for about 20 years, and longer than that for fun.
00:00:19.900
One of the things that's bugged me is why is it hard? I don't think this is a controversial opinion. You know, I've never heard a programmer say, 'The thing I really hate most about my job is that it's just too easy. It's boring, and we never get to do anything new.'
00:00:25.860
But as it turns out, getting stuff to run at all is sometimes really difficult. Getting it to work correctly is a lot harder, yet getting it to be secure is even harder. And then, when you're planning it out, estimating how long it will take to build everything can be enormous challenges.
00:00:37.930
A lot of things are hard, you know? Running a marathon is hard. Learning to play an instrument is hard. They aren't too hard; they're just difficult things to do.
00:00:43.960
So, is software development too hard? A few years ago, I was pairing with a friend of mine on a normal Rails project, and at one point, after we had been working together for a few hours, he pulled me aside and said, 'Hey man, can you tone down the negativity? You're kind of being a little bit of a downer.' I said, 'Yeah, sorry man, I didn't realize.'
00:01:00.219
But I had just been giving a running commentary, wondering, 'Why does this take an hour when it should take five minutes?' It's not that there was anything wrong with the codebase; it was just too hard, and it was really making me frustrated.
00:01:14.600
I try to live by this principle as a programmer: if it's too hard, I'm doing it wrong. There's got to be an easier way.
00:01:20.610
Maybe this should be better worded—something is wrong. Maybe I'm doing it wrong, or maybe somebody else did it wrong. Maybe the whole system is wrong, but something needs to be fixed.
00:01:31.280
So, why is it hard, and what can we do about it? That's what this talk is about.
00:01:35.890
Some parts are just legitimately difficult. There's intrinsic complexity that is just enormous. But a lot of the things that are hard and frustrating in software development shouldn't be.
00:01:47.290
We're going to take some time to go through various reasons why software development is difficult, and we're going to discuss what we can do and what we can't do.
00:01:53.740
In late 2005, David Heinemeier Hansson, or DHH, published a video on how to build a blog in 15 minutes. At that time, I had been doing PHP and some ASP.NET, and after watching that video, I thought, 'I am done with ASP and PHP. This is the way it's going to be now.'
00:02:07.030
I was very early in my career, and luckily I was at a non-tech company, and they just said, 'Do the things we need.' So, I thought, 'Great, I'm just going to rewrite everything in Rails and push it into production.'
00:02:14.970
I did all that before version 1.0, and as they say, "It's better to ask for forgiveness than permission." But in this case, I didn't have to, because it was the right decision, and it worked out.
00:02:24.230
But it wasn't because I was really smart. I was a novice, but I got lucky. I made a guess, and it worked. It was a good decision for me and a good decision for the company.
00:02:39.180
That app is actually still running today; it's been maintained all the way up to Rails 5. However, I haven't always been so lucky.
00:02:52.950
You know, one of our previous lightning talks mentioned Prototype and jQuery, and I was there. I did a lot of that, and it was like, 'Wait, I've got to learn something new.' Now I'm thinking 'Oh, CoffeeScript?' That was really cool for a while, but knowing CoffeeScript doesn't really benefit your career much today.
00:03:00.300
You know, how many more of those have there been along the way? Should I learn Backbone? Again, it was useful for a time, but you've probably migrated off that. Then it got a little closer to today.
00:03:12.970
Okay, we want to have a rich ecosystem. You remember—oh, is it Angular? Ember? Knockout? React? Today, is it React or Vue? Or maybe you're really on the cutting edge, and you want to go with Svelte or something like that? But we just don't know. It's really just a guess often.
00:03:31.629
And it makes a big difference to how difficult it will be in the future. If you bet wrong, things go poorly. But that's not the only reason it's hard.
00:03:50.240
This is similar, but instead of just technical issues, we have changing business requirements. I've rarely been in a codebase where I felt like, 'Boy, the people who did this prior to me just didn't know what they were doing.'
00:04:05.450
Pretty much everybody, with few exceptions, is competent. They do a good job, they work hard, and they do their best. But if you have a codebase where the business initially said, 'Do this,' and over several years the business is now doing the exact opposite, how many times has there been a feature where you say, 'Well, we could refactor the thing in two weeks,' or we could put, you know, a couple dozen if statements in there in two days and get it out the door?