Solving problems vs. working around problems

A few months ago, my doctor suggested that I start taking 2 ibuprofen every 4 hours for life.  That is called “working around a problem”.  Instead, I saw a physical therapist and some registered dietitians and we discovered I have a grain allergy — now I don’t eat grains.  That is called “solving a problem”.  When programming (or really any kind of “inventing”), there’s a mindset difference between the two.  If Google Calendar doesn’t have a feature you want, you can either suffer through it, or write a browser plug-in to do it for you.  (Or write your own calendar.  Though if this is your solution, I have some round objects for you to re-invent.)

Why?  Once you start seeing the world as problems that can be solved, rather than just worked around, it creates enormous incentive to build tools to do so, and leads to greater happiness.  (Citation: me.)

Why not?  Some of the people I talked to believe that this is a personality attribute rather than something that can be taught.


Identifying problem “types”

If a Carpentry School asked me to create a website that listed their students in alphabetical order, I wouldn’t have to figure out how to alphabetize students.  That’s because sorting students is the same as sorting a million other things that I have sorted before.

Why? Recognizing problem types is an important part of growing up as a from padawan-coder to jedi-coder. 🙂

Why not? It’s not a show-stopper to reinvent the wheel every time you need something round.  I don’t wish it upon anyone, but it’s possible.


React on user behaviour

When the user clicks, mouses over, types the ‘K’ key, or wears a funny hat, do something.

Why?  I was surprised how hard it was to explicitly state the “why” here.  Something along the lines of: this is what a lot of tools do.  It’s a necessary step for interactivity.

Why not?  I guess if you don’t want interactivity, you don’t need this.


React on environment change

When the weather in Toronto gets above 0C, when my friends tweet a link, or when I get an email in my Inbox, do something.

Why?  Tools don’t necessarily have to wait for user input to change.  The user is just one of many signals they can react to.

Why not?  Again, if you don’t want this type of tool, I guess you don’t need this.