Programming/Writing Software for a Living – an Insider’s View

Question (posted on a developer’s Blog):
How many of you make a living writing software on your own?

Hi everyone,

I was just curious as to how many of you own your own business writing software on your own and if you do, what advice could you give to a person going into this type of thing? I’m working on a huge visual basic project thats going to be the “shell” of all the software I write. Am I wasting my time? Or is this going to be something worth while?

– A

My answer:

Like any other type of work, whether you can “make it” depends a lot on what you have to offer. Really, technical skills are only a relatively small part of that.

The biggest asset, if you have it, is the creative skill in being able to “see” a good product before you begin developing it. You must be able to see what’s needed, and what’s not needed. Hint: just about everything’s taken already.

Almost every niche has been filled. Maybe you have a better solution in one of those places. But if you don’t have the vision to “see” a really, really great product, it won’t matter how technically proficient you are. The vision is your goal. Without that, you will wander aimlessly, and your product will reflect that.

So, again, the first thing you must have a a really great idea, and a clear vision of what it is. If you do not have a clear vision of what it is, then you can, in some cases, substitute a LOT of experience and trust that it will get you there.

That’s kinda where I am. I used to obssess over having a complete “system spec” before I started. Then I realized, such specs are rarely to be had. I can, instead, begin… and so long as I begin in the right direction, I can kinda trust that the rest will come to me as I go. I made a lot of mistakes early on that I learned from.

One such mistake is exactly what you are proposing right now.

This “framework” or “foundation” upon which you think you will do all your future development is probably a bad idea. If it could work, it will be far too complex to develop in anything like reasonable time. What will you do in the meantime? On the other hand, if it cannot work, then it will likely not work because it will become FAR too complex. Grand Unified Theories in software development have historically been almost unanimous failures… disasters.

In my personal opinion, trying to settle on a complete, unified, foundation before getting to work developing on it will never happen, because the foundation will never be built. You will ALWAYS be modifiying it. You will always be changing the way you work. You will always be developing new techniques. And if this is a new endeavour, as your message seems to imply, the chances that your foundation, once built, will quickly become obsolete as you move into these new directions.

I’m not saying that you can’t write stuff now that you won’t be using much later. I have a function library that I began writing almost twenty years ago, parts of which I’m still using today. But there’s also ten times that much stuff that I wrote, used and then discarded because it wasn’t going the way I wanted to go anymore.

Your experience will likely be the same.

But back to your question.

Slick coding skills are one part. The other part is marketing, sales, support, pesonal skills, and a whole host of other things.

I’ll give you an example of something that was ALMOST a disaster for me.

How NOT to Handle Client Calls

I got a call one day. I was VERY busy working on a particularly difficult piece of code. I was NOT in the mood to entertain an “amateur” on the phone.

This guy wanted to know “how much will it cost to develop an accounting system?”

I was not interested in wasting time on a guy with a pipe-dream.

So I told him bluntly (but absolutely truthfully), “Sir, it will costs MILLIONS of dollars. The people who wrote MAS90, or QuickBooks, or Dynamics, are companies that employ dozens, if not hundreds of programmers, who have worked on the project for decades. It will cost millions of dollars.” [And then I thought to myself, “Now go away, I have important things to do”]

He then said, “well, how much to develop just an accounts receivable module for a narrow vertical market?”

“Well, that’s different.”

“How about you come over to the station and let me show you what I mean?”

“OK”

That was the beginning of a decade long web-development engagement with one of the largest TV and Radio companies in the world. I almost lost it because of an impatient attitude.

Once in the door, what kept me there was primarily my ability to very quickly grasp what it is that they are trying to accomplish, and very quickly provide a “model” (even if only a verbal or paper-sketch model), of what I thought would do the job; and produce a model that everyone thought was good.

Without that, no development would begin at all.

Marketing and Sales skills. Followed by “vision.” Followed by “execution plan.” ONLY THEN followed by programming.

So, whether you can succeed on your own is a very difficult question to answer. In spite of the scenario I just described, work will not simply drop out of the sky into your lap. That is the ONLY time such a thing ever happened for me.

You must be prepared to assume risk – ALL OF IT.

When you are working for someone else, it is THEIR risk. They are the ones risking their house or car by financing you to develop software. On your own, YOU assume all this risk – and there is plenty of it.

I was pretty busy during the dot-com boom. I was almost bankrupt when it ended.

The economy is doing really great right now (note, this was written in 2005), and I’ve been busy. But I know it could disappear tomorrow in the blink of an eye; much like it did on 9/11 (which decimated the niche market I was working in at that time, which was a national car-rental company).

I’d have to say that I have been blessed by God in much abundance, but I do not take even that for granted. He can change his mind any time he choses, ya know. 😉

Whether things will go that way for you, or not, I have no idea. But I do know that you need to be much prepared.

One other thing that I’d like to add.

You WILL get tired of this.

When I started, I was in the Air Force, working for NORAD as an Air Traffic Controller.

I bought an IBM PC when they first came out, and began by, basically, hacking.

There was very little off the shelf software back then, and if you wanted something, most often you would have to write it.

When I got out of the Air Force, it was right at that time that Reagan had fired almost ALL the Air Traffic Controllers who were on strike. The usual route for military ATC it to switch over the the FAA. But friends taht had made the jump were telling horror stories of 16 hours shifts and 7 day workweeks.

ATC is a really great job, but it is VERY stressful. But it’s also a LOT like coding. You sit down at the scope, you blink, and 12 hours disappear into a haze.

When I got out, I knew just enough computer jargon (really!) to go over to the Navy base across the bay and convince them that I was a computer operator. I started there, literally not knowing how to load paper in a printer because I couldn’t afford the printer when I bought the computer.

So, I went from PC amateur hacker to VAX PDP-11 and IBM 4381 mainframe operator.

I then moved to programming, right when dBASE II for CP/M was introduced. And it’s been all programming, all the time, ever since.

Here’s what I learned.

It was tremendously rewarding and fun to write programs that solved my problems. But writing programs to solve everyone else’s problems quickly became a headache.

So long as your code and your vision are in tune, you’re golden. But when the vision isn’t yours, and when the vision keeps changing, then coding to hit that moving target quickly becomes just plain aggravating.

Let’s face it – even when self employed, you are always working for someone else. Always making someone else’s vision come true. Always burning your energy to make someone else’s deadline.

If you could only write for yourself, and get paid for it, there’s no better job in the entire world. It’s better that ATC even. But that will never happen.

You WILL get tired of this work, and one skill that you MUST have is the ability to motivate yourself to sit down and face the hideous blank screen monster.

Don’t forget that.

Also, be prepared for this:

No one, except other programmers, will ever truly understand you or what you do. Don’t gloss over this bit. It’s more important that most people understand.

You must be willing to take job satisfaction from entirely within yourself.

I am fortunate that I have one, single person that I know who is a programmer who I would consider even more talented than I am.

Think of it this way. I’ve helped a lot of programmers. I’m really pretty good at what I do. But when *I* am stuck, there’s nobody to go to. And when I do a really slammin’ piece of code, there are very few others, even other programmers, who can look at what I did and be genuinely impressed and it mean something to me.

It’s lonely at the top (or in my case, somewhere in the vicinity of it, well, I can see it off in the distance there… 😉

Advertisements

About combatdba

I'm a production DBA at a terabyte-class SQL Server Shop
This entry was posted in General. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s