Click here to Skip to main content
Click here to Skip to main content

Pro Developer: Delivering Quality Software

By , 1 Sep 2002
 
Pro Developer is a monthly article series devoted to issues that affect developer's lives in the workplace. Each installment will touch on topics that are important, but often ignored by many developers. The first installment, 'Optimize your View', discusses the need for developers to look beyond the coding aspects of the job and shows the direction of articles to come.

Optimize Your View

For anyone who spends a lot of time writing user interface code, optimizing the view immediately conjures up images of windows, clever little UI gadgets, usability issues and a long string of design meetings with excitable and over-caffeinated programmers. The fact that these little get togethers may very well involve airborne white board erasers traveling with great velocity and purpose is just another testament to the passionate importance we place on how our software is presented to our customers. Indeed, the portal through which the user peers into the depths of our code often seems to define the software itself, at least in the eye of the beholder. Consequently, we acknowledge that user interface issues are not just a matter of putting on a pretty face, but in fact define the boundaries within which our users will operate. Put a clunky view on a good piece of software and you end up with a clunky piece of, well, software.

However, those of you who have already fired up your programmer's editor and called in your order for a pepperoni pizza in anticipation of yet another exciting session of coding are probably getting a little ahead of the game. We're not here to talk about the bits and bytes of coding. We're here to talk about something much more important - your future as a professional software developer. So, you won't be needing that programmer's editor for the moment. The pizza's probably still a good idea, though. Some traditions should never be changed.

Setting Priorities

If we're not going to talk about functions and objects and squiggly little lines of incomprehensible text, then what on earth are we here for? What could possibly be more important to a developer than the details of writing code? The answer is both obvious and elusive in the same breath. The most important thing to programmers everywhere is not writing code, but rather delivering quality software.

Did you just stop, shake your head and read that last sentence again? You're not alone. Almost universally, good programmers reflexively equate writing code with delivering software, as if they were one and the same thing. They are not. In fact, it is this very view that is largely responsible for release disasters worldwide.

If you don't know what a release disaster is, you've led a charmed life. Take two donuts out of petty cash and go back to what you were doing. The rest of us are all too familiar with the details of good releases gone bad, including arbitrary deadlines, endless overtime, high stress levels, short tempers and monitors flying out of fifth floor windows, all for a product that gets shipped long before it's ready due to market pressures. When your software hits the streets with more bugs than a cheap motel and less stable than a maintenance programmer who hasn't slept in a week, are the technical details of coding really the guilty party? Not likely. I can assure you, some of the worst software releases I've seen were the product of absolutely brilliant technical minds. Let me present that thought once more, for emphasis. Poor quality software releases are almost never due to a lack of technical skills.

So, if the project you're working on is greeted by the user community with those two immortal words dreaded by programmers everywhere ("it sucks!"), then who's the culprit if not the code? The programmers, of course. Hey, you didn't think you were going to get off the hook that easily, did you?

The Usual Suspects

I'm beginning to see some glazed eyes in the back of the room. If bad releases aren't caused by poor technical skills, then how can it be the fault of the programmers? Well, in fact, we're going to invoke a little pretzel logic here. Not the straight, matchstick sized ones that are also good for stirring your drink, but those twisty, winding type pretzels that take a lot of turns but always end up right back where they started. We'll start by listing rounding up all the usual suspects, but trust me, in the end it's all going to come home once more to rest right in our own laptop filled little laps. Pretzels are like that.

In fact, many of the veterans here have already made a list of the parties responsible for screwing up a perfectly good project, and have even made suggestions regarding exactly which wall they should be placed against when the revolution comes. Some of the more seasoned among you may have even suggested that the lawyers must wait their turn, or use another wall.

Who are these villains, these people powerful enough to override the capabilities of even the most brilliant coder? Marketing and management are certainly the first to come to mind, often known as Weasels and Suits when programmers are hanging out by the cappuccino machine late at night. When turned loose on an unsuspecting software development team, the results inevitably include vague and shifting requirements, arbitrary deadlines declared with no concept of the technical realities, scope creep, crisis driven management, complete lack of a professional testing department and in the end, software that was released long before it should have been.

