Every so often, Patrick McKenzie, aka @patio11, will mention the blog post I wrote that was a small part in helping him get started down the path that has led him to becoming the person we all know today who is full of knowledge and insight for all things related to software development. Especially software development by small, independent developers and companies. So I thought it would be beneficial to move the post over from it’s original, and now defunct, site so that it can be shared again for those who are interested. Even today, the message has stayed the same so I hope it can help you just like it did Patrick. I’ll include a little bit more of my backstory on how the post came to be.
Many years ago, the Joel on Software forums were my primary hangout for all things related to being a small, independent software developer. At the time, I had a weird hybrid of a job that mixed my networking background as a Microsoft Certified Systems Engineer and a “programmer”. I had fallen into a niche of automating software installs that allowed companies to stick a floppy disk (oh the horror!) into a new computer and it would bring up a screen to let you select what to install, click Enter and a short time later you’d have a perfectly configured system. (side note: Why didn’t we just image the computers? Because there were all sort of issues with replicating SIDs on the network, blah, blah, blah)
What I learned from doing this job is that I liked programming better than networking. It felt more creative and fit my personality better, but I had no training whatsoever. Even my MCSE, a certification for networking, was obtained while I only had one Windows 95 HP desktop purchased from Computer City. I simply read the course manual about 25 times each until I knew the info backwards and forwards and went and passed the tests. So, just like I did for my MCSE, I began writing applications in Visual Basic 6 with the help of a newly purchased copy of Visual Basic 6 Deluxe Learning Edition and was off to the races. I churned out several small apps that were full of code that was complete crap, but you know what? They worked. And that was exhilarating. So I kept at it, and each attempt got a little bit better. And I was creating software that I was using personally which kept me interested. Eventually, I decided that if I used the software then other people would too which led me to posting the software for sale on eBay. In seven days, I wrote the first app and essentially created a small software business that made a modest amount of money and showed me that I could make something from nothing.
Sometime shortly after (or maybe before – who remembers at this point) I started selling my app, the term microISV was coined by Erik Sink in a column posted on the Microsoft Development Network. The term sounded interesting and the domain name microISV.com wasn’t taken so I bought it, setup WordPress and started posting. The microISV movement really took hold on the JOS forums and eventually led to a book by Bob Walsh in which I was quoted about my seven day app creation that in turn led to someone saying that was impossible, which led to the post below. I hope you get something out of it like Patrick did.
When checking my referrer logs this morning I found that a portion of my interview for Bob Walsh’s book was quoted when someone asked if a working app can be completed in 7 days. The first reply from Bob says:
It all depends on the application, but unless you live in some parallel universe, I doubt you can build a worthwhile product in a week.
If you can, please tell us how!
Ok then, I’ll tell you how!
A few years back I spent pretty much every weekend in the woods shooting my shotgun at little clay discs flying through the air. Being a person who likes numbers and reports and readily subscribes to the idea of “if you track it you can improve it” I decided to see if there were a software app to track my scores. There were a few apps out there but many were old and I immediately thought I could do better.
The first thing I did was to limit myself to only the skeet shooting discipline. Skeet shooting is very well defined in that the number of shots, the field layout and the number of stations doesn’t change. This allowed me to take out the complexity of other shooting sports that allow for each of these variables to change. Because I decided to limit myself to skeet shooting I was able to hard-code the number of shots and stations into the app. At this point the only real variable was whether the shot was a hit or miss which means that the entire dataset is an array of 1’s and 0’s.
The most difficult part of the app was deciding how to allow people to enter the data into the app. Typing was out because it was too slow so I decided to create a grid with a red ‘M’ for miss or a green ‘H’ for hit. Clicking the square would toggle the choice. This also proved to be very intuitive for the users and they didn’t require much help which pretty much eliminated the initial need for documentation even though I did include a help file that told them to basically “click the square to toggle the outcome of the shot”.
Code Re-use that’s the key!
On the forum Ade said the following:
This was in reference to his second product. It’s not 100% clear from the interview, but it sounded to me like there were a lot of similarities between this and his first product — that he took his firt product and customized it to skeet shooting enthusiasts.
It was in fact my second product but I didn’t use any code from my first app. The first app was far more complicated and couldn’t be customized for this use. Since all I had to track was a string that looked like 110101001111, I was able to code this very quickly. And because the skeet layout is standard, translating the string to be displayed is just as simple. Shot 1 = array element zero. All I had to do was send the value and shot number to a function that toggled the button on the grid.
Bugs and Testing
No name anonymous guy says:
In all honesty I question how any one person can properly design, develop, and test a product in one week. It certainly cannot be properly tested or documented in that time frame.
I built the app to require little to no documentation. When you opened the app, the only thing you could do was enter a new score or view an existing score. This is not Photoshop with hundreds of menu choices that lead to hundreds more menu choices. It did one thing and one thing only.
As far as making sure the app would run on all flavors of Windows, well, I relied on experience for this. I have a lot of experience, professional and personal, with deploying applications and I was confident that this app would not pose a problem. My experience proved that this was correct. Had I used a lot of third party controls then I would not have had this confidence but I didn’t have to worry about that.
That being said, there were a few bugs that were reported by customers. I fixed them and thanked the customer for helping me fix the app. They were more than happy and appreciated the speed with which they were fixed.
Sell! Sell! Sell!
Another no name anonymous guy (maybe the same one) asks:
And how much can you sell a “one week product” for?
Sounds like freeware to me, not something your going to sell for more than $5 or sell thousands of copies of.
$24.99. I made my first sale on eBay when someone used Buy It Now to purchase the app for $24.99 within a day of the auction being posted. I tried varying the price over the next few weeks to see what worked and settled on $17.99.
It can be done…if you think it can be done
I would venture a guess that the majority of programmers out there can write an app that parses an array and toggles a display value in just a few hours so I probably took a long time doing it in 7 days. There truly is no more to the innards of my app other than handling button clicks and the like. The key has been stated hundreds of times before across this site, the JOS forums and every other microISV blog out there.
- Start with an idea that will benefit you personally
- Pick a niche that isn’t super-crowded
- Keep version 1 as simple as possible
- Get it out there as quickly as possible
If you do those four things, even if it takes longer than 7 days, you’ll be in a much better position than if you take a year to get your app out in the real world.