Fog Creek Software
Discussion Board

Client's bad coding practices, Pt. 1

I am seeking advice on how to proceed with a client company that (among many other things) generally writes and produces the Godawfulest code I've ever seen in my life.

The client is a SW company that produces a shrinkwrapped business application. The average technical skill level in the company (including the owner) is quite low. Since the roots of the company are not IT, the owner is self taught and controls his people with an iron fist. It's the usual "we absolutely have to suck ass because we're vertical market and none of us are rocket scientists" scene. Most programming and technology practices in this place are on the order of "cargo cult". For instance, while they support a >>10K user base, they have an email system that doesn't support direct email through their domain to an individual. A customer must email the company "at large". And it's quite comical seeing their virus paranoia and work arounds for simple shit like emailing file attachments. And so forth.

Some of these things are beside the point, but I'm simply stressing that the place is a citadel of profound cluelessness. 

So OK. What I need are rhetorical arguments against the following horrid practices I encounter every day with these people:

- Disproportionately "large" code: the owner feels that he has failed if every application he releases isn't designed around a "platform" of his invention. In this joint you can't just WRITE an app, you must kowtow to the owner's pet "standard library" that usually crashes, doesn't work right, is semi-documented, and is never quite done. (IE: the language is Delphi but the owner finds it compelling to reinvent the screen and form metaphor of Delphi with his own crap.)

- Closely duplicated functionality in different parts of the application. Several times I have made changes to code that was linked and compiled into the project but was simply a "doppleganger" for almost the exact same code elsewhere in the project that actually affected the behavior I wanted to fix. So my time was wasted. (IE, they really need to consolidate a lot of code, much of it legacy stuff shoveled into new projects.)

- Dead code and code used only at "design time". Let me explain. The owner's grandiose self invented tools mania extends to pieces of the actual running application that can be run in a "design" mode. So a "form designer" is part of every redistributed application. The customer gets the form designer embedded in the program they receive, but the form designer is disabled.

There is a LOT more (that's why this is Part 1) but these three major characteristics are the most abysmal evidence of this place's problems.  If this guy wrote "Hello World" it would need a CD for distribution. :-(

EVERY time I talk to the owner about his practices, he handwaves each of these issues with carefully crafted rationales that prove that he is always, inutterably, right at all times.

By the way #1: I ported this place's product to Windows in the late 90s. So whatever I know about technology is basically a large superset of what they know. No, not an ego trip. They don't read magazines or books and "get" anything new, and they are about 3-5 years behind the current technology in general.

By the way #2: their millennial/"owner-proves-he- is-biggest-code-genius of-all-time product" has been delayed for at least 2 years now while the owner masturbates the code in solitude; because after all, NOBODY can be trusted to follow his genius schemes.

Has anyone ever salvaged a client or employer organization this bad? Or is it better simply to accept the downtime and find decent new clients?

I can provide even more detail, but I think I've already spewed too much.

Thanks. Sorry for the ramble.

Ever suffering dolt
Monday, February 2, 2004

Sounds like a market that's ripe...  What is it?  <g>

Monday, February 2, 2004

Sounds like a couple of companies I know :-).

Other than frustration, what is compelling you to have them change?

Simon Lucy
Monday, February 2, 2004

This sounds like standard operations for most IT companies. Especially smallish vertical market type companies where the software was written by the founder who was a lawyer/doctor/vet/dentist etc in a past life.

Monday, February 2, 2004

Well, they're already using Delphi, so that can't be the problem. I think they need to use Extreme Programming. That should clear up their problems within a month or two.

mr. dolt
Monday, February 2, 2004

Give up?

I mean, really, if the owner's got his head shoved that far up his bum, I'm not sure what you are going to be able to do about him.  He's not going to be listening to a rational, logical argument about why he needs to do something differently.

The only technique that works is to pair him off with somebody who's even more obnoxious and brain damaged for a few months.  I used to be far more obnoxious about things, but that fixed me for good.

Flamebait Sr.
Monday, February 2, 2004

Oh yeah, and it often softens the psychological blow for you if you document how idiotic said person is.  Instead of a deathmarch, it becomes a cute little game.

Flamebait Sr.
Monday, February 2, 2004

What's the point of posting these types of queries here? If there's a problem, deal with it. How do we know the true situation?

For all we know, the "dumb-ass owner" could be the guy complaining, on another thread, about smart-arse staff trying to take over his business.

Next please
Monday, February 2, 2004

1. Relax.  The natural first reaction most coders have when reading another's code is to criticise it in the strongest of terms.  Remember that "different" does not always mean "horrid" or even "wrong". 

2. If, after relaxation, you find yourself still panicking, find yourself another client more easier for you to work with.

Monday, February 2, 2004

If you were an employee of said company, I'd say you could just submit bug reports against the codebase until they were effectively immobilized trying to fix all of them.

However, they're a client of yours.  And guess what?  Clients can be fired,  just like consultants can.  You can either charge them a high-stress premium (or up your rates overall, but don't raise theirs and tell them you're raising everyone's; odds are good that they'd find out), or simply tell them that you can't stand the migraines from working with their fubared app any longer.  If anyone asks, cite "artistic differences" (hey, it works for bands!).

You've already tried talking to the owner.  There's not much point in simply complaining about it here.  Either change something, or suck it up.  (=

Sam Livingston-Gray
Monday, February 2, 2004

Name the company so the rest of us can make an informed choice.

Monday, February 2, 2004


Facts and Fallacies of Software Engineering.

This is one of the most clear, concise and down to earth book I've ever found on the subject.

I have a boss like you and after loaning him this book he has (slowly) started to change his thinking.

Monday, February 2, 2004

DanH, you are assuming that the client is thinking rationally there.

It's very likley that he isn't. :/

Flamebait Sr.
Monday, February 2, 2004

When you bring issues up with the owner, what do you say ?

If it's "this code is an insult to my sensibilities as a master programmer" then as a business owner, he just isn't going to care. If you can make a business case as to how fixing the architecture problems will save money or make money, he will be all ears.

This goes along with Joel's "when do you fix a bug"  rationale.

Monday, February 2, 2004

I hope this doesn't come across as me trying to belittle your situation, because if I said this to you face-to-face it'd be with a smile and clap on the back for support.

Be glad there isn't an AS/400 involved.

Andrew Burton
Monday, February 2, 2004

The owner started the company and has a 10k user base. He's doing something right. Why don't you stop whining and try to learn from him. If you're so good shouldn't this owner work for you?

Tom Vu
Monday, February 2, 2004

Do you work there, or have been asked to help out, the owner is a friend…?

Aussie Chick
Monday, February 2, 2004

" citadel of profound cluelessness" - great phrase. Precisely describe my last job. IMHO there is no possibility that the place will change; live with it or move on...

Monday, February 2, 2004

"The owner started the company and has a 10k user base. He's doing something right."

That is, of course, assuming that the competition doesn't have the other 100k user base that this guy could have if his software was reliable and useful (and thus more attractive to customers.)

Alternatively, that 10k user base could mean there's 10 companies with 1000 people each and that'll disappear overnight once someone works out a way to enter the market. Some companies survive by being a fraction less incompetent than their competition, and relying on the old vendor-lockin gag to hold on to customers. Tragically, however, most customers will eventually decide that jumping ship beats another painful round of "upgrades" that eliminate required functionality and add more things that some geek thought was cool.

i.e. he might well have done many things right, but still need to do many things significantly better if he wants to retain his business.

Or, perhaps, a desire to produce high quality work may really be in the worst interests of business, and people should just stop caring. Yeah, that'll be a good plan.

The Real Blank
Monday, February 2, 2004

Allow me to address a few points raised here.

First of all, I am open to suggestions on any way of explaining to a non technical layman (who "believes" that he can develop) that:

- Unnecessarily large and complex code is almost always a bad idea.
- Dead code and large segments of disabled code that is welded into a redistributed product is a bad idea.
- Cookie cutter, mindlessly duplicated code is a bad idea.

Also, this guy presents the rationalization constantly that the badness is all captured in one section of the project, the "standard library" portion that in his pet theory "should never be touched once it's done". In other words, no matter how bad the going gets, his answer is that "once this is done it's done".

In reality *nothing* this guy has ever developed is ever "done" or stabilized.

So I would like some response to the admonition that the workmanship of "library" code has limited impact because it's only in one place, is not maintained by more than a couple of people, etc. I think the exact opposition - sloppy, overengineered library code will compromise the quality of  the entire application.

As to the comments that I should pay attention to his techniques because he has the loot, etc:

This company specialized in its early days in being a sweatshop. One of the "key" employees (who has practically worked himself to death there) routinely pulled 60+ hours per week, for months on end, back in the 90's. Only due to this guy's health  problems has the owner backed off and stopped demanding that the rest of his employees spend most of their weekends at work.

When I first made contact with them years ago I was responding out of curiosity because the job ad in the paper said "wanted: extremely hard worker wanted". This was a clear indication to me of a company that busts their asses and worked stupidly for "nothing", and that odds were I could do better. Which I did.

Also, the simpler earlier versions of the company's products - which suffer from the same bad overengineering as the current mess, but not to the same order of magnitude - are what currently carry the company. The owner has *never* succeeded in getting anything off the ground, even relatively straightforward projects, without major overtime by scared employees.

Lastly, I do not want to say what the nature of the product is. But suffice it to say that it's in a commodity category, and it amazes me no end that they have hung on as long as they have with the techniques they use in place. 

Ever suffering dolt
Monday, February 2, 2004

Do you have a non-compete agreement ?

Monday, February 2, 2004

Seriously though, I have seen the "once it's done it's done" mentality.

The only way to work around that explain the benefits of refactoring so that future releases can be produced faster and new features can be introduced.
Either that or create an app to pump out the cookie cutter code, giving you time to fork the app and build a proof of concept to show him it can be done faster and better.

Monday, February 2, 2004

I'll third the comments that this sounds like a very normal situation and also that if you are uncomfortable with it you should just start raising your rates unitl you are *happy* to play along.

Dennis Atkins
Tuesday, February 3, 2004

You are not going to change this guy.  This is not about you being right, or even you being really, really right.  This is about who gets to tell who the way it's gonna be, and he is never ever going to let you be the one doing the telling.

You should be focused on what you can do, if anything, to make your relationship with him more palatable, without pretending to yourself that the fundamentals will ever change  Charge him more money, or find new clients, or (does he pay on time?) just suck it up.

Matt Conrad
Tuesday, February 3, 2004

A few things worry me from your initial post

1. Assume everything you say is correct.  One paragraph jumped out:

> EVERY time I talk to the owner about his practices, he handwaves each of these issues with carefully crafted rationales that prove that he is always, inutterably, right at all times.

What are the rationales?  Are you sure they are not relevant to his business?

I don't know, as you don't give specifics, but perhaps some of the things you don't like might be there for a specific BUSINESS reasons. 

For example, and this is just a possible example, the "platform" might be because he needs somehting for resellers/VARs to work on, or because of some future plans, or because...

2. Are you sure that you are justifying your proposals form changes in business terms rather than purely engineering terms?

3. There seem to be several points in your unhappiness. This library thing, the design of the code, duplication etc.

I think you need to address these separately, at least in terms of the discussion with the owner.

For example, if there is a good reason for the platform thing (for example) but no good reason for duplication (for example),  you want to win the argument you can win rather than bury it in an argument you can't.  Actually this applies even if all your points are equally strong.

4. Diplomacy.

I don't know, but I expect he and probably others there are proud of what they have done.

Regardless of any engineering faults, they have achieved something.

I don't expect they take kindly to being told, this is all rubbish.  I also don't expect they would like any plan which suggests (or which they interpret to suggest),  - you must throw it away and start over.

Maybe you should explain "this is how to make things EVEN better", present specific plans with specific steps, milestones and with business justification, and go from there.

S. Tanna
Tuesday, February 3, 2004

Well, I'm not sure why people assume that if you don't like a situation, more money is magically going to make you happier. It might make you more likely to slug it out even though you think it sucks, but it's unlikely to make you happy.

That said, I think the problem is probably just that all software sucks. What you describe is pretty typical. The fact that it's got so many users is most likely a sad reflection on the fact that the competing products are just as bad, if not worse.

I know it's not much consulation, but thems the breaks. Most software success stores are inspite of its quality, not because of it. ;)

Sum Dum Gai
Tuesday, February 3, 2004

Bottom line: Can you afford getting rid of this customer? If yes, just tell them that it's going to cost them 10x next year, and they'll probably leave you alone :-)

Tuesday, February 3, 2004

If this guy has 10k customers he is doing something right.  I have to admit it gets me pretty irked when someone new comes into a company and all they do is complain about x or y.  Maybe he has some problems, but maybe the were also worried about getting up and running as a priority.  Not everything can be perfect at first. 

christopher baus (
Tuesday, February 3, 2004

"If this guy has 10k customers he is doing something right"

Only if he is making a profit on those 10k.

Just me (Sir to you)
Tuesday, February 3, 2004

You must realize that you and your boss may care about DIFFERENT things. However, you may be able to find common ground.

These are serious questions (really.):

Why do you care?
  Is it the agravation of knowing that it could be better (more efficient, company more successful) ?

What's in it for HIM if he follows your advice? 
(He makes more money, works less, etc.)

Is there something COMMON between these two answers?

If you can find something that you BOTH care about, then you've got a common goal.  THEN the issue is merely negotiating how you'll go about reaching this common goal.

It *sounds* like you care about the code and he cares about the company.  Those are not necessarily common goals, but there may be *overlap* between them.

There is lots of great software out produced by failing companies.  Conversely, there are lots of crappy, but profitable products. (Golmine SUCKS, but it was the best alternative I could find, even looking at programs that cost 100x as much).

Would he, perhaps, like to LOWER SUPPORT COSTS?

If you can show that x hours of programming can save Y hours of support costs, and he cares about those costs, then that's a compelling argument.

"When the student is ready,
the master will appear"
-Zen proverb

Meaning: you cant' teach anyone unless they want to learn.

The real Entrepreneur
Tuesday, February 3, 2004

You guys who are preaching "the customer is always right" and "he knows something because he has XXXX customers" are missing several important points.

The guy is running on stored energy. I have seen his business. It is basically the owner, plus a bunch of people underutilized/mismatched as servile coding assistants to him. And his "mule" whom he flogged into working major overtime for several years is about broken down.

His development platform is running out of steam. His current product is dated and badly needs enhancement, yet he has royally bungled the move he's tried to a newer architecture that is more competitive. He's worked on this gold plated turd for the last 2-3 years and still has nothing to show for it.

The owner continually babbles about "providing value to the customer" as he contradicts himself and spins ever more abstract castles in the air. He is trying to be l33t, object oriented, methodological, high level, without adding $0.0001 of value that a real customer can see, feel and work with.

The owner always, continually overshoots the skill level of his internal people, while grousing that he can't get anyone there to understand what he is trying to do.

The owner finds all kinds of creative dodges to avoid eating his own dog food. His standard practice is to write "great, will work, abstract, jewel like" code and then hand it to an underling to be debugged. The owner doesn't feel that inordinate debugging effort is evidence of a bad design. He thinks things just have to be that way.

Bottom line: this company did OK in a simpler era and when he had almost limitless supplies of cheap labor to help him overcome his wasteful ways, and he only attempted simpler products. Now that his people are older and burnt out, he is grossly overreaching his own skill level in conceptualizing and managing a development process.

I CAN **HELP** HIM to reduce the development cycle; provide a platform that his internal people could understand and work with; reduce maintenance costs. But he doesn't hear anything I have to say that would help him. 

He just wants grunt labor out of me even though I helped him move from DOS to Windows and established that I know "at least" as much about SW as he does.

I have tried doing things his way and living in his code for a few months. I honestly think it's a pile of stinking absolute shit and will never, ever work right. I predict he will never finish.

It's not a taste issue, it's a matter of something invented to solve a challenging problem that itself is easily 10x as complex as it really needs to be.

>> Meaning: you cant' teach anyone unless they want to learn.


Ever suffering dolt
Tuesday, February 3, 2004

Ummm, yes but why does it bother you so?

Simon Lucy
Tuesday, February 3, 2004

After your characterization of this guy as an awfull serial workforce abuser that thinks his farts smells of roses, what I fail to see is why after all these years when finally the grinders of commoditization are about to roll over his stale turd, you feel the need to go and save his shiny ass just for the love of it?

Just me (Sir to you)
Tuesday, February 3, 2004

You can't MAKE someone WANT about ANYTHING.


1. Find out what he WANTS.

2. Come up with a way to MEASURE how well the company is giving him what he WANTS.

(E.g., profit is an easy to measure metric. So are costs.  But you may need to break it down into digestible bites (see #3 below).  Another metric might be support calls about problem XYZ, or support calls in general.

3.  Suggest a very small change that will get him more of what HE WANTS.  Pick the low hanging fruit here.  Find ANYTHING that will give him CONFIDENCE that you can get him what HE WANTS.

So, either your solution will get him something HE WANTS, in which case you just need to communicate that to him, OR
your solution does NOT get him something he wants, in which case resistance is futile.

Either he wants his company to be successful and you can communicate how YOUR solution will help bring about that success, or he doesn't really care about the success of his business.

He may NOT care about success. I've know MANY small business owners who are more attached to the fact that it's THEIRS than to it being a success.  It's ALWAYS a balance.

So, again I ask:

What does HE care about?
TALK to him and find out:
Having fun at work?
Making money?
Pleasing customers?
Pleasing LOTS of customers?

"The customer is always right, for one simple reason:
S/HE has the money. If you WANT the money, you need to give him a reason to give YOU the money."

The real Entrepreneur
Tuesday, February 3, 2004

The emphasis in your posts seems to be on all the stuff that is wrong.  In your view, him, his code, his skills, his company, his architecture etc. all suck.

Now you may be right, there might well be stuff "wrong", his stuff might suck, and this guy might even be a dork.

You seem to want validation that this guy is indeed a dork.  Well, as far as I can see, it's barely relevant -- assuming you really want to advance this project, rather just getting guy equals dork validation:

1. The fact is most software in production use has lots of faults from an engineering perspective.  It's easy to look at almost any project and pick holes in it.  But it serves no purpose (and probably won't be well received either), unless you have specific proposals to make things better, and are able to explain your proposals and plan.

2. The question which I (and I think others) were trying to raise when talking his the customer's point of view, his business, etc. Is not what is wrong - But what you help him do better? And are they things that he could appreciate? What are the steps in the plan?

S. Tanna
Tuesday, February 3, 2004

Well said S. Tanna !!

The real Entrepreneur
Tuesday, February 3, 2004

Some sharp points here, Sir, Entrepreneur, et al.

I'd have to agree; if you work with/for someone like this, and it actually appears they may get what they deserve, why fight it?

I had to leave a company when I realized I cared more about The Company and The Project and The Mission than the owner did.  It's the same as any relationship.  You're being used and you know it.  If your situation's anything like mine, the company owner might very well be willing to destroy his business, rather than let someone else save it.

Leave, find someplace where you can have a win-win /purely business/ relationship.

And if you have to have a passion for something, don't get caught up in what other people want, believe in what /you/ want.  Knowing what you're doing your way and what you're doing /anyway/ makes it much easier to keep the emotion out of your day job.

Tuesday, February 3, 2004

Reminds me of something that happened a former job:

My boss (consultant) got a lot of phone calls,always interrupting him. The secretaries would work hard to track him down so he wouldn't miss the call. But he HATED it when they did that.

THEY thought they were being helpful.  He found it irritating. I wondered "why are you fighting him so hard on this. What would happen if you just did as he asked?"

Sure.. client's might get irritated... at the consultant, not the secretary. That' fine, because it was HIS decision.

It's your boss's company. He makes the decisions and reaps the reward or punishment. Sure, the workers will be affected to. But the company wouldn't be there if not for the guy who started it. It's his ball, to do which whatever he likes, stupid or otherwise.

The real Entrepreneur
Tuesday, February 3, 2004

*  Recent Topics

*  Fog Creek Home