It's Not My Job

What's that you say? I've just clearly proven that it's not your fault? Nice try. And pass me a pretzel, will you? Projects fail for an unbelievably simple reason. Extremely intelligent and otherwise talented programmers time and again make the naïve assumption that if it's not about the code, it's not their job. In modern air to air combat, a jet fighter pilot who finds himself close enough to his opponent to fight it out with machine guns has already missed critical opportunities to solve the problem from a safe distance with long range missiles. And so it is with programmers. If you find yourself in Overtime City with a guaranteed release disaster right around the corner, you screwed up long before then by failing to control your situation before it controlled you. Ouch. Can I say that? Well, maybe I should at least have offered you a pretzel first.

Your view of the software development process dictates what you do, and do not do, in the course of your work week. If you believe that everything beyond coding is "not my job", then you and your project will without question fall prey to the strong and illogical forces that sweep through the corporate world. However, the follies of marketing and management can both be minimized by the savvy programmer. For every bone headed thing that these rocket scientists can throw at us, there is a counter. Manage the problems early enough in the game, and your release disaster instead becomes a release party. They'll probably even spring for the pizza.

The Road Ahead

You don't have to have an MBA or be a sales weasel to effectively manage these problems. You just have to expand your view of the software development process to include anything that might effect your release, and do what's necessary to protect the code you've worked so hard to create. Granted, this isn't always as sexy as writing a flashy UI in the cool language of the day, but when it's 4 AM, you haven't slept in 3 days, and poor management decisions all but insure that tomorrow your product will ship in less than perfect shape, nothing's sexy.

It's time for programmers to regain control of the software development process. Learning sneaky and not so sneaky tricks to deal with all the non-coding issues that threaten our programs, our free time and our sanity is what we'll be doing in the months ahead. Step by step, issue by issue, we'll look into ways of seeing disaster before it strikes and taking preemptive steps. The end result will be more time doing what you really love - writing cool code that becomes the next Killer App. And isn't that really what you signed up for when you chose this profession?

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Christopher Duncan
Founder Practical Strategy Consulting
United States United States
Member
Along with being a professional geek, Christopher is a musician, director and author of The Career Programmer and Unite the Tribes.
 
His latest show is a comedy web series called Talking Head Games.
 
Any resemblance between his personal appearance and that of certain small, hairless canines is purely coincidental.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralStill making my day...memberAlberto Gattegno14 Oct '02 - 22:16 
Hi Chris,
 
Your book came at a bad time for me and showed me the way. I manage to make the workplace actually work and I have less people on my back when there is a crisis (and there is one once a week Big Grin | :-D )
 
This first installment just comes to prove that you are sooo right.
Can't wait for the rest
Cheers!
 
Alberto Gattegno
Software Engineer
http://www.itgil.com
GeneralRe: Still making my day...memberChristopher Duncan15 Oct '02 - 1:18 
Thanks, Alberto. So many people have helped me in this business - if I can give a little back, even in a small way, it's a good feeling. Smile | :)
 
Chistopher Duncan
Author - The Career Programmer: Guerilla Tactics for an Imperfect World (Apress)
Generalan interesting lesson about quittingmemberdavid ewan7 Oct '02 - 6:56 
I once worked for a large multi-national. My PM was really clever. He and I were interviewing for a key position on the team. I remember one candidate who had excellent credentials, and wanted to change jobs because the project he was on was in trouble. After the interview I said something like "..we've got to hire him" to which my PM laughed. He wouldn't touch him. He said the last person we want is someone who bails out when the going gets tough.
 
