For a while now, I have had three goals in the back of my mind that I hope to accomplish within my lifetime. The first is to write a book, probably a technical book of some sort. Second, get my Ph.D., most likely in Computer Science, but if not it will be in something that has a lot in common with CS. And, the third, would be to start my own company. Now by company, I don't mean Microsoft, Apple, Google, etc, etc. What I mean is a micro-ISV (Independent Software Vendor, for the uninitiated). I don't particularly care if this company never turns into anything more than a fun little — and hopefully, at least slightly lucrative — side project. The main benefit that I hope to take away from starting my own company is the experience and the permission to say that I, unlike so many others out there, was not defeated by my own fear of failure, and, as a result, I was able to provide something of value to the world based totally on my own ideas and hard work.

So, in an attempt to prod myself along into realizing at least one of my dreams, and because I just recently saw, and was inspired by, the film "Julie & Julia" (don't ask, my wife made me watch it1), I thought I would start a regular weekly series where I describe my journey into creating a small software company. My desire, is that this series will provide the catalyst I need to realize one of my dreams, and that it will also serve as a kind of tutorial on how to go about starting your own company — or how not to, as the case may be — to others wishing to do the same. In the course of this series I will talk about what I've done in the past week to get myself closer to my goal as well as describe the product(s) that I am currently working on and tools/technologies that I am using and, hopefully, provide some insights into what it takes to develop a professional-grade application with just yourself serving as architect, developer, tester, marketeer, accountant, etc., etc.

Now, with my goals for this weekly series firmly stated, and a rough outline of how it will progress, I think it's only fitting that we end this post with my very first entry in the series, so the rest of this post will be detailing what I accomplished in my very first week in the pursuit of my very own software company.

Why now?

Necessity is the mother of invention... and a damn good indicator of an opportunity for profit.

I have a little pet project that I continuously come back to every so often. It's a simulation framework. I find simulations to be fascinating. My interest is piqued by multi-agent simulations (MAS) in particular. As a result of my simulation fetish, I've played around with several different environments for creating MAS's, all have been Java based, two of which I really liked and have used for the bulk of the simulations I've written. My tools of choice? MASON and NetLogo. I love the simplicity and intuitiveness of the MASON framework, and for rapid prototyping, I've found NetLogo to be indispensable. Also, a new tool/toy, Nodebox, that I've been playing with lately, nearly gives me everything I've ever wanted. All of these tools come close to offering the perfect environment, but none of them quite quite get there for me. I work on a Mac, so I want something native to that system, so it needs to be based in the Cocoa framework and not Java (sorry MASON). I want the rapid prototyping and drag-n-drop capabilities that NetLogo provides. I also want a language that I like to program in and that provides a wealth of libraries. So rather than a Logo variant, I want Python as my modelling language. At the end of the day, I keep coming back to my special project, which is creating my own simulation framework and/or application.

Why am I telling you about this special project of mine when I am supposed to be talking about what I did this week to get me closer to starting a software company? Well, it's the implementation of this, and a couple of smaller side projects using the Django web framework, that have brought me to my current idea for my very first product. As I've been developing each of these apps, I've noticed something missing in the realm of tools for small software developers on the Mac. Now, I don't want to talk about the specifics of my application just yet, since it's so early in the game, I'll go into the details of what I'm building as I get closer to its release, but, for the time being, I'll appreciate your patience with me as I keep the concept to myself. Just know that it's a tool for small — and by that I mean mainly indie — software developers.

So, this is why I've decided to throw my hat in the ring now. I've finally found a product that I want and that no one else is currently providing in the way that I want it. Odds are if I want this product, then there are few others out there that would like to have it as well, so why not try my hand at creating it and maybe profit a bit at the same time. Which, finally, leads me to this current week's activities.

Week 1

In my first week, I came up with my idea for a product. Well, that's not totally true...

I've been thinking about it for a while and I finally reached a point this week where I said, what the hell, this time next year I want to have a product for sale. Maybe it won't make any money, but who cares, I'll have a tool that I want to use, the knowledge that I've gained along the way, the experience of creating my own company, and the ability to check off one of my life goals. That's not a bad trade off in my opinion, so why not go for it.

So, back to what I did in week 1. I laid out my first design of the product. Now this is very rudimentary, just a paper and pencil diagram of the main screen and a description of each of the components that make up the main GUI as well as some ideas for how different pieces will function. Nevertheless, this is a pretty important step, as I now actually feel like I'm on my way toward developing something. In the past, I've thought threw several scenarios, but without getting them on paper I've always found myself overwhelmed with all the complexity in the details and just dropped the idea as a pipe dream. Which leads me to my very first take away lesson for anyone wanting to start a company.

If you have an idea that you think would make a great software product, get it onto paper as soon as possible and before you start thinking about all the minute details of its operation. In other words, once you've formed a pretty decent concept of what it is that you want to create, sit down, without a computer in front of you, and just a few pieces of paper and a pencil and start sketching out the simplest interface that will accomplish your tasks and make sure to describe the functionality of each major piece in the design (this will keep you from constantly rethinking the details time and time again). The main benefit that I see in doing this is that it focuses you and gets you started on the path towards creating a product rather than just always thinking about it. The other benefit is that it organizes the maelstrom of ideas in your mind. If you're anything like me, when you have an idea it's never just one. You start off with a clear picture in your head, and in no time you've gone down a hundred different tangential scenarios for how you want to use the software. Getting the basic concept on paper removes a lot of the chaos so you can focus on the important details and actually get to work rather than spinning your wheels constantly.

Finally, the last thing I accomplished this week is I've invested a little time and money into some of the technology that I'll be using to implement the application. I bought the Beta release of Marcus Zarra's "Core Data" book from the Pragmatic Programmers and I've begun working my way through it. As I approach the end of the book, I'll try to remember to write down my thoughts on the book and whether or not I recommend it to others hoping to learn Core Data.

Well, that about wraps up this post up. To recap, I've got a simple first stage of my design drawn up and I've begun studying one of the technologies that I will be using to create my application. I hope to see you all back here again next week for the latest update on my progress.


  1. Ok, so in an attempt at full disclosure, I actually wanted to see the movie every bit as much as she did, but I sound so much cooler if my wife made me see it and I am banking on the fact that you all won't actually click on the footnote link and read this confession.

blog comments powered by Disqus