Today's Software is Terrible

Are you a software developer? I am, and everyday I’m embarrassed by my profession.

Every single day, I run across some website, app, video-game, program or plugin that is egregiously broken; embarrassingly broken; 5000-developers-with-six-figure-salaries-and-free-catered-lunches-and-still-can’t-get-it-right, broken.

Apps on my phone, tablet, computer, tv, and car, crash constantly, sometimes resulting in actual data loss. We shoved television behind a pay-wall in a cube that buffers and loads more than it presents anything. We broke copy & paste, because who would ever want to paste a password anywhere? Form fields do this shit where they want to autocomplete and autocorrect and autofill 3 different suggestions at once. We connected wrist-watches to the internet to draw doodles back and forth that don’t even send half the time. We hid mechanical engines behind electronics so complex there is noticeable lag driving performance cars. We connected entertainment systems to airplane diagnostic systems, so passengers can see how high up they are. We connect doors to the web to unlock them remotely, but firmware updates brick them and now you’re locked out of your house. We connect smoke detectors to the web and now the entire house & every connected device in it is beeping because you grilled a burger-patty, and the app on your phone to stop them isn’t responding.

Today’s software is a perpetual nightmare machine of non-stop frustrations.

Writing software is hard, mostly for reasons that don’t actually involve the software itself. I could go on about stakeholders, or how project managers are whatever. I could say that developers should be left alone to concentrate. I could say it’s nobody’s fault because it’s everybody’s fault. I could say all kinds of trite crap to poorly defend the people that populate the position I hold most dear, and currently the most fun job I think anyone could ever hope to perform.

I could say lots of things, but they’d all be lies.

The harsh truth is that many of you shouldn’t be writing software for production use, because you’re just not that good at it yet. You’re not experienced. You haven’t shipped anything. You don’t know how to recover from the damage you will inevitably cause.

You break people’s shit – constantly, anonymously, and without repercussion. You aren’t meticulous in your life, you don’t care about etiquette, so you won’t do your employer any better, and you certainly won’t care if any of your users complain on Twitter.

Sure; mistakes happen. We all overlook stuff. That’s how you learn, right? By repeating and improving and discovering what you missed the previous times. And there is more to discover everyday, because there are more & more design patterns and philosophies and dependencies and processes and teams and stakeholders and deadlines and Carl called in sick and no one understands what he even does here anymore but it’s suddenly critical to today’s problems and why is this line of code 500 characters long and who messed up all this whitespace and why can’t we all agree not to use ternaries and why does this class inherit from 5 other classes and on and on and on.

Software is eating the world, but… garbage in, garbage out. So, what can we do?

  1. Be meticulous. Someone will undoubtedly refer to you as OCD, or apply some other insulting derogatory bullshit label. Screw them; they suck at their job anyway.
  2. Pay attention, to everything. You are the Axel Foley of software development. Writing code and fixing bugs is target practice for your soul. Do it constantly, rearrange the pieces in your mind while you shower, and take everything in. This means watching, listening, learning, while writing less and solving more.
  3. Be vigilant. Everything around you is intricately balanced and ready to come crashing down at a misplaced semi-colon’s notice. I’m not joking. You can very easily cause millions of dollars in revenue losses by breaking just 1 dependency in a complex chain. Code is poetry, but it’s also contagious.
  4. Be respectful. Push your chair in. Hold the door for everyone. Smile at people, even when you’re grumpy. Someone has to maintain the terrible decisions you’ve made once you level-up & move-on, and that’s easier to do when you like the person who’s shadow you’re in.
  5. Contribute to open-source. This is where you earn your lumps; not behind closed doors, not in a sweet corporate environment, and not sitting at a desk sipping a mocha-latté. You need to jump up on stage, give your best performance, and embrace the tomatoes and boos, because you’re probably going to be terrible for your first few rounds.
  6. If it ain’t fun, it ain’t right. Once you stop feeling joy from the software you’re writing, it’s time to move onto something else. Sitting still and being complacent isn’t healthy, even if it feels pretty natural not to burn all those calories moving on to newer and more exciting endeavors.
  7. Make friends. Like, real ones. Ones that will come to your wedding from across the country. These are the people that will remind you how good you are when you need them to, and they’ll have your back when you’re not having fun anymore.
  8. Learn how to make soup. Not even kidding. Understanding how to make the best of what few ingredients you have is essential to writing good software. Embrace your constraints, and don’t be afraid of butter or salt because they’re universally delicious.
  9. Challenge authority constantly. Most people have no idea what they’re doing. They were asked or tasked with a problem, and either they follow the above methods or they pass the problem on to someone else. They’re in a holding pattern, until the next big thing happens to them, instead of making big things happen around them.
  10. Find mentors everywhere. Follow a person around that you want to be like, take bits of pieces of what works for them, and apply them to your life. Steal, plagiarize, and sample small enough traits until you’re an amalgamation of the hippest, funniest, most awesome people you’ve ever come across.

Then, after all of that, sit down and write the best ‘effing software anyone has ever used. ❤️


Comments

