September15

Gibraltar Software Acquires VistaDB

VistaDB, an Embedded SQL Database Engine Used By Thousands of .NET Developers Worldwide, Has Been Acquired By Esymmetrix, Developer of Gibraltar Software, a Suite of Products for Application Monitoring and Customer Support. – Read full press release

Welcome the new team

Please welcome Gibraltar Software as the new team that will drive VistaDB forward.  Kendall and the entire Gibraltar team know the product very well, they use it in their own products.  Very similar to how I took over VistaDB originally, they are now taking it on and continuing to develop the engine.  And most of the VistaDB customers know Gibraltar because that was how the CEIP program was implemented in VistaDB.

Gibraltar Software has officially acquired the VistaDB product line.  Read the full blog post about acquiring VistaDB on Gibraltar Software.  And look at the News and Events page.

Passing the torch

Since closing the VistaDB Software offices in Florida I have relocated to the Seattle area, and moved on to full time employment.  I officially resigned as the President of VistaDB Software, Inc in August.  The team that is running the Corporation has officially resolved to allow Gibraltar Software to acquire all the assets of the VistaDB product line.

Good match

I really feel this is a good match for both the Gibraltar team, and the VistaDB product.  Kendall and his team already have a very deep technical understanding of the product, it’s strengths and weaknesses.  And the product is already deeply embedded in their flagship product, so they have a vested interest in driving the technology forward.

Give them some time, be patient

The Gibraltar team is going to take some time to form a new strategy for the product.  Give them some breathing room to make those hard decisions, and be supportive of their bold move.  It takes a lot of guts to pickup thousands of developers as a small organization.  I know it will be hard, but let them think things through and announce them on their timeframe.  I expect to see good things from them in the coming months.

Links

Official Press Release about Acquisition

Gibraltar Page About Acquiring VistaDB

August18

More business lessons on pricing

You may want to start at the first part of this blog series.

Software Pricing makes no sense

Joel Spolsky did a great post about how software product pricing is insane called Camels and Rubber Duckies.  Go ahead and read it.  He will get you to agree with him, and then change the argument so you are left even more confused to product pricing.  It is a great article.

Extracting the Maximum Profit per User

In all business you want to extract the maximum profit per user possible.  If the user was willing to pay $15,000 for your software why did you sell it to him at $199?  Because attempting to get that type of per user maximum profit is really, really hard.  You will end up with an entire office of salesman who only take calls from people about their needs, and then try to get the most out of them.  In today’s age I don’t see how any software company can think that will work for long.  Eventually the pricing will get leaked somewhere, so people have a ballpark number.  Then if they come to you and get something totally different they will be miffed.

Big Companies should pay Big Prices

I have to agree with Joel Spolsky that having a Corporate edition at any price is a bad idea.  You will end up with a megacorp that should have paid you 10,000 developer licenses only buying that one corporate license.  You just lost a huge amount of money for zero gain.  Give them a deal, but don't give them the farm. 

We have some very, very large companies using VistaDB that only paid us around $5,000.  The costs to support such an organization are far more than what you made.  In a few cases the support was very low, but the company still got away with $150,000 or more in software for that one Corporate license fee.  Bad idea. 

It sounds good and you think you will get more people to step up into that bracket who maybe don’t usually buy at that level.  But it doesn’t work that way at all.  The people who really are in that bracket just end up getting the deal of century on your product.

Charge flat licensing, and corporate buyers should have to ask for a special price (minimum 50 units, or something like that).  Keep the pricing very flat, it makes all users think they are equal and simplifies things tremendously.

Flat Pricing with a twist

One trend I see a lot today with companies like Dev Express and Telerik is a flat all you can eat price that is supposed to be per developer.  But almost every company I talk to that uses their tools tells me they only bought one and all share it.  So those companies must be setting their prices high enough to cover this possibility, and then discounting to companies that really do buy the correct number of licenses.

Basically if your minimum price point is something you can still make a profit at you are in good shape.  It is when you are counting on scale, or making things up in volume you get into trouble.  Make sure your price is something you can actually make a profit on for each and every single customer.

StackOverflow has a site called Stack Exchange where you can host your own site likes theirs branded to be your own.  People freaked when they first saw the pricing.  It was explained as simple as you have to be able to make money on it from day 1, when economies of scale kick in (if they ever do) then you discount the software.  I like that model a lot.  Now I think they are taking on Venture Capital and trying to do some much bigger things.

August14

Small Business Lessons - continued

One commenter on a previous blog post said I was lamenting the death of the company through these posts.  That is not the point at all.  The point of these posts are to help other small businesses learn some of the lessons I learned the hard way, and to hopefully avoid making some of the same mistakes.

