My Philosophy on Software Design

I like to think of software design as cracking a code.  You keep working on the design over and over until you’ve finally cracked the code and an elegant design emerges.  I believe the solution exists out “there” and I just have to find it.  Albeit there is more than one solution but some are more elegant than others.  The act of searching for it is software design. 

I’ve been working on a design the past few days both at work and sometimes at home while in bed (my brain just doesn’t like to take a break sometimes).  Last Saturday morning, I think I finally cracked the code.

Comments (4)

  1. Voytek says:


    It’s sound like searching for physics’ "The Theory of Everything"

  2. James says:

    Are you speaking of designing small, isolated sections or a larger system design? What are you thoughts on big design up front vs. little design all the time?

  3. I disagree. Crack is something that you do once. Design is, depending on the type of application and conditions, is something you have to question every day, and go back based on misc customer feedback.

    So there is no parallel to me between software design about program cracking.

    Quite the opposite, the design of the software is validated when it’s out in the wild, and that’s when, 99% of the time, the feedback is like "well, it’s good but what if…", sometimes questioning the most fundamental elements of your design.

    Of course, there is more parallel between software design and program cracking when it comes to software that doesn’t revolve around user feedback. I am not sure you want to make us think that Microsoft produces that kind of thing.

  4. Andrei says:

    Define "cracking a code". If you define this as coding different approaches until you find the most elegant/performance/understandable then it’s wrong. If you define it as thinking about the algorithms+data structures, writing sample test cases (and do an API usability study if you design an API), and do this process iteratively until you meet criteria list above, then this IMO is correct approach.