Building NH Prof: The background story
I was asked to comment about the background story behind NH Prof, I posted a lot about the technical details about developing NH Prof, but nothing about the actual story and the business decisions that led to developing it.
I found myself needing something that would make discovering how NHibernate works almost as soon as I started using NHibernate. That is why I created the NHibernate Query Analyzer. But over time, I realized that what I wanted isn’t actually understanding how NHibernate works, but what it is doing. In particular, I realized that I need to figure out a way to remove the abstraction layer.
The real motivator was when I was called to a client to optimize their NHibernate usage and I grew very tired of looking at trying to figure out what SQL statements where sown in the SQL Profiler or understanding the SQL statements that NHibernate threw into the log.
I sat down at a hotel room with a pint of Guinness and tried things until I got something that gave me a beautifully formatted SQL and could do visual profiling on NHibernate.
I knew that I wanted to make this a commercial endeavor. But I was also worried about it. There is a good reason why most businesses fail in their infancy.
For NH Prof, specifically, the major concerns were:
- Will someone buy it? I literally had no idea if people would be willing to pay for a complementary product for an OSS project in the .NET world.
- Are there enough people interested in NHibernate to justify it? Should I try going for the Hibernate market instead?
- It is going to be too big for me to handle it alone. Even in the beginning, I was well aware of what I wanted, and I knew that it would necessitate bringing other people in. That would necessitate paying them.
- I can’t work on that full time, because I need to bring enough money to live and pay other people to work on it.
I made several decisions based on those concerns. The most important one was discovering if people are willing to pay for it. I run a small survey, to see the reaction, and based on the results, I decided that it seems to be worth the risk.
I had the NHibernate download numbers and the traffic in the NH Users mailing list to tell me that there seems to be enough potential customers and I had a major advantage with NHibernate, I am a member of the project already.
Bringing other people in was a huge milestone for me. I don’t mind spending time on something, but bringing other people in meant that I would have to either offer sharing the potential revenue or pay them out of my own pocket.
I don’t like the idea of revenue sharing, for a lot of reasons. One of the major ones was that I am willing to risk my own money and time, but I don’t want to put friendships on the line if this fails. That meant that I had to go with outright payment. Software development isn’t cheap, especially if you are talking about a private person funding it all.
Now, a quirk in my psyche means that I am willing to be poor, I am not willing to be in debt. I knew that I would reach into people that I work with in the past, friends and co workers, to help me build NH Prof, and the last thing that I wanted was to have to go to them as some point and tell them that I don’t have the money to pay them for their work.
Remember that I considered that there is about 50% likelihood that I wouldn’t be able to cover my out of pocket expenses at the time.
I decided that I am not going to go with the usual software development model for NH Prof. I contacted the people that I wanted to work with me on NH Prof and asked them for their rates. Afterward, I told them that I am willing to pay enough money to get things started, and that I would pay them in advance. When that money was over, I would pay them again.
That way, the worst case scenario is that I am ending up broke. I was broke before, and I know how to handle that. I would not, however, remain obligated to other people. Everyone who worked on NH Prof worked using the same model, I purchased some amount of their time in advance.
I had one problem with that, because someone forgot that they need to be paid (you know who you are). I found it funny to have to remind that someone that I probably need to pay them again.
The next big problem was that I knew that I couldn’t just didn’t have enough money to pay for everything that would be required. That meant that I couldn’t afford to stop working and concentrate on just building the profiler. That meant that I, and the rest of the people working on the project, would have to work on this in what is basically our spare time. Well, not really spare time, but sporadically, intermingle with doing other things.
That let to interesting dilemmas with regards to the actual system design. I had to design to meet my likely commitments, which meant that I had to be able to go into the code base, do some work, and bail out with a working version. A lot of the things around NH Prof (like the auto release to users of commit or the concepts & features architecture) are based around that need. We had to strip down everything that we could to allow us to build it incrementally.
Another challenge that I had to face was deciding on what the price point would be. I knew that I had basically three price points to consider, what I dubbed as the ReSharper price point (~350 $), the TestDriven.NET price point (~200$) and the Visual SVN price point (~50$).
In most businesses, you have to choose if you want to sell to few few at a high price point, or to many at a lower one. But there are also two other issues here:
- Price point also implies value, people associate higher value with things that cost more.
- It is always possible to lower your prices, it is very hard to raise them.
I knew how much money I hoped to make from NH Prof, and I knew it would likely not be possible to do so with the Visual SVN price point. I also knew that I can always reduce the price to the Visual SVN point, but going from costing 50$ to 350$ is not likely to ever be possible. At the same time, I didn’t want to introduce a new product with a 350$ price point. It seemed too high for a completely new product.
I decided that I would use 300$ as the base price, but in order to attract more buyers, I would offer a big discount for the beta period. Thus, the effective price for NH Prof was around 200$ for the beta period. At the same time, explicitly stating that this is not the price, but this is a discount meant that when I released NH Prof, I could discontinue the discount and go back to what I consider a good price point for NH Prof.
There is also a small side-effect here, I made the beta discount cheaper than all the bulk licensing discounts. So someone buying a bunch of licenses will be able to see that she is getting a better deal during the beta period than the bulk licensing would give them. That prevented people asking for a bulk discount on top of the beta discount.
The next decision was what currency to use for the profiler. The two obvious choices where US Dollars and Euros. The default was to name the price in USD, and go on with things, but I thought long and hard about this.
This past two years, the US Dollar has been crazy. And the last thing that I wanted was to see the currency exchange rate fluctuate all over the place. In 2008, the US Dollar to Shekel exchange rate dropped down to 3.2 shekels per dollar, soared to over 4 shekels per dollars and in general behaved very erratically.
I was exposed to that, and I felt the pain of the low exchange rate acutely. Looking at the actual numbers, it isn’t like the Euro didn’t play merry games with the exchange rate to the shekel as well, but I wasn’t exposed to it and didn’t develop the aversion to risk that I have with the US Dollar.
Looking at things, it was a good decision, here is the exchange rate for 2009 for the two currencies:
Overall, the Euro has been far more stable, and right now there is a lot of talk about the USD/NIS exchange rate plummeting even further.
There is another point to consider, 300$ US is 200 €, and the beta price of 200 $ is 140 €. It is just a trick of numbers, but it makes it more palatable for people to consider. In a related point, I absolutely hate prices that are 99 anything (299, 149.99, etc). I don’t like it at all.
There are other things to talk about, but I think that I can just post this now and go to bed, it is midnight at the time of writing it, and I need to do a presentation tomorrow.
Comments
Interesting stuff, thanks for sharing that side of the story.
Hey thanks for sharing this.
I am considering a similar approach to getting some software built that I need so it is good to hear someone else has tried it with (so far) success.
Excellent post. Thanks for the insight.
I read somewhere that four most important things when going to market are:
Market - Do you have a market to sell to.
Marketing - Can you adequately market your product via SEO, Twitter etc.
Aesthetics - Does your product look nice. If it is a developer focused product you might get away with something not so nice looking otherwise hire a designer.
Functionality - In the article it is promoted as a distant fouth.
I think the important point is no.1, you should ascertain whether you have a market first before going any further.
The biggest point of failure is developing something that people do not want.
As developers we often get sucked into writing things that would be fun to write.
NHProf is a good idea or at least it must be because I have purchased it!!
Sounds like a true ISV story, something a lot of developers set out to achieve.
We'll done BTW, shipping a product is a lot harder than general application development as generally you need to develop and maintain the full product development chain by yourself, i.e. product development, bugs/issues, customer support, marketing website, online merchant etc.
How much of a PITA would it be to charge in Shekels? Does anyone do it?
Hi, thanks for sharing your experience.
Why do you say that moving the price up is hard to accomplish?
I understand your hesitation to risk friendships if the project went south, but I'm sure there could have been ways around it. There's a big difference between getting everyone to quit their jobs and move into office space together and what you end up doing.
I did the former and when we decided to call it quits, it definitely put a strain on my relationships with people I considered my good friends, but since than any future endevers have been part time with an agreement to split the profits and it has worked put much better.
If you found people you trusted who also share a common goal, I'm sure a solution could have been found to get X amount of people to work 10-20 hrs a week on NHProf without risking bankruptcy (or at the least sending you to the poor house). Because it's not that NHProf is a 15 million dollar idea (based purely on market size), so risking personal money for limited profits seems a bit odd to me.
I would also like to know about your decission to use WPF, the drawbacks you have found (or successes) and when you recommend it (if at all).
Germán: Sticker shock. A precipitous rise in prices tends to scare people away. In fact I am experiencing this problem in my own job. A gradual rise in prices is less likely to be noticed.
Joao,
It would be a real PITA, yes. I would basically have to roll my own payment system, and pay the currency exchange rates.
Re: Prices
The numbers thrown around in one of Jeff Atwood's blogs about Valve indicate some interesting trends in pricing. Valve made a ridiculous profit on Left 4 Dead when they knocked it down to 1/2 price (something like a 320% increase in revenue). So starting with a solid price point of $300 definitely sounds like a good idea.
Six months down the road after you've sold copies to the early adoptors and covered your costs, having an "NH Prof Weekend" and droping your price in half might be worth while.
"...I would pay them in advance."
It is always good idea to pay. As "workers for hire" they won't be able to sue you for part of your profit (if you have proper contract and NDA in place).
"Now, a quirk in my psyche means that I am willing to be poor, I am not willing to be in debt."
This should be the default behavior. Can't we just set this in human.config or something?
Time will tell how successful it will be by what kind of ROI you get. I would be interested to see what kind of person-hours went into it out of your own pocket. (not counting your own.)
I've got projects I'm trying to roll myself and it is very daunting to try and do part-time. So far I've refused the idea of going into debt. Married /w child + mortgage significantly limits my options but my goal is to get a proof of concept solid enough to demo, get buy in, and possibly fund at least short, dedicated sets of sprints, or additional developers to work with.
@Steve,
One change I made after having to fold my company was to change my philosophy on success. Before, I quit my job and worked full time on a project that looked like it would be successful, and then an outside market force basically destroyed it. It was definitely heartbreaking and as a previously mentioned, severely damage a very good friendship as an added "bonus".
So now I'm not looking to hit the home run anymore, because those simply require too much time and like you, I'm married, got a little rugrat and a mortgage to pay. Instead, I've turned myself into more a single hitter (for you baseball fans out there), and am now working on smaller projects involving just a few people who all share the same vision. It makes life so much easier when you know that feeding your family isn't tied to the success on those projects, instead any money made is gravy to go with my already very good salary.
Unfortunately, that means I'll never make an NH Prof product (in terms of complexity), but I'm fine with that.
Thanks for sharing.
Anyway, it's a pity that such a great product (it seems) tied to an open source project, isn't open source. I know that it would be much harder to obtain revenue if you opensourced it, but, how about open sourcing really old versions? I mean, if you just released 2.0, opensource 1.0. After 1 year, you release 3.0 and opensource 2.0.
This way:
You attract more "spare time" developers, which may end up buying the last version when they work for their "day job".
You get fixes for free that you can forward-port to your more bleeding edge versions.
Etc...?
Regards!
Andreas,
The model of having commercial tooling to support OSS is a fairly common one
I know, I'm just asking if it would make sense to be semi-open-source.
BTW, on a side note: don't use the "commercial" term when you mean "proprietary", please. FLOSS can be commercial.
Andrew,
I don't believe that semi OSS would be a viable model, no.
And I don't like the distinction between propriety and commercial, by and large, OSS is not commercial software. That is, it is not sold the same way that commercial software is sold. You can have business models on top of OSS, for sure, but they aren't the same
If you can have business on top of OSS, it's commercial, dot.
Comment preview