Work for yourself
Oct 17th, 2008 by JoeC
I just got through watching this video of Jason Fried that was recorded earlier this week in Boston. It’s the long-form, illustrated-with-slides version of the extemporaneous talk he did for RI Nexus this past Wednesday in Providence. I highly recommend this to anyone involved in software development.
Listening to his list of specific dos and don’ts in more detail just now made me realize that there’s one overarching philosophical tenet that guides all the details and that is the following.
Run your business and build your product for yourself, not for investors or shareholders or analysts or “big” customers. Run your business to sustain your own life-style and your own integrity. Build things you believe in, not what some purchasing manager put in an RFP.
Investors want you to grow without bounds. That makes you put in crap you don’t want. Salesmen want you to put in a useless feature so they can get a big sale. Big customers want you to put in things only they want. While some of these forces may have some benefits, in the long run, they only push you to do things that dilute or muddy up the product with noise. Truly great products are simple, coherent, easy to understand and perform quickly and reliably.
For me, this means satisfying the artist, artisan and craftsman in myself, not somebody who makes money off of what I do. That is where great works come from; not from a balance sheet, an enhancements list, a specification or god knows, Microsoft Project.
Great attitude. I have to remind myself of this as I see my projects become too feature laden. And I find myself always thinking of what to add rather than what to subtract, which would be better for the product.
Most of my work has been adding features to existing software for a single customer. I have become a huge fan of the plugin model. If you are working on a stand-alone application or even a plugin, I would suggest making it extensible.
Then if a customer or anyone else requests a feature that does not belong in core, write a plugin for them. This reduces spaghetti code and code bloat, but still gives you a way to meet the needs of individual customers.