The lesson I learned is that after a certain level of competency PMs start looking for other skills you will bring to the team. To be able to say "...the project I worked on was in trouble, but I stuck around and solved it" counts.
GeneralRe: an interesting lesson about quittingmemberChristopher Duncan8 Oct '02 - 2:14 
That's an excellent, realistic story, and it touches on something that I emphasize a lot in the book - good coding skills will only take you so far. Beyond having the required core competencies, it really comes down to how well you can work with people. I find that to be much more complex and challenging than any source code I've ever seen.
 
I also like how your example points out the value of ethics. While it's true that Business is War, you can still fight with honor. I personally believe that will always serve you well in the long run.
 
Chistopher Duncan
Author - The Career Programmer: Guerilla Tactics for an Imperfect World (Apress)
GeneralOptimize your viewsussAnonymous22 Sep '02 - 11:36 
I be for eigener. I not over but real lee under stand urtical. Only I know not, what view and why, or why not.
I try CView but errors. I have collegue who say buttface, put CTreeView, water and grow it, and see wunder it compiled!
You thank!
 
developing developer
GeneralYou have been notedsitebuilderPaul Watson14 Sep '02 - 3:36 
Just wanted to say that a co-worker has printed out a full paragraph of your article and stuck it on his cubicle wall, right in front of him. Big Grin | :-D
 
He is quite a discerning chap, so what you said must have struck him as something worth remembering. He even has your name in bold underneath the quote. BTW it was the It's Not My Job section .
 
Paul Watson
Bluegrass
Cape Town, South Africa

GeneralRe: You have been notedmemberChristopher Duncan14 Sep '02 - 8:36 
You know, writing books and articles in this business isn't likely to make you a multi-gazillionaire. Don't get me wrong, I'm as enthusiastic about obtaining more (insert your local currency here) as the next guy, but that's not what really drives most writers and speakers. Having a chance to share what you've learned through your own mistakes so that you can help others is an extremely cool experience. At the end of the day, it's what makes it all worthwhile.
 
Consequently, I always enjoy hearing success stories of how people applied the tactics I write about in their own environments. Anyone who has such tales is always welcome to email me (Chris@ShowProgramming.com). I love it when the working guy wins. Big Grin | :-D
 
Chistopher Duncan
Author - The Career Programmer: Guerilla Tactics for an Imperfect World (Apress)
GeneralBrilliant ideamemberDylan Kenneally3 Sep '02 - 2:02 
This is a great intro to what looks like the start of a great series! Smile | :)
 
Looking forward to the rest of the series
 


Dylan Kenneally
London, UK
GeneralRe: Brilliant ideamemberChristopher Duncan3 Sep '02 - 2:32 
Thanks, man!
 
Chistopher Duncan
Author - The Career Programmer: Guerilla Tactics for an Imperfect World (Apress)
QuestionBetter strategy?memberGeorge2 Sep '02 - 22:37 
Great article, however there is a better strategy - quit when it's getting too annoying or cumbersome!
 
Managers are paid for managing the projects, developers are paid for developing it. If the manager is incompetent and heads on for release disaster then there is no place for me in that company.
 
Why would I want to play all those stupid games when I can just go to another place, and repeat the procedure as long as I find the place that is managed properly?
 
Everybody in the company has it's place and role. The role of developer is to develop, and manager to manage. There is no point to try to "outsmart management" - if they suck you should just quit. Simple and effective.
 
No sleep for days?! Overtime?! You got to be kidding me! The only way I will do any overtime is when they pay extra and cover my transport back home and my dinner. Otherwise - bye bye.
 
I have not the need to expand my view - it's not my job. Really. There are people that are paid to see the big picture and expand the view - they can come and ask if the deadlines are realistic and features are within reach. If they don't - they are responsible for failing the deadline. Turn the view around - why doesn't management get a C++ course and try to understand the development process? For the same reason I don't want to know about management - I am not interested in it.
 
It is sometimes happening that develoepr is blamed for the missed deadlines, but if you are in such a place you have one more reason to quit. Don't allow them to place the blame on you, if you smell trouble just leave the game.

