First Functional Prototype

December 26, 2008

Somewhat.

While I plan on all of this being a web app, I’m prototyping the look and feel with WPF.  In theory I could deploy a silverlight-based app, but I don’t know how many people have silverlight available in their browser.  In a few years, maybe, but not now.  I would love to have parallel implementations (i.e. Silverlight version available for those that have it), but I’m trying to think small.

Nobody should start to undertake a large project. You start with a small trivial project, and you should never expect it to get large. If you do, you’ll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision. So start small, and think about the details. Don’t think about some big picture and fancy design. If it doesn’t solve some fairly immediate need, it’s almost certainly over-designed. And don’t expect people to jump in and help you. That’s not how these things work. You need to get something half-way useful first, and then others will say “hey, that almost works for me”, and they’ll get involved in the project. – Linus Torvalds

I read that this morning.  Very true.  I’ve tried starting a number of projects, all of which I had grand plans for, and each one has ended prematurely, largely because I’ve felt overwhelmed.  Hence my stupid little zooming idea.

So, why have I put together a prototype in a technology that I likely won’t be using?

  • I don’t know the other web technologies I will likely use, and it would take ten times longer to get something visibly working.
  • On the flip side, I know enough about WPF that I can get something working quickly.
  • I’m a visual learner and thinker, and I can iterate my thoughts and designs quicker if I can look at my ideas.

Of course, the most important reason is the instant gratification that comes from getting something working.


The First Idea

December 22, 2008

I’ve done a bit of reading as to how companies get started.  I even have a fun story about the origins of the startup I work for (which I’ll tell in a later post about why I’m keeping this blog anonymous until I decide otherwise).  What I’ve noticed among many of them is that the product that ultimately makes them successful either was stumbled into by accident (while trying to develop a different product) or was forced upon them, often as variation of what they were trying to create originally.  The book Founders at Work has a few such stories:

  • PayPal began by writing secure monetary transfer software for PDAs, and to help with testing they put up a replica of their software for web use.  It turned out that the web version was what everybody wanted to use, hence what PayPal is today.
  • Flickr started as a chat+picture sharing utility within an MMO and become so popular that it was spun off as its own product.

These are the two stories that immediately come to mind (I read the book a few years ago so other similar examples slip my mind).  Certainly there are other startups that were able to stay true to their original vision, and the book is a great way to get a survey of what different startup experiences can be like.  Of course, I will have to (roughly) follow the PayPal/Flickr storyline, as I have no vision to build a product around.  Actually, I don’t have a product idea either.  So what do I have?

I have a guiding statement: I’m going to create something that I would have fun using.

And, I have something that I would enjoy using that I want to build.  Ready?  Here it is:  Zoom in on a picture based on a user-defined rectangular region.  I know!  It’s ridiculous, right?  Ridiculously simple?  Yep.  Ridiculously stupid?  Well, I think that’s a fair initial reaction.  I still have a lot of vague ideas (and a few concrete ones) as to how I want it to work, with regards to layout and animations and overall look and feel.  The idea came up while working on a project to convert flash-based UI widgets to WPF-based UI widgets, which required a TON of inspection of graphics.  So, it has a use for someone (me), and I have some ideas as to how to make it fun to use.  This is my starting point.

Do I think this idea, in a complete, well-thought-out, polished final form, is something I can turn into a business?

No.  Of course not.

So what’s the point of trying to develop this idea?  Well, it’s a starting point.  It’s something that will be fairly easy to spec out and develop a functional prototype for, albeit via a WPF-based desktop test harness.  My ultimate goal is to have this available as a web app, but that will require learning at minimum html, javascript (?), and some server language (like PHP?).  See?  I don’t even know what languages are options for doing something like this.  Add in that I want to incorporate a SQL backend to all of this somehow, and that I’ve never ran a webserver before, and you can see that I have plenty to learn.

There’s no coincidence that what I’m attempting to do requires that I learn a number of new technologies.  When I first envisioned this project, I was planning on it being private project that only I would see.  Only recently did I decide that this would be a jumping-off point towards creating a MicroISV.  The way I see it is that if you’re going to be a one-man shop, writing software for the web will be a much easier path towards self-sustainability than writing software that has to be downloaded and installed on each person’s computer.  I’m repeating myself here, but there’s plenty for me to learn, and I’d rather learn while creating a prototype/framework for later than learn while attempting to create something I can actually sell.

The other reason I’m getting with this idea is just for the sake of getting started.  At worst I will be making horrendous mistakes, and subsequently learning from those mistakes.  I may start out going in the absolute wrong direction, but with every mistake will come a course correction, so logically if I make enough mistakes I’ll end up on the correct path, right?


Getting Started

December 21, 2008

I just installed Apache (2.2.11), PHP (5.2.8) and MySQL (5.1) on my trusty five year-old HP laptop.  Woot.

