[WARNING! This is an archived post and as such there may be things broken/missing here.. you have been warned.]
I've been reading a bunch of stuff online the last week or so that talks about theory or at least the idealism that some have thrown out. Thanks to Dave Hayden, Joe Healy, Jim Zimmerman, and my buddy Tim, I think I have some perspective on this stuff.
I'm well aware that some will write me off after this post (but probably not because it seems so many love to argue on the net). There's actually a recently featured post here on CodeBetter (that I won't draw attention to) that talks about the ideal of perfecting your software. It's an interesting read although I'm not particular fond of the "elitist attitude" nor the "jabbing nature" of the post (which I seem to remember the "jabbing" stuff got someone in trouble on CodeBetter in the past, but alas it will probably get me in trouble instead).
Anyway, I think the ideal (minus the jabs at MS) is laudable. Unfortunately, I think that this is far from the reality that many of us live in. I had a customer want a web site that used MS Access as its back end.
A decision like using Access is not a good one... and even after being provided the data on why this is a bad idea the client basically said "I'll go elsewhere if I need to..."
At the end of the day, I had to build it (this was before I went indy... but even at that I'd take his money today). Now mind you I built this sucker using the best tools I had available (NHibernate/Castle as an ORM because well with Access it's all inline SQL). At the end of the day the customer was thrilled and I was scared of that the database might blow up.
I met a guy yesterday who wrote ASP.NET 1.0 using notepad for 9 months, AND was successful at it (long story why he had to do it... let's say he works for the US Gov't at some level and leave it at that). You might say "MORT", but I say "Wow! the crap we all deal with in the world of reality." We often use the word "Mort" in a negative manner and honestly the description is inaccurate. The number of guys I would call Mort (the 9-to-5-er who doesn't want to learn anything and only wants to use what's handy) I can count on 1 hand.
You may scoff at this, but you know what, I bet this happens to you or has happened to you (I'm not talking to the idealist; I'm talk to joe programmer in the trenches). "We know you said that to do this right would take 1 month, but we want it next week or it's..." your butt, your bonus, etc. So what do you do. Well there's always the choice of leaving, but eventually that mentality catches up to you (6 jobs in one year looks really bad on a resume').
More than likely you cut a few corners to get it out the door. You skimp on the QA process (tests, etc.), you probably cut back on your model as much as you can... maybe you throw Business Logic in (God forbid!) the ASP.NET codebehind, because "well it is an Access database being used and its probably as maintainable as anything else." And why? Because you are a guy who gets crap done... sometimes you get to build the big architecture questing after the "perfect" model, but it's not often you get to do that... sometimes you get to work on the code again to add new features, but again, it's probably under the same duress.
AND, I don't think it's evil. Yeah, it's not the architecture you think is the best... maybe it is using the drag-drop mentality often maligned, but it gets the job done within the timeframe you have been given(and the customer is aware of that they are making trade offs on the design). The trick is to do what needs to be done and to be able to easily justify what you did... Let me give you another perspective...
My dad gave 30 years to a steel mill where he was told what to do. Now you may say "Bah, steel mill! Your dad is unskilled!" ptuee! I spit on your words. My father was a maintenance man in a steel mill which means he fixed the machines... all the machines. If that meant fixing hydraulics he did it. If that meant welding something he did it. You see my Dad was trained in all those areas (and probably more). The bosses (these "bosses" were usually hired from somewhere else... not internally promoted) who were willing to listen to him got better work because he helped them (using his years of experience and training) to figure out a better way (which was oftentimes quicker to do or made things quicker in the long run). The ones who -- like what we often deal with-- didn't want his advice because they were hell-bent on doing what their limited experience told them should be done... well, they got exactly what they asked for (which sometimes resulted in a mess).
I'm not saying you shouldn't target perfection... you should, but oftentimes the design choices made are not in your power (so you have to apply what patterns you can find to resolve the problem). If you are "Einstein" this will drive you nuts (because it ain't perfect). If you are "Elvis" this bugs you, but it doesn't keep you from "getting it done," and you are probably way more valuable to your company then any 3 guys of the other types.
[I used the MS developer personas, because I have recently seen their names come back up again... I'm still not thrilled with the list, because Mort really doesn't exist... most of us are some variation of Elvis... or Einstein... with some Mort tendencies... its a stereotype that creates the all kinds of prejudice that you want to avoid.]