I don’t care if you have a tool that only 100 people a year will buy, or a tool for the mass market, all these same lessons apply.  And since over 70% of all VistaDB customers are also small business, MicroISV, hobbyists trying to make extra cash, whatever; I thought these lessons should be shared.

Updates can’t be free

VistaDB 3.2, 3.3, 3.4, 3.5, and even 4.0 were all free to subscribers.  500+ new features.  Each of them could have been a major release.  In fact there were so many features that they should have been new releases, each with upgrade fees associated.

Subscriptions failed

Instead I bumped minors and kept giving them for free as a part of the subscription model.  You have to be able to get that constant revenue stream, and upgrades are one part of that.  Subscriptions for something like this don't work.  4.0 was the first major upgrade, and as a result most users are still afraid of it and will not move.  If I had called it 3.6 they would have all moved to it without a second thought.  If I had trained users from day 1 that upgrades are all the same (minimal API breakage, always upgrading because of improvements and design changes) then things might have been different.

Subscriptions for minor builds would have been fine, but the major releases and additions should have generated a lot more revenue.  The 3.4 version cost us around $200,000 to produce, but almost no one had to pay for it.  Bad combination, then when they got it they stopped renewing their subscriptions as some critical “good enough” line had been crossed.

Small Upgrade Fees

If I had instead charged $99 to upgrade to each of those releases we would have generated 5 times the revenue than the subscription model.  That is a huge number.  Even if a major number of people didn’t step up at each one, they would have eventually wanted something in one of the later versions and had to pay for it.

The average VistaDB customer spent a whopping $450 over a three year period.  If we had charged $279 for the base, and $99 for each upgrade the number would have risen to $779.  Think very carefully about the long term sales and upgrade model you choose for your product.

Product Planning

Start a product plan, and what new versions you will release and when.  Then box in features for those versions.  Make sure you are always providing value for each release, but make sure you can also charge for that value.  If people are not willing to pay you for anything except your base product, then maybe the product is “good enough” and you should just sell it as is, move on to another niche.  Doesn’t mean you kill the product, but it just stays where it is. 

I look at Codebase as a good example.  It has been at 6.x for at least 10 years.  There is no reason to go beyond where it is today, it works and has the features people want.  Keep selling it and recoup your costs over the long term.

Unfortunately for us the ADO.Net provider space is not that stable.  New technologies, extensions, Entity Framework, LINQ, all have come out recently and you simply have to support them to be considered current in this space.  That really points to the fact that VistaDB is not a niche, but I will get into more of that in another post.

August13

Lessons learned - cont'd

See the first part of this series here.

Can’t include free support

Support cannot be included.  You can't afford it for a product like this.  It is too big.  Teaching ADO.Net, data binding, database design, etc is too much. 

On average I spent almost $1000 per user in tech support during year two.  That meant they were paying $250-500 per developer and we were losing money big time. 

Free tech support is an open invitation to every compiler error message "The error message says you are missing a file, did you check if the file exists?".  I had mistakenly thought that it would drop over time as documentation came up (2300 pages of help exist), and as the forums picked up.  It never dropped.  People who are solo coders want someone else to bounce ideas off, play out designs, etc.  They end up hitting whatever vendors they can get free support from in order to have that sounding board.  That is all consulting, not tech support.  Big mistake on my part.

Users often send us huge complicated TSQL statements “This doesn’t work”.  What doesn’t?  Bad results, bad data, doesn’t even compile?  Usually it comes down to the fact that they don’t understand what it does either “A third party tool built that T-SQL statement, so that is what I have to run”.  This lack of SQL knowledge hurts because we spent so very much time trying to teach people another language (TSQL).

LINQ would be better

I do think that LINQ is a better query language because if you get the language you are working in, then LINQ should be syntax for operating over result sets.  It is not hard to pick up, but it is a mindset change for those who have a good SQL knowledge.  Get over it, you will have to learn it at some point, and then SQL seems sort of quaint (like good old DOS machines).

Outsource it?

The most common answer I got was that US labor was too expensive to do this type of support, outsource to Bulgaria, Russia, India, like the big guys do.  Not my style. 

I am about as patriotic towards my country as you can get (USA).  I would rather have American programmers  and tech support, than outsource.  And to do that people have to be willing to pay a premium.  This is how the Telerik and DevExpress get away with their pricing.  Almost nothing is done in the US except sales and marketing.  Every question I ever got from them was in smaller countries in Eastern Europe. 

Users Fight Support Fees

Users will fight support fees every step of the way.  They will complain about how the docs should explain it to them (they usually do, but the user has not read them or things a help file search means looking on Google for their answer).

