Wednesday, May 21, 2008

On Thrashing

Sometimes I sit back and am amazed at the design tools we have today. As a single developer I can create a very functional web application in a matter of months. Even with the great tools we have today developers still face impediments to productivity. If you have any experience writing software then you have faced the problem of thrashing. When a fly is caught in a spiders web he will wear himself out attacking the problem with every once of energy he has, only to find in the end that he has made no real progress. That is the essence of thrashing.

For a designer thrashing can be broken down into different types. I've identified four that I'm sure many people have experienced, although I'm sure there are more types out there. If you can think of anymore leave a comment.

Design Thrashing - Design Thrashing happens when you first start architecting a product and you want to build a solid foundation to work on. Quite simply there are so many different ways to do things and the developer must make a choice that will have great impact on the future maintainability of the product. The thrashing comes in because there is fear that will choose a less than optimal course and will suffer for it in the future. The only real solution I have found for design thrashing is to get familiar with design patterns to build off the ideas of people who have come before you.

Tunnel Thrashing - Tunnel Thrashing comes into play mostly when debugging. You think you know what the problem is but everything you try to do to fix it fails. You may back further and further away from the problem trying to find the exact spot of failure but the solution eludes you. I've found the simplest way out of tunnel thrashing is to talk to another developer. There has been many times when I've talked over something with someone and in the middle of talking the light comes on and I realize what the real issue is.

Boredom Thrashing - Boredom Thrashing tends to strike towards the middle of a project. This is when you are just sick of the project you are working on and just can't bring yourself to think about it anymore. I'm not sure there is a cure for this type of thrashing, except maybe alcohol consumption.

Overwhelmed Thrashing - Overwhelmed Thrashing comes at the beginning of a very large project. I've seen many software rewrites fall into this type of thrashing. The current application is 10 million lines of code and a rewrite is necessary. You start talking to current users and they describe in excruciating detail that the rewrite must do everything the old app did, and it must do it better with more stuff. The application spans 5 different departments that all expect different outcomes but must all be coordinated correctly and, oh yeah, when can you have that done? The only cure for overwhelmed thrashing is to try to chip off a little bit everyday, and let time take care of the rest.

Blog Thrashing - This is when you write a blog post instead of hammering out some code like you should be ;-)

No comments: