Software Development As A House
In my continuing quest to reveal boring and irrelevant information to the world, facilitated by the convenience that I've had my laptop nearby at opportune times over the past several days, I've decided to post what I've done this weekend - I stripped clean and then basically completely redid a room (no wussy "refactoring" paint touch up or cleaning - I threw it all out [those morons that did it before were a bunch of two-bit, .COM-era hacks!]. Tore up the carpet, door, ripped off the trim, replaced every outlet and light fixture, got rid of the window crap). This room will be the nursery for my second child, ETA 1 week, so I want it rather nice. Yes, it's being done very last minute.
I compare it to software development because my methodology while finishing this room is very similar to the way I design and develop software - this room will be viewed by a number of people whose capabilities in this realm I respect, and whose opinions I value. Due to this, everything has been done to swiss precision - every strip is perfect, even where it won't be visible under trim, every piece of trim has carefully coped-saw cut edges that align precisely, exactly as the best practices dictate, the paint was after perfectionist filling and then double priming, and so on. Basically I put a lot of extra effort in purely to satisfy the close inspection of these craftsman, even though really 99% of people wouldn't notice, and it practically makes no difference in the usability or aesthetics of the room.
This is extremely similar to how I, and I suspect many others, architect and/or develop software. If I know that the code itself will be viewed by respected peers, I expend significant effort to criticize-proof my creations, ensuring that I've taken into account every possible scenario or technology leveraging. I do this even where the extra effort goes against my own best judgement of what is really worth the effort, and what is reasonable, and this "peer fear" has led to a lot of last minute overtime while I antagonize over every detail.
The point of this post? I guess it's that a lot of tasks are significantly over-engineered/over-crafted for the sole purpose of criticism-proofing. I would imagine that countless deadlines have been missed not because the developer couldn't accomplish the requirements, but because they didn't accomplish it with a finess that they were confident enough to unveil to the critical eyes of coworkers and peers.
March 13th, 2005
I neither used a coping saw (just a power mitre at 45 deg.) on the quarter-round, nor did I double-prime the walls in my house.
You probably *still* got more done than I have.
But I bet I've drank more beer lately.
Perfection is for those with a lot of time, or a lot of drive, or both. I have neither. YMMV.
March 14th, 2005
Nice post, Dennis. I think it's a very valid analogy, as I have actually been taken off of a few software projects in the past because I was "taking too long"...not because I couldn't just "get it done", but rather for exactly the reasons you stated.
On every project that I *have* managed to finish to my satisfaction, I have always received comments from users about how much work I saved them or what a pleasure my software was to use. It's not uncommon that a longtime user will come to me grumbling about being forced to use a bug-ridden, counter-intuitive "upgrade" to one of my applications. "I wish I could just keep using your program," they'll say.
Much of my "problem" stems from the fact that I have a "shrink-wrapped software mentality" even though I work in the retail industry and develop in-house IT solutions where "good enough" rules the roost. I have a hard time distancing myself from a project and just working "direct to spec" if I know there will be real-world shortcomings that weren't accounted for in the rough design (if there even IS a design spec). Part of it is hubris and pride, but I also feel a personal responsibility to the people whose daily job duties my software will impact. How is it my right to add undue stress to their workdays just because my boss is stressing ME out?
Since my company isn't in the business of selling software , the management tends to view development time as a "necessary evil" that is a drain on the bottom line. What they aren't considering is that the lousy software that usually results from cutting corners often ends up making our non-IT employees LESS EFFICIENT at performing core job duties that absolutely DO impact the bottom line. Sure, part of the reason I want to do things right is that I personally have a problem with making people's jobs unpleasant by forcing them to fight with software solutions that don't work very well, but it is also true that taking the extra time to implement enterprise software correctly can actually be a worthwhile financial investment if it means that employees are able to perform more efficiently in the long run because of it. Time that employees spend fighting with software while trying to do their jobs is time that they are NOT devoting to making money for the business. Software that is properly designed and constructed, on the other hand, can not only eliminate unnecessary wasted time, but can also make productive time MORE productive.
Unfortunately, my industry seems to value programmers who can just bang stuff out to spec while not really worrying about whether or not they make the user's jobs harder or less efficient. As long as managment *thinks* the software works, these programmers will be rewarded at companies like mine.
I've found that in the "in-house" sofware world, the amount of appreciation a programmer gets from users is usually inversely proportional to the amount of respect he gets from the management. People that take the extra time to do things right are often just peceived as "slowpokes" who are "not on board with the company's vision".
This ongoing frustration is the main reason that I've asked for my job duties to be shifted away from development and more toward user support, testing, and spec and documentation writing, which allows me to:
(a) Feel like I'm making a difference to the users.
(b) Not feel personally responsible when thinks suck.
(c) Free myself from deadline pressure so I can start to think about a long overdue career change.
I'd just quit and go somewhere else, but the problem is my development skills are at the level where I'm sort of stuck in between being over-qualified for (ie:bored with) most in-house IT work and under-qualified for and completely inexperienced at commercial software.
Anyway...I suppose my post was more of a vent session than a direct response to Dennis' post, but I guess my point is that I'm sure that a LOT of programmers DO miss deadlines and stress out because they're either too perfectionistic (worried about being heckled by peers), too "morally conscious" (worried about subjecting their users to unnecessary punishment), or perhaps even both...
(My apologies to the moderators for being so on-topic.)
March 14th, 2005