Refactoring

Summarized using AI

Why Is This So Hard?

Jack Christensen • December 09, 2019 • Earth

In the video titled "Why Is This So Hard?" delivered by Jack Christensen at the Ancient City Ruby 2019 event, the speaker delves into the complexities and frustrations encountered in software development. With 20 years of professional experience in software development, Christensen discusses the intrinsic difficulties associated with building software, emphasizing that it's not just the technical implementation that poses challenges, but also planning and maintenance over time.

Key Points Discussed:

- Challenges in Software Development: Getting software to run, function correctly, and be secure is increasingly complex. Developers often find themselves questioning why tasks that seem simple take disproportionately long, leading to frustration.

- Personal Philosophy: Christensen adopts the mindset that if something is too hard, it indicates a flaw in the approach or the system itself, encouraging the search for easier solutions.

- Variances in Difficulty: While some aspects of software development are inherently difficult due to complexity, many frustrations stem from avoidable issues and inefficiencies.

- Historical Context: The speaker shares his early adoption of Ruby on Rails after being inspired by David Heinemeier Hansson's tutorial on building a blog in 15 minutes. This decision marked a pivotal moment in his career, although he acknowledges that guessing wrong about technologies can lead to increased difficulty.

- Evolving Requirements: Christensen also highlights how changing business requirements often complicate code maintenance. Even competent developers face challenges when the initial goals of a project shift dramatically over time, leading to temporary solutions rather than long-term fixes.

Through vivid examples from his experience with various programming languages and frameworks, including Ruby on Rails, jQuery, CoffeeScript, and modern frameworks, such as React and Vue, Christensen demonstrates the unpredictability inherent in the developer's environment.

Conclusion: Jack Christensen's discussion provides valuable insights into why software development can be challenging. By acknowledging the intrinsic complexities and advocating for better practices, developers can strive for more efficient and less frustrating workflows. The key takeaway is that while some challenges are unavoidable, many issues could be mitigated through improved communication, planning, and adherence to best practices in coding.

Why Is This So Hard?
Jack Christensen • December 09, 2019 • Earth

Ancient City Ruby 2019

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?
Explore all talks recorded at Ancient City Ruby 2019
+5