AnswerRe: Better strategy?sitebuilderPaul Watson2 Sep '02 - 23:05 
George wrote:
when I can just go to another place, and repeat the procedure
 
As Michael Martin and many others have demonstrated finding new positions is not easy in this day and age. I know some pretty good developers who have had to really struggle to find new paying work.
 
So quiting is no solution if you have bills to pay, mouths to feed and a roof to keep.
 

George wrote:
I have not the need to expand my view - it's not my job
 
I guess it depends on how you view your job. Is it just a job, or is it a career? I think that is one of the main points Chris is trying to get across. If you want a successful career then a heads down, blinkered, "thats not my job" attitude will get you nowhere fast. If all you want is a flat job, then fine, repeat your "it's not my job" mantra.
 

George wrote:
if you smell trouble just leave the game.
 
Got to love quitters huh.
 
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
 
Simon Walton wrote:
"You come across a lot of people who call themselves realists, when they are actually pessimists attempting to look intelligent."

GeneralRe: Better strategy?memberMarc Clifton3 Sep '02 - 2:39 
No, no no. What you've got to do is make yourself so valuable, that you can threaten to leave and get the changes you want. That's worked for me several times, and you can be nice about it too. It helps to talk in terms of "this job isn't meeting my needs, but if we made these changes, I would be a lot happier, and the benefits to you would be x,y,z.".
 
Marc
GeneralRe: Better strategy?memberGeorge3 Sep '02 - 23:53 
Marc Clifton wrote:
No, no no. What you've got to do is make yourself so valuable
 
Yeah, at least one guy who understands!
GeneralRe: Better strategy?sitebuilderPaul Watson4 Sep '02 - 0:13 
Marc Clifton wrote:
No, no no. What you've got to do is make yourself so valuable, that you can threaten to leave and get the changes you want
 
I don't think any threat can ever be totally without bad consequence. Even if you layer ten inches of icing on your threat a boss will see it for what it is. Nobody likes having an employee holding a gun to their heads, no matter how logical the threat is. "benefits to you would be x,y,z" only works in a rational, logical and efficient environment, if you find one of those please tell me.
 
I totally agree with making yourself valuable. But if you come to me for work and then make yourself valuable just so that you can get your way... I will fire you. I don't want people like that working for me and I don't think many others do either. You should be making yourself valuable through honest, smart work for the right reasons. You shouldn't need to have even an implied threat hanging over my head to change things. Forced change does not work. In fact trying to force other peoples hands with threats (nice or otherwise) invariably ends up in bad blood.
 
I think the change methods Chris is talking about are far more effective.
 
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
 
Simon Walton wrote:
"You come across a lot of people who call themselves realists, when they are actually pessimists attempting to look intelligent."

GeneralRe: Better strategy?memberGeorge3 Sep '02 - 23:52 
Paul Watson wrote:
As Michael Martin and many others have demonstrated finding new positions is not easy in this day and age.
 
It isn't easy for me either being a foreigner and in the non-english speaking country. Language barrier cuts me off 70% of the local IT jobs market, in fact I can manage to work only for abroad companies that have a branches here because they use english.
 
Paul Watson wrote:
So quiting is no solution if you have bills to pay, mouths to feed and a roof to keep.
 
Quiting is never a solution, it's rather an unpleasant counter-measure. The best is not get in troubles in the first place, which you can do by carefully choosing your workplace. Quiting is better than sleepless nights and such thought, so if the things go awry it may be the only way. (Of course you have to find a new position before you quit).
 
Paul Watson wrote:
I guess it depends on how you view your job. Is it just a job, or is it a career?
 
I view my job a love, passion and life-style. I am taking it very seriously and that's why I prefer to work with (and work for) professional and serious people. I don't need to think for myself and for my manager - he is doing just fine. To write the code is complex enought and I want to be shielded from all the politics, users etc. I do my part of the job, they do theirs. Nobody here is working overtime, having no sleep for days etc. It's a team work, not a slavery. And yet it's possible the most dynamic place I worked so far, huge amount of code is getting written, tested and rolled to the production each day. Yeah, finding the right place is important. And it's much better than trying to "accomodate" harsh environment...
 
