Software is hard!

Not too long ago, I was telling my uncle about an e-commerce site that a coworker and I were able to develop in about 4 months. I was shocked at his next query:

What is so hard about that? Why did it take so long?

What??? I write thousands of lines of code over dozens of pages, and you don’t get it? In a way, that means the software was successful. Often, the simpler the end result, the more code it takes to achieve that simplicity. Most users are completely oblivious to what it takes to create something that actually works.

 Frustrated Developer

Windows has over 50 million lines of code, which was written by over 5000 developers. I’ve heard that NASA spends over $10,000 per line of production code.

So why IS software so hard? It usually requires the entire mental ability of a software developer. In a given day, one would surely exercise their entire brain.

To write a feature, here is just a fraction of what must be considered:

  • Software creation is art and science. You must be creative, imaginative, logical, talented, and knowledgeable.
  • Layer synchronization - Data gets passed up and down between layers, and they all need to agree on how they will call other functionality, as well as how they need to be called. Decisions need also be made to determine if and where data will be validated.
  • Failure modes must be considered - For every line of code, there needs to plan to handle that failure.
  • Affected code needs to be evaluated - Ever heard the line "this is a small change, it won’t break anything". I’m not falling for that one again. It’s like changing out a block at the base of a pyramid.
  • A testing strategy needs to be formulated - Unit tests need to test the new code, and acceptance tests need to test the new functionality
  • More code must be maintained - Every line of code you write counts toward the theoretical maximum number of lines of code that you can realistically maintain.
  • Consider performance and memory - The questions in this area are virtually endless, and the answers might not come easy. Compromise is inevitable.
  • Technology considerations - How much does the target platform vary? What technologies will work, and which ones are the best?
  • Balance modularity and simplicity - Sometimes they go hand in hand, sometimes they’re a tradeoff.
  • Balance the needs of the present with the needs of the future - Try not to play the "What If?" game, but at the same time, don’t be ignorant of the future.
  • Many companies have cross functional teams that developers must report to. Instead of having a manager that feeds a developer their work, now you have multiple sources that are asking for conflicting information. So much for a developer abstraction layer.
  • You’re not the only developer - You need to be cooperative and collaborative to simplify the integration of your code.

Nothing is ever as simple as it seems. You’re not going to piece together code snippets from the web and create a great product.

Kick It!

4 Comments so far »

  1. Obishawn said,

    Wrote on May 23, 2008 @ 7:39 am

    Writing a piece of software is like a chef coming up with a brand new recipe or a furniture maker creating a new chair that is different from all other chairs, or an artist coming up with a painting that stands out from the rest, or an author writing a story that hasn’t already been written.

    Software developers are not following some set of instructions to write the software. They are using every last bit of their creative juices to not only make the software do what it’s supposed to do, but to do it well, in the simplest way possible and be the most flexible so that the software isn’t at the end of it’s life cycle the moment the first version is released.

    A complex machine like a car can be built in a very short time. However, designing a brand new car takes a very long time even though it works on the same principles that all other automobiles work on. Do people ask car companies why it takes them so long to design a new car? If so, then I feel for them because they are in the same boat as software developers.

  2. Arjan`s World » LINKBLOG for May 24, 2008 said,

    Wrote on May 24, 2008 @ 10:27 am

    [...] Software is hard! - Jason Young ‘ Nothing is ever as simple as it seems. You’re not going to piece together code snippets from the web and create a great product ‘ [...]

  3. Paul said,

    Wrote on May 24, 2008 @ 11:26 pm

    While I agree with you on most of the points, I would not call coding an art or a science. We are coding monkeys, that is all. And yes, we are not following a set of rules most of the time, but then again, we are reusing code over and over again. I have been doing this for about 10 years now, and I am not considering this art or science or engineering or any of these fancy things for that matter. While programming is hard, selling is much harder, simply because you are not dealing with machines but with people, and your goal is to get their money. Managing developers is harder then programming - trust me on this one.

    As far as your uncle is concerned - my boss loves to do this to me:

    “Can we just add a button to do a certain feature” - I have to explain to him that it is very easy to add a button, but to code what that button actually does, that is a whole new thing.

  4. superjason said,

    Wrote on May 25, 2008 @ 7:30 am

    Paul, note that I said “Software creation” is an art and a science, not “coding”.

    In my job, good or bad, I’m basically talking directly to customers and I’m responsible for solving their problems, not just writing specific code that is asked for.

Comment RSS · TrackBack URI

Leave a Comment

Name: (Required)

E-mail: (Required)

Website:

Comment: