I wrote a code generation system that put together nice tight little apps, with UI, database interface, batch processing, and a report generator. It came in really handy for the simple apps everyone seems to need every once in a while.
My partner and I sold a few simple apps and then he found an opportunity in a large company for a much more sophisticated app. He quoted based upon the already demonstrated performance of me and my “little tool”.
Unfortunately, every single unusual thing we ran into was not “generatable” by the tool. So I had a choice, hand code or upgrade the tool to generate it.
My choice was my “best failure story”. I chose to add funtionality to the tool to generate code needed for an open project already well behind schedule. I didn’t stand a chance. Even hard coding everything probably would not have saved the gig.
Lessons learned:
- Code generators must have hooks for custom code.
- Don’t commit to using a code generator until after you have the customer’s requirements and know that the generator can already handle them.
- Don’t build your tools on the job site unless you’re really good and know that you can finish on time.
- Don’t let a few early and easy successes let you get a big head. It’s never as good as it seems. (It’s also rarely as bad as it seems.)
- Have complete, open, and honest communication with your partner(s). You don’t have to know every single thing each is doing, but you better be on the same wavelength.
- Put everything dealing with external parties (customers) in writing. Commit to nothing until everyone agrees.
- If there’s only 2 of you, you both better be hackers. There’s just too much technical work for one to be overwhelmed and the other to be “waiting”.
I’m guessing my split would be like:
sales & marketing - 10%
analysis - 15%
design - 5%
development - 50%
implementation - 10%
support - 10%
Testing is not a phase, it’s included in everything. Implementation includes deployment, training, and documentation.
Sales and marketing were never problems. There is business “everywhere”. I mention what I do everywhere I go (who doesn’t), and find business almost anywhere. Everyone uses software these days and everyone needs “something”. I’ve gotten 5 figure deals at parties, family functions, networking events, and mostly from word of mouth.
I love to hack, but I also love to talk about what I do. I may not be typical, but isn’t helping people with cool tech what it’s all about?
In my mind, the problem isn’t the time needed for selling and marketing. The real problem is that this kind of business (consultingware, one-off packages, lite package with customization, whatever you want to call it) isn’t scalable.
If my competitive advantage is better value because “the boss” (not some lightweight on an 800 number) is supporting you, then it’s also my biggest limitation. I only have so many hours in a year. Sure, I can extend myself with advanced methods and technology, but sooner or later, I hit my limit. That’s why it’s so important to find a way to convert your consultingware business into a product business. Not an easy feat, but surely worth the effort.
We are constantly hearing advice like “Scratch your own itch,” “Find problems close to you,” and “Code what you know,” which is all good advice for finding a startup idea.
What then, do you do if you’re not exposed to much?
When I spent time talking to people in Silicon Valley last year, I noticed something I never expected: lots of people have very little exposure to “real world” problems.
People come up with “me too” startups because that’s all they know.
Sure it’s easy and cheap to start a business, and if you’re smart and can hack, all the more reason. But what about the giant issue hardly anyone mentions: real world experience.
I’ve been doing programming work in real businesses for years and “still” get excellent startup ideas from my customers almost every day. In the past week alone, I’ve been challenged with problems I’ve never seen before that are really affecting these people. Just a couple of quick recent examples:
- One customer is preparing blanket purchase orders for new models, but since the SKUs change every season, their ERP system is of little help.
- Another is setting up a new warehouse, but their app won’t allow bulk updates so they have to hire clerks just to enter 10,000 new bin locations.
- Another has a call center whose response time has doubled with an upgrade to their app. Now they want the new release’s functionality with the old release’s interface.
And this is just one week! People will pay big bucks for technical solutions to these real world business problems.
My advice to a young hacker with lots of skill but not much experience (outside of college apps): you may want to consider getting a job for a year or two. I know, everyone wants to start the next , and get rich now and no one wants to sit in Megacorp’s cube farm. And a startup, even a failed one, may be a better education.
On the other hand, you will acquire dozens of great startup ideas (and contacts) and avoid the “me too” trap. Something to think about.
“Have you found a way to write software that has a real, tangible, positive net effect on society?”
Yes. Everything I do.
I (along with many others) write lots of software to help small and midsize businesses compete more effectively. They, in turn, provide value to their customers, jobs for their employees, and pay taxes to their communities. If that’s not a “real, tangible, positive net effect on society”, I don’t know what is. Not everyone has to find a cure for disease or discover how to provide clean air and water for the masses. You don’t have to change the whole world, just a little piece of it.
A mentor once suggested I think of it like a football team. Some pass, some catch, some run, some block, and some tackle. All you have to do is “your job” well, for the team “the rest of us” to succeed. Please don’t be such an “idealist” that you never find your calling. Just pick something close enough and go for it.
The real heroes are in the pits every day, helping others do their thing. You oughta join them.
Interesting question.
Reminds me of an argument between 2 great billiards players, Willie Mosconi and Minnesota Fats. Willie was the best player in the world at the time, winner of many championships. Fats was a hustler who never won anything except money. Each vowed to kick the other’s butt in a match. Of course, Willie kicked Fats’s butt, to which Fats responded, “So what. If there was money on the table I would have won.”
This article made me realize I am more like Fats than Willie. I have interviewed and worked with many great programmers, but hardly consider myself in their class. They may know 27 ways to sort data, but being like Fats, I only need to know one to get the job done (and take the money).
If there was a competition, they would kick my butt. But if a client had to get something done, I could hold my own against any of them.
A typical scenario I have seen over and over: Competitor A is doing B, so we have to do C. This means that we’ll have to modify our app to get data x from source y and present it to certain people so they have what we need to compete. We’re losing $10,000 per day by not doing this, so we need it ASAP. My solution is rarely optimal, sometimes clever, sometimes not, and often a hack. But it gets done quickly, it works, and it “does the job”.
That makes me more like Fats. But since I still aspire to be more like Willie, I’ll start doing a few more things on these lists.
One of the best decisions I ever made.
Is is “what I thought it would be”? I don’t know. Because I had no idea what to expect. (I did my first programming on the job; I started before there was much opportunity to do it on your own.)
I have done projects at over 80 companies. I have gotten involved in almost every aspect of the business. I have travelled all over the country, met many interesting people (and friends for life), and have constantly been learning and doing. Oh, and I have earned far more than most of the people I have ever worked with. It wasn’t unusual for me to be earning more than my supervisor and much more than my users.
I have done lots of work on my own and have taken lots of time off between gigs.
Sure, there have been lots of negatives. I’ve even thought of leaving IT and doing something else. I know many who have. But then I think about it and realize that “this” is what I still really want to do.
There have been horrible working conditions, unreasonable people, terrible projects, long commutes, and worst of all, boredom and disapproval on someone else’s project. But instead of whining, I always did something about it. I either fixed what was broken for me or moved on.
Because of modern technology and lifestyle, I am more excited about being a programmer than ever before. I don’t want to sound like an old timer, but I clearly remember how hard it used to be to get good. I had to go to expensive seminars or to one of the half dozen good technical bookstores in the U.S. My first computer cost $6000 (double that today). Now with cheap hardware, google, downloadable environments, on-line forums, and Borders around the corner, everything is so easy! I just can’t get enough.
For someone even mildly interested in programming, I would say, “Go for it!” Get a job and play around on your own. Learn as much as you can, technical and business, and if you don’t like where it’s heading, find a way to make it work for you. Give it a chance. I’m sure glad that I did.
I am running a marathon, not a sprint, so I frame my long working hours within a “healthy schedule”. My typical day:
7:00 am - immediately start coding last night's plan, then email, headlines
8 to 9 - exercise
9 - breakfast & internet
9:30 to 12 - code
12 - lunch & internet
12:30 to 6 - code
6 - dinner with family (home or restaurant)
7 to 9 - code
9 to 11 - computer off, pencil/paper, analysis, design, detail plan for tomorrow
Exceptions: one to two days per week consulting (still keep my night schedule), one day per week with family, occasional sports on TV. I could keep this up forever.
If you’re going to “diagnose the state of your data”, why not clean it up. There’s so much that you can do at entry time, at retrieval time, and at any time between:
- wash non-printable characters
- wash illogical (depending upon context) characters
- trim leading and trailing spaces
- verify check digits
- verify lookups
- verify against standards (USPS, etc.)
- add Soundex, Metaphone, levenshtein, etc.
- build a context suitable hash
- add Soundex, Metaphone, levenshtein, etc. to the hash
- wash standard keywords
You can have an interesting idea “any” time. Problem is you may not even realize that you just had an interesting idea when you had it.
The journal is an excellent idea. I write everything down. When I look it over later, I’m usually embarrassed that I could have thought of anything so lame. But every once in a while, there are a few gems in there.
I always have pencil and a small notebook next to the bed. The best time for me to get good ideas is as soon as I wake up. The second best time is right before I go to sleep. I carry index cards and a pen at all times during the day, just in case.
The other important ingredient in good ideas is to get out there and experience things. All the time. You never know which inputs will spawn ideas, so get lots of inputs.
My best ideas have usually come when I see how something is and think, “There must be a better way.” Then I let it lie dormant inside and trust my “inner self” to come up with something when I least expect it.
(My best hacking ideas ever came from the first time I saw a code generator. Simultaneously I thought, “That is so cool!” and “It can be so much better than that.”)
Consulting does NOT need to be a tradeoff when starting a software startup.
Why not?
If you pick your customers carefully enough, they can be the R & D department for your startup. They don’t even realize it and they pay you for the privilege!
You are going to need tons of feedback for your software. One strategy is the well-known “release early and often”. Another, just as effective, is “find out from your own customers before you develop”. You will still need to release early and often, just not as early and not as often.
I estimate that more than half of the ideas for features in my software came from existing consulting customers. Things I would have never thought of, and now I know they’re necessary. Without them I would have been releasing alot more often and early, and may have never received the same valuable input.
“Learn from the work”
I spend less time consulting than many entrepreneurs spend fund raising. I like to think of my customers as “angels whose money I get to keep”.