How do you split your time up?

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.


How do you capture good ideas?

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.”)


How do you achieve laser focus?

The single most important thing I do to “achieve laser focus and concentration” is to work in such a way that I don’t need “laser focus and concentration” to get my work done.
 
This has to be done the night before.

I always quit all online work at least 2 hours before bedtime and print whatever I’m working on. Then I go into any other room with program listings, blank paper, and pens (especially red!) and plan out all of tomorrow’s work.

All analysis, design, and refactoring must be done at this time. I do not allow myself to sleep until the next day’s work is laid out. I also do not allow myself to get back onto the computer. The idea is to have a clear “vision” of what I am going to accomplish the next day. The clearer the better.

This does 2 things. First, I think about it all night (maybe even dream about it). Second, I can’t wait to get started the next day. I always wake up and start programming immediately. Once I get going, it’s easy to keep going. Any difficulties are probably because I didn’t plan well enough the night before.


How do you manage your time spent?

My solution? I simply stopped worring about how much time I spent doing or not doing something.

I started focusing on one thing only: the delta between what I planned to have complete at the end of each day vs. what I actually completed that day.

On Thursday, my plan was to have items A, B, and C complete before I knocked off. A & B were done by noon. I overlooked 2 prerequisites for C and had to go back and do them, then do C, which took twice as long as I expected. I didn’t finish until 2 a.m. I also spent x hours on line. So what?

Sometimes going online gives me a break. Sometimes it gets the juices flowing again. And of course, sometimes it’s just a waste of time. But it doesn’t matter.

What’s better, spending 6 hours online and getting everything done or spending 2 hours online and not finishing?
 
We often forget that (time spent) != (work accomplished).

Stop worrying about how much time you spend planting seeds and focus more on finishing each day’s harvest.


Can programming be boring?

Maybe “boring” is not the best word. Maybe we are really talking about “more fun” vs. “less fun”.

Naturally, some things are more fun that others, but I am never bored in my startup. Frustrated sometimes, yes. This week I lost a whole day because I had overlooked something simple one day last week. Had to retool the whole stupid thing when I really wanted to build the next level up. So the exciting part had to wait a day. No big deal. It happens. But was I ever “bored”? Hardly.
 
A little background. I sat in class bored to tears for 17 years. Then, I did work in 86 other companies (none of them mine) before I started this one. I have a clear vision of what I want and a fairly clear idea of how things should work. I love both the technical details and the people part. Usually, I can’t wait to get to the next thing.

The only thing I really don’t like is when a client calls for me to fix something on their crappy system. Shifting gears sucks.

Boring? No, I just don’t see it.


How do you pick the best language for you?

I guess this is why I never post in language threads, we can go on and on all day. No one is right or wrong.
 
Anyway, I’ll try to address your comments.

There are so many different versions of BASIC; it’s possible we are visualizing very different versions. I am accustomed to using INFOBASIC dialects as in JBase or IBM’S U2 line. Everything numeric is represented as strings (integers) including dates, times, and decimals, so there is no “typing”.

As for efficiency, I used to benchmark like crazy, looking for the slickest algorithms and the best implementations of compilers and I/O routines. Not any more. Hardware has gotten so fast that I am more concerned with human time, not machine time. (Naturally, anything that runs 8 million times per second BETTER be fast.)

These days, I generate most of my code, so the verbosity of COBOL (if I used it) shouldn’t be an issue. But it is. I have to drop down to the source so often and I work on the code of others often enough, that I am most concerned with getting the whole job done with the LEAST code. This is where “juniors” fall down the fastest (IMO); there’s too many places for things to go wrong.

I know what you’re thinking, if this is the case, why not learn even more advanced languages and frameworks with even less code. I dunno.

I guess I’ve “settled into” what works best for me (as everyone should). Is it the best? Probably not. Am I open to better ways? Probably. But not today. Too busy.


Why are you a “caveman” programmer?

Tell you why I don’t like syntax highlighting (or any crutch). Ever since I read the chapter about Woz in Founders at Work. The thing that he thought made him so successful designing the Apple II: he knew every single little part of it intimately, like the back of his hand. That struck me like a lightning bolt. So that’s how I feel about my code now.

If I want to do something, I read and reread and reread it over and over and over until I practically memorize it. THEN it’s part of MY firmware, and that’s when I really get insightful and productive. IDE’s, syntax highlighting, etc. are just crutches that keep my real “hacking muscles” from developing. I won’t use them. Black and green; that’s all I know.

Similarly: I used to know every phone number I ever needed by heart until speed dial came out. One day last year, I had the very frightening experience of not being able to call a regular number from someone else’s phone. I have never used speed dial since. Anything that impedes my “brain exercise” is something I do
without.