Stop Being So Damn Clever by Matt
March 08, 2009 in Implementation with 8 Comments
At least for the hard software problems. Let's define easy and hard software problems.
- Posting a form to a server - easy
- Hacking http to implement a server push - hard
Solving the easy problems is trivial. Even if you have not solved them before someone else has, and they published a tutorial with pretty diagrams. It's paint by numbers, and the biggest number you're going to have to deal with is 9. Hard problems are daunting. It can feel like being asked to create the Sistine Chapel with nothing but a fist full of sharpies.
Luckily for us software problems conform to certain rules that art does not and we can offer the following advice on attacking these problems.
It's business time
When you decide to start in on a hard problem get right down to business. Do not start by checking your email, or tweeting 'Solving a hard problem', that would be lame. Tell your co-workers to shut their pie holes and turn off the Rammstein.
Remember what you have learned
Solving software problems does not typically involve inventing new solutions. You may think your solution is novel, but you're probably just as lame as your 4th grade reading partner who claimed to have invented Lego time travelers. I mean seriously, letting the Lego pirates play with the Lego astronauts takes no stretch of the imagination.
What you're really doing is applying techniques you have seen before in new and imaginative ways. To get there you have to use your existing knowledge to explore the problem before going directly for the best solution, which brings us to the most important point...
Don't be clever
At least not at first. Start with the simplest brute force solution that gets the job done. Cherish the moment when you see the problem solved, and then ride this confidence boost to apply what you have learned to a more elegant and robust iteration.
Someone explained it to me with the following anecdote.
Take the problem of creating an algorithm to solve a maze. The simplest solution is to follow the right wall until you reach the exit. It's not the shortest path but now you know there is an exit and you know how to get there. Now you can go back over your path and cut out the unnecessary segments and produce the shortest route.
If this is truly a hard problem then you don't know jack about how to effectively solve it. Going full bore on a three layered redundant fault tolerant cached architecture is going to be a waste of time when you realize that the do_what_you_expected() method does the opposite and you really needed to build the thing in assembly.










8 Comments
Jeremy (ZURB) says:
First of all, wouldn't you just call this being 'goal-oriented' or 'staying scrappy'? When the destination is what you're passionate about, you don't let yourself dick around with clever ways to make the journey.
Or put another way, people won't care about how neat your solution is if it doesn't really solve the problem. And that's the risk you run if you don't get the solution fast.
Secondly, if you're gonna cross that line between space and pirate LEGO, you're on a slippery slope. Why not toss your sister's Barbie in there while you're at it? There are rules. It's complicated.
Matt (ZURB) says:
I would call this a way to stay goal oriented and improve scrappiness.
And you better get a patent on this Lego Barbie thing. I have a feeling that Space Pirate Lego Barbie is going to be huge.
Anthony says:
I had a college professor summarize design patterns as "known solutions to known problems". He was right. He also explained the process of SDLC like this: Do it, Do it right, Do it faster; Sell it, Sell it right, Sell it faster.
Hotel in Muenster says:
Recognize Contrast,fight parliament vote media fact protect department control pay interesting man leading understand bed student develop reply policy her collection programme shut review secretary wash middle quite creation profit that relief base winter cell twice blue check main they drug list extremely source something son agent soon your study consideration increase girl control kind committee united mechanism surely select suddenly gold central writer about easily over lead emphasis test safe latter refer us from down ever beneath start next upon after military mind concentration neither know
hedge fund efinancial says:
Yo Bro Your posts are extremely helpful and informative. What brought you to put up your site ? myself look forward to reading more in teh future.
bottle brush tree says:
Me read a few of your other posts and wanted to know if you would be interested in exchanging blogroll links? Would you be interested in exchanging blogrolls links with my site? Talk Later
mortgages usa reviews says:
Hey My bro hope this is a good as your other stuff Sincerly
liter conversion chart says:
Hello You Hello thanks with regard to your page. Me truly like your web site. Its quite informative. However Me definitely want you to post how you put social bookmarking below your post. Me like it due to da fact its a extremely thoroughly clean awesome blogger hack. Goodbye
Add your comment...