Friday, October 4, 2013

Silicon Valley Code Camp Session Materials

Thanks to everyone who came to see me at Code Camp on October 5! Here are links to some resources related to my presentation:

The ASP.NET MVC sample project I demoed at the beginning of the presentation was authored by Eric Hexter. You can install this sample application into a "basic" Visual Studio 2012 MVC4 project using NuGet with the package ID twitter.bootstrap.mvc4.sample. However, be aware that the package has an error in the bundle configuration, and in order to fix it you will have to apply the code shown in this commit.

Once you get the sample up and running, you'll notice it doesn't have any database access, although you should have Entity Framework 5 installed as part of the MVC project template. All you have to do is create a data context class for the code first and wire up the data access code. Here's a link that should get you going.

Here's the PowerShell script I demoed that will create an Azure management certificate:

#purpose: create a management certificate for Windows Azure
Param ( [string]$certName = 'Azure Management Cert' )

#make sure this path is set to a valid Windows SDK path 
$env:Path = $env:Path + ';C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin'

makecert -sky exchange -r -n "CN=$certName" -pe -a sha1 -len 2048 -ss My "$CertName.cer"

Finally, here's an example of an assembly redirect in a web.config file:

Thanks again for coming, and please check out Practice Fusion if or when you are looking for something new and exciting.

Friday, January 25, 2013

Becoming a Software Product Company

I believe H.L. Mencken once said, “every newspaperman has a novel in him, and that’s where it belongs.” The same could be said of programmers and software products. When a coder looks out at the world of successful products and web sites, it always seems very simple to create the next Twitter, the next Angry Birds, or for you old folks, the next Microsoft Word. But the reality is very different, for a number of reasons. If you’re a programmer and you want to create and market a product, you should know that:

  1. Your idea actually sucks, even though you think it can’t miss. If you haven’t run your idea by some potential customers to get feedback, you definitely should not write any code yet.
  2. It’s going to take you a lot longer to code this than you think. It isn’t just writing a simple application that works well, there’s plenty more that you’ll need to think about if you going to release a product. Do you have an error handling strategy that’s going to make support incidents bearable? What about licensing and collecting your purchase price? Will users know how to use your product intuitively or will they email you and ask for your money back instead?
  3. This is the killer: creating your application is the smallest portion of the work that’s ahead of you. In a typical software or web company, the developers are a very small proportion of the staff. That’s because most of the work required to launch and maintain a successful product or web site is not software development work. So, if you’re a solo developer, you’ll have to split yourself in 10: 1/10th of you will get to write code, 4/10ths of you will be in marketing, 3/10ths of you will work in tech support, and 2/10ths of you will be a product manager. Is this not sounding as fun as you thought?

I’ve seen other consulting companies get bogged down in this trap, so I was wary of releasing a product for many years. Then, last spring, Tim Grant of Business Solution Providers (BSP) came to me with a simple need. BSP specializes in inventory solutions for QuickBooks®, including QuickBooks Enterprise Solutions Advance Inventory. QBES Advanced Inventory allows QuickBooks user to track serial and lot numbers in their inventory, and there is good coverage of receiving and selling of inventory items that are numbered. But there’s one big gap in this system: there’s no easy way to take an existing inventory that was created before Advance Inventory was enabled and add lot or serial numbers to it. That’s what Tim needed help with.

And so Lot Mop was born! I decided to go ahead with Lot Mop mainly because of one thing: this was a very simple product to build. I had a working prototype up in a week, and I got good feedback from Tim and some other QuickBooks Pros that I showed it to. I should note that once I committed to productizing the 1 week prototype, it took another 3 months of development, legal, and administrative work before it was ready. But overall the effort was small enough to be survivable.

I haven’t yet broken even on Lot Mop, considering all the time and money that I spent on it. But it is already paying dividends. What I’ve found is that the ability to deliver a product makes a subtle but powerful impression on people, and my consulting business has picked up considerably. Overall, Lot Mop has definitely been worth the effort.

QuickBooks is a registered trademark of Intuit Inc. in the United States and other countries, used under license.