Building NH Prof: The background story

time to read 9 min | 1707 words

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.