Paul Watson wrote:
Got to love quitters huh.
 
Having said all that, I didn't use the "quit" option all that often actually, but I would (and I did in the past) should the need arise.

GeneralRe: Better strategy?memberChristopher Duncan4 Sep '02 - 1:43 
George wrote:
Nobody here is working overtime, having no sleep for days etc. It's a team work, not a slavery. And yet it's possible the most dynamic place I worked so far, huge amount of code is getting written, tested and rolled to the production each day.
 
It's worth mentioning that everything I teach, including the book, columns, seminars and water cooler discussions, is geared exclusively towards people who work in a less than perfect world. And while both personal experience and interaction with developers worldwide shows me that this is the overwhelming majority of cases, there really are some shops out there doing it right. It sounds like George works in just such a shop.
 
While I'd love to say that I have all answers for all people (always fun for the ego, you know Smile | :) ), the honest truth of the matter is that if you work in a shop that really has its act together, you really don't need the perspective and tactics that I offer. To those of you who do work in those rare shops that are a fine tuned machine, all I can say is rock on, man!
 
For the rest of us who must deal with the chaotic, illogical and political nature of the typical development environment, hopefully there will be an idea or two I can pass along as time goes by that you can add to your own unique bag of tricks. From where I sit, every little bit helps. You can never have too much firepower.
 
Chistopher Duncan
Author - The Career Programmer: Guerilla Tactics for an Imperfect World (Apress)
AnswerRe: Better strategy?memberjhwurmbach3 Sep '02 - 2:10 
George wrote:
Great article, however there is a better strategy - quit when it's getting too annoying or cumbersome!
 
Too bad that everywhere you look there is already a crowd of underpaid embryos doing the coding.
 
George wrote:
I have not the need to expand my view - it's not my job.
 
Oh well - you have decided to be not a developer but a coder. You cast the algorithms you are told to do into the syntax of the language you are told to use and are content with it.
Great. You are sort of the plumber of the software industry. You are just putting tubes together.
But for me it is the job of a developer to get the meaning of all the stuff the customers demand, put it into the form of requirements, check the availability of new algorithms for each requirement, estimate how long each will take and let management decide which goes first and which last.
 
Thereby I enable my management do make plans that have any meaning - not just bars printed on oversized paper.

GeneralRe: Better strategy?memberGeorge4 Sep '02 - 0:09 
jhwurmbach wrote:
Too bad that everywhere you look there is already a crowd of underpaid embryos doing the coding.
 
Which is why you have to stand out of the crowd.
 
jhwurmbach wrote:
Oh well - you have decided to be not a developer but a coder. (snip a lot of crap here)
 
You assume too much, and you are totally incorrect.
AnswerRe: Better strategy?memberChristopher Duncan3 Sep '02 - 2:24 
Paul and jhwurmbach raise some valid points that I think speak well to the fact that many people get a gig and stay there, not to mention the fact that the market is much tighter than it used to be. In such a scenario, even though you're technically correct that it's not your job, it's the developer who ultimately pays the price for failure to deal with these issues. That ain't fair, but it's the way it is. That's the reason I work hard on my non-coding skills - 100% self defense.
 
Nonetheless, I must say that to a degree I agree with you. I've been a mercenary for many years now, and it's nice not having to worry about the politics of a career path within a given company. However, once I take a gig, I'm honor bound to do my best to help the client accomplish their goals - even when they're trying their level best to shoot themselves in the foot.
 
So, I employ all the tricks I know (and try to learn some new ones) to try and diffuse the impact of poor management by taking responsibility as a programmer and making change where I can. The way I see it, when they hire me, my real job is to give them the ultimate results they're aiming for. Sometimes that requires me to go beyond coding.
 
