Having been a software developer (and having studied it) more than half of my life, I feel very qualified to discuss the topic from a real world, acutely human point of view. There are many so-called software experts whose heads are stuck high in the clouds of academia and arcane philosophical approaches to software design. Sometimes, their esoteric discussions of software development are interesting and inspiring. More often than not, however, they are complete heaps of self-absorbed and obfuscated rubbish.
I don't want to read rubbish. I want down-to-earth practical advice that's right to the point. I don't have the time to read your 800-page treatise on optimizing my project management process or user-acceptance testing process. I need to get things done... NOW. Too much of what's written about software development on the web is 95% horse-crap and 5% useful.
Perhaps nowhere in the world of software development are there more heaping piles of BS than in Corporate IT departments. I had the good fortune of working for a local Fortune 500 company named AMP Incorporated (now Tyco Electronics) as my first job out of college. I learned a hell of a lot about the manufacturing process, about working on large software development projects with lots of other people, about the major phases of large-scale project development, and I met many great people there, several of whom have become lifelong friends.
But I never felt that AMP (or Corporate America in general) was the place where you really learned how to become a great software developer -- or software architect as I prefer to call it. Oh sure, you'll pickup some new languages and technical knowledge along the way. But writing Cobol code or IMS database calls, copying reusable chunks of CICS code, or fiddling with JCL is NOT software development. If you think it is, you are NOT a software developer. Programming is only one component of being a true software developer/architect. There is so much more involved in the big picture.
I didn't become a TRUE software architect until I started my micro ISV (defined as a one-person independent software vendor). Only when you've experienced what it's actually like to:
- Think up a product idea from scratch
- Formulate that idea into a viable functional blueprint for software
- Spend months or even years to program it
- Test out your creation and fine-tune it
- Market it to the general public
- Let total strangers use it and provide you with unsolicited feedback
- Support it and upgrade it for as long as it exists
Then and only then will you understand what the term "software architect" really means.Love them as I may, most of my friends in the Corporate IT world have absolutely no clue what it's like to be involved in the world of independent software development. Even though they're in the business of software, their world is totally foreign to what I do for a living.
For starters, in the Corporate IT world, most employees have very specific jobs. They are programmers or systems analysts or DBA's or project managers or IT executives. Of those 7 things that I mentioned above, these folks have their fingers in 2 or 3 pies at most. The IT execs think up the idea. The systems analysts, with the help of "user experts", create functional specs for the idea. The DBA's create and maintain the database that everything ties into. The specs are handed off to the programmers who code it all and do some initial testing. The project managers keep the work moving along and ensure that everyone is working together. When the time comes for serious testing, the analysts, managers, and users get together and beat the hell out the system to a reasonable degree, and then the whole shebang goes live. And then, because 80-100 people or more were involved in creating this complex beast, the inevitable period of "bug fixing and enhancement requests" comes to the fore. Everyone points their finger at somebody else because they only were involved in one small part of the overall project, and there are so many easy targets to shift the blame to. This period can literally last for years.
As a micro ISV, you are responsible for everything. You don't have the luxury of having a narrowly specific job. You need to brainstorm ideas and come up with something brilliant. You do the necessary market research to see if it's viable. You create the functional blueprint. You chose the technical tools to use, create and manage the database, do the programming, test everything out, fix the bugs, and create the installation routines. You come up with a product price. You maintain an e-commerce site so people can buy your software, and perhaps find other distributors who will carry your product. You spend your own money to market and promote the software, and answer queries from potential customers on why they should buy from you. You fulfill the orders and deal with any problems that might arise. You do your best to provide great tech support and build a happy user community. You receive and act on user feedback. You fix bugs if necessary, and are always adding little enhancements along the way to keep people happy. You deal with the occasional idiot customer who is so irrational or mean-spirited that you wonder why you ever got into the field of software development in the first place. And the support and upgrade process never ends, until you decide to stop selling your software product. Oh and once you decide to make a 2nd product, the entire process repeats itself all over again and co-mingles with the existence of product #1.
Meanwhile, back in Corporate America...
Not only do Corporate IT workers have very specific roles, but they often have a captive user audience. This was especially true at AMP, where we developed in-house software to serve our internal manufacturing processes. There was no worry or wonder about whether or not a market actually existed for the software we were creating. We built it, and those users were damn well going to use it whether they liked it or not. There was absolutely no need for "marketing" in its truest sense. This was simply, we make it, you take it.
In the outside world of independent software development, as is the case for most commercial products, you make it and pray to God that they like it enough to take it. Not only did you make several assumptions and gut decisions during your development process, and take a financial risk to get the product to market, but there are zillions of things outside of your control that determine whether your software will become a real success or not. Simply having a good product doesn't guarantee diddly squat. You've not only got to work really hard, you've got to be extremely lucky as well. Figuring out what goes over well with the fickle public is anything but an exact science. Few of my peers in Corporate IT will ever deal with any of those concerns, and most could care less about it. They simply do their particular jobs in a vacuum, realizing that they'll still get paid even if the end-users wind up hating the software or ditch it for something cheaper, newer, or glitzier.
Another fact of Corporate IT development in many cases is that there's a very narrow user base that the software is designed for. You are building a product for users who all have some degree of computer literacy (because they'll be using the software as part of their day-to-day job after all). Oftentimes, these users are also functional experts in the field that your software applies to.
While creating in-house software for AMP, it was quite evident that most of the users of our software knew a helluva lot more about the process of electronics manufacturing than the people who designed the system. That doesn't necessarily make them great software designers, but it does mean that their opinions on what major functions the software should perform should far outweigh those of the IT execs.
My most rewarding years as a systems analyst at AMP were those where my boss allowed me to work closely with the user community to create new functions that solved problems that those users felt were most important. In a sense, I was a "free agent". I worked with the users to build cool new stuff and enhanced functions that helped them tremendously. I got to use my creativity to a much greater extent than ever before. I was not just another analyst who stuck to a regimented routine and solely did tech support or addressed the backlog of system fixes. I loved that role and received many compliments from the users during those years. They found an analyst who was interested in working with them to think outside the box and solve nagging problems that "the suits" didn't seemingly care enough about.
Unfortunately, the Corporate IT mindset is not one where a "free agent" mentality is accepted in the long term. Despite my boss's pleas on my behalf, the higher-ups eventually decided that I should be reigned in and controlled a bit more. They didn't want me becoming an exception to what everyone else was doing.
Yes, I was creative and doing an excellent job. My job reviews and the user community all said so. But their thinking was that I needed to do a little less "design and development" and focus more on boring crap like divisional re-orgs and little technical details like honing my Easytrieve and JCL skills. In short, "hey Steve, you're having too much fun & success actually doing something useful, here's some horse shit project to work on so you're just like everyone else." What a bunch of idiots! Eventually, my boss left the company and I had a new boss who was determined to have me "assimilated". That was the beginning of the end for me at AMP. I gazed into the crystal ball and saw the long-term outlook there and it was just not for me. AMP had become a JOB. It was not the place for creative souls who needed to run free with their great ideas. I look back now and realize that I made a smart decision. I'd probably still be doing the same stuff if I was there today and would have missed out on an exciting chapter in my professional life as a software developer.
Being a micro ISV is all about creativity, passion, variety, and independence. You'll wear more hats than you'll ever imagine. And it's a far, far tougher job than working in Corporate America.
I used to get extremely pissed off when some of my old work-mates would kid me about being self-employed. They envisioned that I got to slack off, play games all day, and generally play hooky from the "real work" that they were doing. "What a bunch of jackasses!", I thought to myself. If they only knew that you work 10 times harder when you're on your own. Nobody is there to motivate you; it comes entirely from within. You do so many more things than you ever did in the tightly focused, insulated world of Corporate IT. Nobody is around to assign you work or keep you on schedule. You think it up, you decide what's critical, and you do it or else you go out of business real fast. You work lots of nights and weekends. And you do all that without any steady checks coming in. Great fun right?
After many years I've finally grown thick enough skin and gained the wisdom to realize that whoever thinks I'm goofing off and really not working is just a sad, sad, mentally deficient person. People often make fun of things that they know nothing about. They throw stones and make jokes, never once actually trying to do the thing that they're making fun of. I've learned to slough off the barbs of the dimwitted. I don't give dolts the time of day anymore.
If you've read down this far, you may be wondering why I bothered to write this post. I did it for two reasons. First, I wanted to shed a little light on the differences between the worlds of Corporate IT and micro ISV's. They are vastly different. I respect both camps, having worked in both of them. Generally speaking, the money is much better in Corporate IT, but the level of self-satisfaction and accomplishment you can achieve is much greater in the micro ISV world. It's the old money-vs-happiness trade-off. I'm hoping to find the happy medium someday.
Secondly, I wanted to write this post for all the entrepreneurs out there who are struggling to make their personal software businesses work. I wanted them to know that the grass is NOT any greener on the corporate side of the fence. Your pocketbook will fatten, but in all likelihood, your happiness will suffer -- especially if you are a highly creative soul. The road of a micro ISV is a hard one, and unless you're very lucky, your business will fail within 5 years. But even though the odds are stacked against you, it is people like you who make the biggest difference in the world. Without people who are willing to put their heart & soul and passion out there for everyone else to share in, there would be no great advancement in society. I admire you. The world needs more of you. Keep on truckin' and I wish you much prosperity and self-fulfillment in 2008.
To all my friends in Corporate IT, I miss you and best of luck in the New Year. Even though I am no longer one of you, I still think of you on a regular basis. Don't let "the suits" get you down. They aren't any better than you, they just wield more power. And if you ever get tired of that power struggle, don't forget that there's a whole wide world out here for you. Carpe diem!