ADO.NET is not a niche

I now see what some of my mentors tried to tell me.  ADO.Net is not a niche, it is a technology platform from Microsoft that they just so happen to expose to third parties.  You will have no say in the direction, messaging, etc of your core product (being ADO.Net compatible).  More on this in a later post.

August12

Things I have Learned – Multi Part

I have been speaking with Peter Vogel (The VistaDB Story) for his blog on Visual Studio Magazine.  It is apparently quite uncommon for a company going through what we have to be so open and transparent about the process. 

I have been spending a lot of time lately packing, fixing up things around the house, etc (too much time to think).  I have a couple of things I would like to blog about.  These are things I would have done differently, or things that I would like to pass on to other small business owners. 

Micropreneur Academy

First, if you are a small shop that doesn’t have a lot of people to mentor you or bounce ideas I highly recommend you sign up and participate with the Micropreneur Academy.  This is a fantastic site for individual startups to learn, bounce ideas off others, find a mentor to help you through troubled spots, and lots more.  They have a very unique training system that breaks things up into lessons, and then activities for you to perform.  I have found them to be extremely high quality.

Totally Revamp Pricing

The pricing model is such that you MUST be able to make money on what you sell now, not next year.  You can't count on people to renew their subscriptions.  The entire subscription model was a huge loss.  As a small company you can't afford that type of mistake.  I was assuming (bad word) that 50% of people would renew for 2-3 years.  The reality is only 5% renewed.   You have to ensure that you can support yourself on the revenue model.  I was thinking economies of scale would kick in, they don't.  You can't count on it, so don't put it in.  Charge higher and get fewer customers you can afford to support better, rather than lower price with lots of customers.

Joel Spolsky has talked about this quite a bit, but when I took over the company there was a pricing model in place and I didn’t want to change it.  I should have done it from day one, and just lived with the dip in sales at that time.

Charge a Premium

You have to be able to charge what it costs you to build something, or you can’t stay in business long.  People always want the cheapest thing possible, then they expect Nordstrom level customer service. 

One customer complained loudly about how we didn’t solve his issue and he was charging his customer $500,000 for this project.  He only spent $299 with us, and apparently we were the key to what he did.  Why not spend some of that budget on consulting with us if you need something, I asked.  No way, he already paid for the product and should not need consulting.

To Be Continued

I have several more of these, I will continue them in future posts.

May20

Entity Framework Compliance VistaDB vs SQL Server 2008 R2

Entity Framework Shootout VistaDB vs SQL Server 2008 R2 We have spent a lot of time on our Entity Framework provider over the past 18 months or so.  There is a sample EF provider from Microsoft that illustrates basic points, and if you look at all the open source databases they pretty much all used the default code in their implementations.  But what if that sample code doesn’t implement something?  Or if it is just plain wrong?

Unexpected Results

I have to tell you we didn’t expect the results we got from this test at all.  We expected that we probably had some room for improvement and that SQL Server would ace all the tests.  Didn’t turn out that way.

Entity Framework Compliance?

The short answer to this question is that there IS NO compliance test to make sure your EF provider works correctly, or matches some baseline specification.  We really wanted some way to see if we matched up against the SQL Server provider, because we try really hard to be as compatible with SQL Server as possible. 

This post is about the journey we have taken so far in trying to figure out what that compliance might look like, how do we score today, what tests are missing, and what do others do to test their providers?

Standard LINQ test?

Well, the first thing I thought of was the LINQ 101 Samples from the MIX 2007 conference that Microsoft produced.  I have seen a number of other providers implement them as “proof” of their compliance, so I thought that would be a good starting point.  We found the 101 LINQ samples page on Microsoft, but most of them are not database related.

There is also a post on the ADO.Net Team Blog about 101 samples, but those are pretty old and still referencing Orcas as the target (Visual Studio 2008).  The most recent version of this we could find was on CodePlex under the ADO.NET Samples project.

More...

May18

Preparing an Entity Framework model for multi provider support

EDMX Northwind VS2010

I was recently tasked with creating a number of samples testing the compliance of both VistaDB and Microsoft SQL Server with Linq to Entity queries. Each sample tested if the provider was able to execute the query without error and then compare both queries to ensure that both providers returned the same results. To ensure valid test results I needed all queries to be executed against a single entity model for both database providers. Entity Framework was designed in a generic manner for this very purpose so my task should be trivial correct? In this article I will explain the complications I ran into during my task.

Generating the original model

