Shipping Isn't Enough

Part of Chuck Jazdzewski's fatherly advice to new programmers is this nugget:


This is a companion discussion topic for the original blog entry at: http://www.codinghorror.com/blog/2007/01/shipping-isnt-enough.html

Same thing happened to me, except I didn’t leave (ok, I admit - paycheck was too good to pass up)… I almost went nuts trying to invent things to do. Doing nothing is MAJORLY overrated… Finally I broke free and although getting back in the world of deadlines and things that were supposed to work yesterday wasn’t easy - I’m back where I belong - writing things that actually get used somewhere and where I get yelled at if they don’t work…

Funny, I just jumped projects for this very reason. Well, that and I thought the end result of no one using our product was the Miltonization of the project. I didn’t want to wait around until the “glitch” was fixed.

Sounds like yet more people who have had experiences straight out of Cube Farm. I’ve always wondered why this seems to be the norm instead of the exception.

You’d think that, even with all of the political in-fighting, at least something useful would get done, but somehow it just doesn’t seem to happen…

its been a good 3 years since ive made something usefull. When I try and code something, I scrap it because 1. There is already a program out there that does the exact same thing or 2. No one will ever use it. Like everyone else mentioned, it seems you get more responses when you develop something for a small company; and it feels great.

you’ll find people working on stuff that isn’t going to ship.
Or that if it does ship, it won’t be noticed, or won’t move
the needle. That’s tragic.

agreed.

I see a compelling argument hidden in there for open source… if the work you have done is in a proprietary code base, it dies with the company that owns the copyright. with open source it can live on… fork… be used in many ways by many folks and can be adapted infinitely.

Perhaps this isn’t possible in most situations… perhaps it would be used less or fail… but it is certainly something I would consider if using the metric “stuff that people would actually use”.

great post.

Seems like you are pushing the idea that the value of software is in direct proportion to how many people use it. This is a very narrow definition.

Many people eat at Denny’s, drink Coors Lite, eat McDonalds, etc. In that sense you have appealed to the masses and/or have shaped them by there not being any alternative (I will drive 5 miles to find a good micro-brew rather than drink Coors Lite). But these products are hardly the ‘best’.

Some people want to write the best software in terms of size, speed, elegance, etc. Does that mean it will be used by many? No, and that’s where marketing comes in. For the most part is a developer’s ego stroked when they write a ‘hit’ they everyone uses? Sure. But that should not be the only criterion, and it’s far from the ‘ultimate metric’. That’s rather shallow.

Seems like you are pushing the idea that the value of software is in direct proportion to how many people use it. This is a very narrow definition.

All art is pop art. No matter how beautiful something you make might be, if no one ever sees it or wants it, does it really exist?

Interesting post, I guess on the other extreme you’ve got “Shut Up and Ship”, where you might spend so long adding cool features that, individually, people will love, but they combine into some sort of monogoloid hybrid of every geeks wet dream application.

Shut up and Ship…
http://destraynor.com/serendipity/index.php?/archives/122-Ship-or-Shut-Up.html

I would propose a slight modification to the statement, “their job is to build software that people will actually use” and add this:

“their job is to build software that people will actually want to use.”

Our entire company uses Lotus Notes as its e-mail client and I have yet to meet a single person outside of IT that wants to continue using it.

On the other hand, we get daily requests from new prospects for our products who were recommended to us by other customers. Now, that’s a great feeling!

Steve, great point. I’ll accept that change.

Also, for the other Steve: I’d argue that the vast majority of software that’s written is either never used, or used only grudgingly by people who are required to use it. Size of the audience isn’t really the point here; I’d rather have 10 happy users than 1,000 users, 900 of which are unhappy.

I am constantly looking at my code these days and asking myself, before I write new stuff, “If I write this, is it actually going to be used?”

I have this knee-jerk tendency to want to write a function or a class that takes into account every possible need that I might have in the future. It takes a lot of discipline and self-control to make sure that I only write code that will actually be used by the product and its users, not what I think might be used, or what might be useful to the end-users. I have to work really hard to restrain myself and wait until they ask for it before I provide it.

In short, yes, code and software in general should focus on what th users will use, not what I think they might use. The vast majority of what I think they’ll use ends up never getting hit by the code profiler.

In another vein, as Corey pointed out, there’s a compelling argument here for open-source code. I was wondering again, just today, if there wasn’t some sort of site out there where developers could submit source and algorithms to the general public, so that developers could then go there and search for existing code that solved their problem. It would be nice if I could go to a centralized source code repository on the Web, and search it for something like “quicksort c#” and have it produce a list of available code submissions that various authors had submitted, and download them, so I didn’t have to rewrite it. A facility like this would go a long way to helping us to avoid reinventing the wheel, especially if it provided tools to foster collaboration. Something with user-based ratings, critiques, etc.

Just a thought.

FYI Mike, Slashdot discusses “building a programmers rosetta stone” here:
http://developers.slashdot.org/article.pl?sid=07/01/21/1410208

Often when I am checking with my users, I find they would have worked out their own shortcuts and neat little tricks on my software. These could be some thing I designed or a surprising new use for different functionality. This is one of the best parts of my job.

Since I have a Commerce degree, creating a product that people will use is paramount. My two partners and I always have this conversation:

“Someone asked for feature X”

“Are they going to pay for it?”

“No.”

“Tell them if they want, they have to pay for it.”

“What if they don’t want to pay for it?”

“Then find someone else that’s interested and will pay for it. Then get the original company to also pay for it.”

It’s interesting. Our application is so client-focused, it’s almost ridiculous. Such is the poor state of IT apps that our clients are actually surprised, no, shocked, that when they ask for something, we put it in. Apparently such treatment is non-existent when dealing with most IT companies. And we don’t even whine about it.

Now maybe if that raging egomaniac Joel Spolsky would listen to his customers and allow deletion of case relations in the most overrated product in the world - FogBugz, I would also believe that maybe there’s someone else in the world that works like we do.

I agree that if you’re being paid exclusively to produce something that people will want to buy, then you should be a responsible employee.

However, I disagree with the implication that it is always a waste of time to write code unless other people will (want to) use it. To my mind, there is nothing wrong with putting effort into something purely for one’s own satisfaction, whether it is a chunk of code, a hunk of prose, a math puzzle, or a painting. Fiddling around with anything for intellectual amusement makes one’s mind sharper, or more relaxed, and there are always new things to be learned by playing.

There is also a lot to be said for working on something that has no immediate market or application, because so often, it turns out that someone will indeed find a way to put it to use. Think of Faraday’s (perhaps apocryphal) response to the government official who asked him, “Of what use is this electricity?” Faraday answered, “I do not know, but I suspect that one day you will tax it.”

To that end, I am always happy to see companies that pay people to do undirected research, and I wish that both the private and public sectors would spend more money in this fashion. It seems to me that we are lately obsessed with immediate applications for everything, and I worry that we are coming up with only incremental improvements, and overlooking the next big thing.

Plus, it’s okay just to have fun, as long as it’s not on someone else’s dime.

I feel that as long as somebody uses the app then the programmer is fufilled even if it is only one person.

Some of my best software is used by (a) me only or (b) one or two people. I don’t feel unfulfilled because I don’t release it into the wild. More often than not, I can take a class or a module from these and use it in something else that’s actually going out to all our clients.

This highlights the difference between “programmer” and “developer”. To write code is to program, but to take some requirements, design a solution, make decisions on what is useful/will be actually used and weigh against what you’d like to do if you have the time - that’s Software Development.

Personally, I enjoy working for a company who is also my customer. It means that I only get asked to do things that will be used. I try to make a good job of it, so it looks nice and is easy to use, but ultimately I’ll get direct feedback from the people I already know will be using it in anger. It’s a good feeling.

I guess I am fortunate that I develop for both internal and external customers. At the company I’m at, I’m pretty much the sole developer and all the software I write gets used–I don’t have time to write anything that won’t get used. That’s another important question I get to ask myself when I set out to write the software. “Do I have time write this if it doesn’t fit into the schedule, or am I just goldplating the system?”

I’ll have to check out Google Code Search, and the rosetta stone idea. They both sound promising.