That being said, if the company is on a dedicated quest for self destruction and nothing can be done to help prevent it, I always have the option of the mercenary to abandon a doomed ship and move on to the next gig. If you sign up as a merc, and you've truly done all you can do to help the project succeed, I see no dishonor in this. Even so, perhaps just due to sheer good fortune on my part, I haven't had to exercise this option in the past 12 years. But then, I always have been a reasonably lucky guy... Big Grin | :-D
 
Chistopher Duncan
Author - The Career Programmer: Guerilla Tactics for an Imperfect World (Apress)
GeneralRe: Better strategy?sitebuilderPaul Watson3 Sep '02 - 22:50 
Christopher Duncan wrote:
But then, I always have been a reasonably lucky guy
 
And the harder you work the luckier you get, strange that huh? Wink | ;)
 

Christopher Duncan wrote:
I'm honor bound to do my best to help the client accomplish their goals
 
Awfully fun when the clients goals are misguided and they won't listen to reason. For awhile I tried to drum into our salesmens heads that we are the experts which is why the client hired us and so they should listen to our expert advice. I thought I could head off misguided clients at the begining of the pass with clear, logical and proven advice, boy was I wrong. Now I do my best to steer them once they have entered the pass and this works better than the former, no matter how illogical it seems.
 
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
 
Simon Walton wrote:
"You come across a lot of people who call themselves realists, when they are actually pessimists attempting to look intelligent."

GeneralRe: Better strategy?memberChristopher Duncan4 Sep '02 - 1:31 
Paul Watson wrote:
And the harder you work the luckier you get, strange that huh?
 
Ain't it, though? Smile | :) It's amazing how often conscious creation shows up to the party wearing the costume of coincidence.
 
Paul Watson wrote:
I thought I could head off misguided clients at the begining of the pass with clear, logical and proven advice, boy was I wrong. Now I do my best to steer them once they have entered the pass and this works better than the former, no matter how illogical it seems.
 
Actually, your logic is impeccable. I've spent the better part of my adult life teaching one thing or another, and I can state with confidence that at the end of the day, you can't take people anywhere that they don't want to go. Until someone is open to the learning experience, your wisdom will never reach their ears. Once they've entered the pass, however, you have something to work with. After seeing a boulder fall on their head, you can comment with genuine sympathy, "Ooh, that's gotta hurt. By the way, I know a shortcut where there's no boulders. Interested?" Suddenly, as they're rubbing their heads, you have their attention. Go figure. Smile | :)

 
Chistopher Duncan
Author - The Career Programmer: Guerilla Tactics for an Imperfect World (Apress)
GeneralRe: Better strategy?memberbrianwelsch19 Sep '02 - 3:17 
Christopher Duncan wrote:
you can't take people anywhere that they don't want to go
 
Part of the trick to guiding them is understanding where it is they want to go. It may not even be where they initially tell you they want to go.
 
Customer says: I'd need to go to Cuba.
Customer means: I've heard beautiful things about the Carribbean, and would like to relax on the beach.
 
BW
{insert witty/thought-provoking saying here}
GeneralEntertaining writing style...memberShog92 Sep '02 - 19:25 
...a good intro column. Looking forward to the next one... Smile | :)
 

Shog9
Let me hear you / Make decisions / Without your television
Join Team CodeProject

GeneralRe: Entertaining writing style...memberChristopher Duncan3 Sep '02 - 2:09 
Thanks, man!
 
Chistopher Duncan
Author - The Career Programmer: Guerilla Tactics for an Imperfect World (Apress)
GeneralNothing original herememberMarc Clifton2 Sep '02 - 14:26 
Read "Death March" by Edward Yourdon, cut the verbose and bad analogies, and come up with some original thoughts, pertinent to the paradigms programmers are dealing with today: .Net, web design, contract work, changes in economic models, keeping up with technologies, to name a few.
 
Looking forward to the next installment...
 
Marc

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 2 Sep 2002
Article Copyright 2002 by Christopher Duncan
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid