Some of the most commonly used terms are often the most misunderstood and least agreed upon. One example of this is the difference between a startup and a business. Now I’m no expert (having run neither of them), but I do read a lot and I pay $8 a month for hosting, so I can pretend to be! Here are my definitions for startup and business (again lifted from a Hacker News comment I made):
Startup: This is when your revenues can’t support the company and its employees at a standard they would expect. This could mean a lot of things, for instance
- You’re self funding but doing the ramen/living on a friend’s couch/wifi-freeloading super cheapo route. Maybe you’re making a profit but you don’t want to live like this forever.
- You’re living off of investment money unrelated to what your startup is producing: angel/VC money, cash from a prior successful exit, student loans, day job money, etc.
The key thing is that your idea and execution are currently unproven. You should be getting noticeably better each day as you improve your technology, your product, your marketing, your brand, your sales cycle, etc, (all these things create wealth but not necessarily money), trying to find the right combination of those things that lead to market acceptance and self-sustaining revenues. Or your goal might not be self-sustaining revenues but to create a product or technology or business that will be bought by another, larger company.
Business: A business is funded by its customers and revenues, and it has found a successful niche in the market. Once you get to this point, some of the pressure is off, although your niche and success is a moving target and you need to continue working and executing in order to get knocked out of it. There are completely different skills and personalities needed to nurture and grow a successful business/product as opposed to developing a new one and finding a market for it.
One edge case is a successful, profitable business that has taken VC or other aggressive investment. The profits might be good enough for the business size, but the expectation by investors of a big exit is like a huge debt obligation that must be met. $10 million in annual revenue won’t cut it if you’re valued at $1B. In that case, you’re still a startup.
So by this definition, pretty much all YCombinator companies are startups (I don’t know of any that have real revenue – Octopart maybe). Facebook is a startup – a huge and wildly successful one, but until they find their killer revenue model, they’re living off of investment money. 37signals is not a startup – they were profitable from web design consulting while they developed Basecamp, Rails, etc, and now their products fund their business without outside investment. Fog Creek was a startup (living off of Joel’s MSFT cash) until FogBugz took off, and now revenue from that product runs their business. Google is a business, but until they perfected AdWords and Adsense (2002? 2003?), they were like Facebook is now, a really big successful startup. YouTube went from startup to acquisition and never was a business. You’re welcome (nay, encouraged!) to adopt these definitions and spread them, since I think it would clear up a lot of things.
A similar misconception comes from the titles that people who program computers are given (or give themselves): hacker, programmer, software engineer, solution developer, web programmer, code monkey, software architect, etc (I’ve had several of those at times). I’m going to look at two of them – hacker and (software) engineer – since they correspond pretty well to the definitions of startup and business above.
Hacker: Always trying new things, trying to stretch the limits of what’s possible or what exists. This could be from the perspective of science (Einstein, Tesla, Michio Kaku, etc), the environment (Amory Lovins, Paul Hawken), in addition to the more common usage in computers. Linus Torvalds is a great example of a hacker – he had two giant ideas that few thought were possible – writing a free operating system and doing it with a worldwide collection of volunteers (GNU/FSF fans, I’m not forgetting you, I’m just citing the most prominent example). Once something is functional and successful, the hacker moves on to another hard problem, like a serial entrepreneur.
Engineer: All of the definitions of engineering that I’ve found were too complicated and missed the point, so I propose this: An engineer is someone who takes something that is known to be possible, and makes it fit within a given, limiting set of criteria. Some common criteria are:
- within a fixed budget
- meet a performance benchmark
- exceed certain reliability requirements
- make it aesthetically pleasing
- must include a certain capacity
- meet arbitrary regulations (accessibility, environmental, paying living wages, etc)
Note that this doesn’t mean that an engineer is any less creative than a hacker. On the contrary, the constraints provided by the engineering problem can provoke more creative and original thinking than that of the original invention. For example, Ikea has furniture that looks like designer furniture that’s many times more expensive, but it has to 1) be inexpensive, 2) be made of parts that fit in a flat box, 3) be easily assembled by non-technical people, 4) use the common bin of Ikea parts, and 5) be durable enough that people will continue to buy Ikea furniture. So the hacker is the one figuring out how pretty furniture should look, and the engineer is the one doing trial and error with the flat box and the alan wrench. Who’s got more problems to solve? Hard to say. They’re different kinds of problems.
I think a great example of the hacker vs engineer mentality happened when Paul Graham released the first version of Arc with no Unicode support. There was a big brouhaha on the internet with people basically that Paul eats babies and respects Satan’s no-nonsense approach to discipline. Well, pg is also on record in saying that the initial users of a language shape its future and Arc is intended to be a language for hackers. While I believe his reason for not including Unicode (he didn’t want to spend time thinking about character sets), I think that he deliberately mentioned it in his release notes (and in a defiant way) so that engineers wouldn’t want to use Arc. Someone who can’t live without Unicode support is clearly not doing the explorative, rapid development that pg is trying to promote. So with one paragraph (and by ignoring a zillion trolling flame posts), he scared off the audience he didn’t want. He understands the difference between a hacker and an engineer and used it to his advantage.
So what’s better? As with Ikea, there’s no answer to that question. Hackers and startups/entrepreneurs get more favorable ink, and have more outstanding success stories, but engineers make good money, get challenged in their jobs, are generally respected, and their solutions get used by happy clients. Indeed, if you need an engineer, you have clients! Right now I’m a software engineer (really, it says it on my business card!) and it has been good to me. I get unusual technical challenges that I wouldn’t have come across in my own projects, and unlike the “friend’s couch and ramen” startup life, I can feeds myself and my family and live comfortably. But that doesn’t mean the sparkle of hackerdom and entrepreneurship isn’t gleaming in my eye. That’s where my passion goes and I think the time I spend hacking at night on my own projects helps me engineer better solutions in my day job.
The important thing is to understand the difference and know when you need to hack, and when you need to engineer. Unlike the previous examples where it was all one or all the other, most development work requires you to assume both of these roles at different times. When debugging or scaling, you’ll probably need to put on your engineer hat, while if you’re designing a new feature, rewriting, or doing a greenfield project, you’ll hack more. There can’t be a divide between the two, whether on a team or different roles for an individual. A scaling problem might require big-picture experimentation to overcome a serious limitation. While hacking a new site, you might need to iterate over a small, important area of a page in order to hit your sweet spot in the market. Do both, and know when to do which.
What do you think of these definitions?
UPDATE: Apparently I didn’t explain well that I see this as a continuum. So lets say that pure, exploratory hacking is at x=0, and extremely demanding hard engineering (building bridges, medical devices, rocket boosters, etc) is at x=100, then software engineering might be in the 20s – still imprecise and flexible (by comparison), but constrained by cost, time, and flexibility. Also, just because some types of engineering have severe safety constraints, others may need long term reliability (car parts) or low cost (manufacturing a toothbrush). Those are engineering too, so maybe it makes sense to compare software engineering to business-related engineering.
UPDATE #2: Found a great new definition on HN:
- Technicians implement others’ designs using skills
- Engineers create new designs using knowledge
- Scientists create new knowledge
“Pure” programmers are technicians. Computer scientists are engineers or scientists.