18 responses to “Today's Software is Terrible”

  1. […] RT @JJJ: Today’s Software is Terrible jaco.by/2016/08/04/tod… […]

  2. Agree. And being in the Software Development Industry is tough. We have been working really hard on our next release but have not put it out yet because of the reasons you’ve laid out above. But, unfortunately, there is also this thing called sustainable income which we all need and at some point, you really do have to say something is “good enough.” Our products are all about workflow and the question we ask ourselves is, “if we release this product tomorrow, will it make MORE people more efficient than it will slow down?”The unspoken meaning here is that it has to help a huge majority. It can’t be something like 51% helped and 49% not. The outlying cases need to fall somewhere in the less than one percent area.

    The truth is that we ARE affected by outside world things. A piece of software that someone else releases can break a certain functionality in ours. I cannot blame them for not taking our little corner of the world into consideration. They have to ship, too. They have employees. They have to pay them. They have to put food on the table. Until we live in a utopian society in which currency doesn’t matter, it’s the cold hard truth.

    So, the question becomes, how does one reconcile YOUR (JJJ) ideals (which are not wrong) with the realities of existence (which, I would argue, are also not wrong)? When do we as “responsible” software programmers say, “ok to ship”? When do we decide that we’ve learned enough of what we don’t know to make our product ready for prime time?

    Peer review is important. A/B Testing is important. Real world testing is important. Being meticulous is important. But there really IS a such thing as “Analysis Paralysis,” and if holding off on a release means that it will affect the masses negatively, it might be “good enough to ship.”

  3. […] Today’s Software is Terrible Y hablando de malas experiencias de uso y mal software en general, este interesante artículo de JJJ sobre el software hoy en día y qué tienen que hacer los desarrolladores para no caer en la espiral de mal código, malos productos y malas experiencias. […]

  4. Alexandru Vornicescu Avatar
    Alexandru Vornicescu

    you are a web designer and your style is bad, this black background with white text is terrible!!! you do the same mistakes other people do… you are not different…

    1. This is the default theme that comes with WordPress. You’re not the only one that noticed the irony, though. 🐝

  5. The problem I have with software includes the lack of time it takes to build said software.

    Pokemon Go could have taken two years to build. Someone wants to build the same type of app. The problem is they expect it in 6 months. Just because something is possible to build does not mean it can be built in a day.

    1. I agree. I think there’s a perception that software is more like a meal than a building. Sure, there is a recipe/plan, ingredients/materials, timelines, milestones, etc… The difference is that you can’t invent food, but the expectation is that it should be easy to invent software, because that’s just what you do.

      And… everything can take forever if you allow for it to. Eventually (hopefully sooner than later) you do have to call something good-enough and work on the improvements over time. That’s different from a meal, where the expectation is perfection and it’s 15 inconvenient minutes if it’s not to your liking.

      There are interesting social problems to solve in this space, and I’m hoping we’ll figure them out in the near’ish future.

  6. […] John James Jacoby explains why he thinks today’s software is terrible. […]

  7. JJJ, I think you are spot on with the quality of code in recent years. I’ve personally screened over 1000 developer applications during the past 2 years to find that most can “hack” code with no long term organization in mind. It sounds mean but that’s the truth, in my experience. What’s worse is most feel they are entitled to top salary.

    My observation: 1) Talented Engineers are hard to find so Companies will do a lot to keep them around. This gives the false idea that EVERY Engineer deserves the same perks. Not so. One must pay their dues before they deserve the best IMO. 2) Many Startups seem to have unlimited funding so they offer their employees the freedom to do very little for a massive paycheck. Companies that are self funded end up with Engineers who are used to that luxury after Startups shut their doors. Not exactly a great match, worth ethic wise. It’s not necessary their fault. It’s just a fact we deal with in today’s tech world.

    I agree with Marc B. that Software will never be perfect. There are just too many variables to make it absolutely flawless for every single End Users. The fact is technology evolves at warp speed. But, I think as a Community we have the right to demand higher Coding Standards. Bring back the idea that “If you are going to do it, do it right.” This will eliminate many compatibility issues between various themes and plugins in WordPress.org. It is simply not right to leave it up to the Users to deal with messy code.

    I also want to state that I feel Giving back to WordPress is very important. But to me, submitting a project to WordPress.org should be treated like gift giving. I was taught from a young age not to offer crap to others. Give your best if you are going to give, even if it’s $1. Give your best dollar. Intention counts. And for those wanting to make a living with software, start charging what you are worth so you can afford setting aside time to learn from seasoned Developers, as JJJ mentioned. Take classes. There are many top Developers willing share. And there are many Dev Shops willing to take on Interns. Lastly, I have to give a shout-out to Object Oriented Programming, It is great for those looking to learn long term code planning and organization. If you are looking to be hired, quality firms seek OOP skills. That’s my 2 cents (or dollars) for the day! I thank you for writing is awesome blog post. =)

  8. Been following your writings for a while, had to stop and appreciate this one. Gem of an article 🙂

    Great work you’re doing with BuddyPress, it’s entering both “practically useful” and “WordPress” zones!

    More power to you!

  9. sarkarinaukar Avatar
    sarkarinaukar

    been following your work for a while JJJ, couldn’t stop myself from commenting here! Gem of a piece 🙂

    kudos to you and your team for the transformational work on BuddyPress too.

    More power to you!

  10. […] John James Jacoby legt uit waarom hij denkt dat vandaag software is verschrikkelijk . […]

  11. D Colburn Avatar
    D Colburn

    Wondering… why no focus on developers collaborating with 1) end users to ensure apps actually automate business processes people can use effectively 2) Developers collaborating with Ops to ensure apps are designed for stability, serviceability and recoverability.

    Maybe developers can be too focused on comparing coding skills between themselves, rather than looking at how effectively they function as solution design team players?

    1. All good points. Cooperation between different interest groups is a huge part of everything we do, and I think integrating these parts & people is likely where the breakdowns occur.

      For this, I don’t know that I have a fully fleshed out response. But I think you’re right that there are a lot of social dynamics that can distract people from doing their best work.