My original Entity Data Model was generated from a VistaDB Northwind example which I had an identical copy of in my local SQL Express server. The process of generating a new data model will add a new appconfig file to your project if there is not already one present. If there is already an appconfig file present the data model will simply add a new connection string to it. Entity Framework connection strings always includes paths to the three files that make up the data model, the database connection string and provider information. The EF connection string that was auto generated for Northwind.vdb4 looks like this.

<add name="NorthwindEntities" connectionString="metadata=res://*/NorthwindModel.csdl|
res://*/NorthwindModel.ssdl |res://*/NorthwindModel.msl;
provider=System.Data.VistaDB;
provider connection string='Data Source=&quot;C:\Northwind.vdb4&quot;'"

providerName="System.Data.EntityClient" />

Things to note about the connection string:

· The path of the CSDL file */NorthwindModel.csdl

· The path of the SSDL file */NorthwindModel.ssdl

· The path of the MSL file */NorthwindModel.msl

· The database connection string Data Source=C:\Northwind.vdb4

· Provider Name System.Data.VistaDB

More...

April12

VistaDB 4 and Visual Studio 2010

Visual Studio 2010 - Gen EF 4Yes, Visual Studio 2010 was released today to much fanfare in Las Vegas. 

We of course had to immediately download it (along with what must be some major percentage of MSDN subscribers) and give it a test. 

Use Build 14 or higher

VistaDB 4.0 Build 14 works great with the VS 2010 Release.  Versions prior to this should probably not be used as there were some changes we had to make in order to get everything to work with VS 2010 in the first place. 

I have run through all of our NUnit tests in both .Net 2 and .Net 4 and all of them work correctly.  The Visual Studio plugins work, and the Entity Framework provider seems to be working fine as well.  The screen shot above is me generating a .Net 4 EF model on our Tickets Database.  (Note you can use the Include Foreign Key Columns only if you are using .Net 4)

More...

March29

Rounding floating point numbers

A lot of confusion seems to exist around the ability to round floating point numbers, I am going to try to shed a little light on this topic.  Bear with me, the math may get a little involved, but the answers will be worth it (I think).

Float is an estimated data type

Approximate-number data types for use with floating point numeric data. Floating point data is approximate; therefore, not all values in the data type range can be represented exactly.

MSDN SQL Float Article

Float is never an exact number.  The number is internally stored in more than one part and has to be processed into something we humans can understand.  That means something like 1/3 can be represented as 33%, but it is not actually a nice even number.

For the full mathematical treatment of why this is so, feel free to read the fantastic paper “What Every Computer Scientist Should Know About Floating-Point Arithmetic”.  Warning, that paper is not for the feint of heart, it has a lot of math behind it.

The important thing to pick up out of that paper is that all possible numbers between 0 and 1 cannot be represented in 32 or even 64 bits. In order to store a complicated number with decimal places it has to be estimated.  This estimation introduces Rounding Errors.  When you start with one small error, everything that comes afterwards is not what you expect, these types of errors lead to errors like the Patriot Scud Missile Error.

A C# Example of Rounding

If you run the following C# code you will see an object that has a result of 5.1400000000000006.  Even though it looks like op1 = 2.56 and op2 = 2.58.

double type example

double op1 = Math.Round(2.562, 2);
double op2 = Math.Round(2.577, 2);
double opresult = op1 + op2;

Set a breakpoint on the opresult assignment and look at the value.  Now go into your immediate window and type ? opresult.ToString() and you will see an answer that most people probably expect (5.14).  But put your mouse over the opresult object and you see the actual value.

Result of two doubles added

I know at this point it probably seems pretty confusing.  A double is what VistaDB internally stores a FLOAT column type.  Why?  Because they match pretty well in bit size and what they can do, but it does lead to an interesting rounding problem like the one above.

Lets take the same code with a decimal type, what changes?

More...

March03

Visual Studio 2010 RC Update

Visual Studio 2010 RC came out a few weeks ago, and the current VistaDB 4 build 12 does not work.  Build 12 obviously came out before the RC, so it was never tested on that release.

Updating for 2010 RC

The next VistaDB 4.0 build will be updated for Visual Studio 2010 RC.  I was actually of two minds of this issue. If the final (really final) build is only a few weeks away maybe we should just wait for that build.  Microsoft has broken ADO.Net plugins, EF, and several other things we need in EVERY new build of Visual Studio 2010.

Beta 2 left a bad taste

When 2010 Beta 2 shipped we scrambled really hard to get an updated build that worked.  We literally dropped everything else to just focus on those issues for about a week.  My thinking at the time was that if we found errors and got the bugs in quickly to Microsoft they would be fixed for the final release.  We opened 10 tickets with Microsoft on Beta 2 – ALL of them were denied as “too late in cycle to be fixed”.

More...