Actually, I’m quite pleased with myself at the moment.  There was once a time where I literally would not have been able to install any of those. (yeah, last night).  Haha. :-)  Here’s some background.

I’m a C++ developer.  After six months of looking at C++ job listings on Craigslist it dawned on me the era of the non-systems level C++ developer has passed, and with good reason – there’s no reason to develop a product in C++ unless (1) the software will be interacting closely with hardware, (2) the software needs strict control over system resources (memory, etc) and (2a) the software needs to be performant.  (I have zero experience in mobile development, so C++ may be a requirement there too, though the developers of mobile platforms are smart they’ll give their developers the same development options as standard desktop developers have).  Any other application should probably be done either as a web app or should be written in a language like C# or Python or whatever other languages are available.  Right?

Well, whether that’s right or wrong, software companies voted with the kinds of jobs they’re offering.  95% of my programming experience is in C++, so this is an unfortunate truth that I’m dealing with at the moment, but it one that I’m more than willing to deal with by learning new technologies so that I can stay relevant.

So, here’s where I’m starting from:

  • I have five years of industry C++ experience, all with Visual Studio
  • I have four years of (basic) OpenGL experience.
  • I have six months of industry C#/.Net/WPF experience.
  • I managed a few html-only websites while in college.
  • I’ve never maintained any kind of server (web, database, version control, whatever).

I left out a few dablings here and there, but that’s basically it.  My pedigree is that of a 90’s Win32/MFC/C++ developer, and that breed is going the way of the dodo.

So, I’m really starting from square one.  I messed around with WAMP last night, but that was a big mess, largely because I didn’t like the documentation (either it was no good or I couldn’t find what I needed from it (which is another way of saying it was no good)).  So today I decided to toss out the all-in-one approach and decided my goal would be just to get Apache installed.  Like any good developer I immediately went to google and typed in “install apache on windows”.  The third link was this nice tutorial which also gave me PHP and MySQL installation and configuration walkthroughs.  Nice!  It’s good to have a little hand holding when you’re getting started, even if it’s just someone saying ‘use the default settings noob’.

So, I have my developer WAMP stack up and running.  Now I have to figure out what I want to do with it.


I’m Starting a MicroISV

December 20, 2008

About a year ago, I decided I was going to set some weight loss goals for myself.  In addition to reading about potential diets and workouts and all that, I did a bit of reading about the psychology behind successful weight loss programs and, in general, setting goals and achieving them.  Any guess at what the most important step is, the one that everybody says you must do, yet very few actually do it?

Write your goal down, and post it some place where people can see it.

Now, I’m already somewhat breaking this rule, because really, who can see this blog?  Nobody yet.  Hopefully that will change as time goes forward.  But, for now, here it is.  I’m starting a MicroISV.  I have no idea what my product will be, which is a small problem.  However, not more than a few weeks ago I believed that was an insurmountable problem, that there would be no use in even planting the seeds for starting a business.  What changed my mind?

  • StackOverflow.  As a reader of both Coding Horror and Joel on Software, I was pleased that Jeff and Joel started a weekly podcast earlier this year.  I’m a podcast junky, btw.  I wasn’t too sure of their initial idea (aren’t there already plenty of Q&A sites out there?), but I followed its progress from the beginning, even signed up for the private beta (which, of course, makes me super special), and watched it blossom into a darn nice website.  What struck me was how (relatively) little effort it took Jeff and his team (of three?) to put the site together, how quickly they were able to get it going live, and how popular it has become so quickly.  I suspect there are thousands of other website/webapps that have similar birthing periods, but this is the first time I’ve ’seen’ it done, from start to finish. ‘You mean you can actually put something together that quickly?’ As I’ll get to in a later post, I write software desktop software, and getting something together so quickly is unheard of.
  • Hackers and Painters.  I actually picked up a bunch of books from Joel’s reading list about a month ago, and Hackers and Painters is the fourth one I’m onto.  Startup was a great read as well, largely because it close to home with my current job situation (I’ll get to that later as well), and was largely what got me primed for when I got to Paul Graham’s essay How to Make Wealth.  It’s a great essay, but had I read it any other time I would have just moved onto the next chapter and not given it a second thought.  But at this moment in my life, with my current job situation, with trying to plot a career path, with feeling somewhat helpless as the economy has tanked, with watching my software competencies become largely obsolete (relative to the kind of software I want to create) since graduating from college 4.5 years ago, that essay was a slap in the face and a kick in the butt.  It’s time to do something.

So, what am I going to do?  Well, given that I don’t have a ‘product’ in mind, I’ll set a goal that will hopefully lead to a product:

I’m going to create something that I would have fun using.

And that’s it, right there.  If I don’t know what I’m doing, I may has well have fun doing it.