How we made the freemium model work

A lot has been said about the dangers of a freemium plan for startups and new products. Most of these plans basically drain resources at the start of a new business (at a moment when they’re most needed). It also takes a lot of time for staff to handle support requests with customers using the freemium plan because it’s the first time users are experimenting with the product and it’s natural that they need help.

But in our case, we have a different approach. In our product, LicenseSpot, the first available plan is a free. The larger plans vary by the number of activations allowed. The product allows users to protect .net applications, in general, from being illegally copied (pirated) using a license scheme with public/private keys. LicenseSpot takes this one step further by providing online activation.

This first plan has 10 activations included for free and it’s providing lots of value to our customers. But the freemium is also converting customers because:

At some point the plan ends.

With only ten activations allowed, customers can only protect their own products with ten customers (or licenses). After that, they need to upgrade to a paid plan. With this, we take care of the issue about users staying forever in the free plan.

Testing time

With ten activations, users have enough resources to test LicenseSpot. This gives them a sense of how it works. Also allows them to integrate their products with ours.

Because we know testing and integration it’s important, if customers have exhausted the number of activations and need more, we provide an extra ten activations so they can continue with the testing.

Market testing

Also, when customers have reached the allowed ten activations in the free plan, it’s very probable they have paying customers proving their applications will sell. By the time they upgrade, they already have revenue coming in which makes it safe to invest in a better plan.

At this time, this configuration has worked for us pretty good. When we see customers upgrading from the free plan we’re sure they’re already selling the app and have found value using LicenseSpot.

Do you know of any other techniques to make freemium plans work?

Doing .NET licensing for free

Today we’ve launched a new site that provides information and free code samples on how to integrate licensing into your .NET application.

The site, .NET Licensing, contains tutorials on how to create key pairs, create license files how to validate the files inside an application.

We’ve also published the source code of an admin application to create the license files and is available on Github for download.

Just visit the site and let me know what you think.

Desktop software is not dead

(This is a cross post from the LicenseSpot blog)

Recently Andy Brice from Successful Software posted a very nice article asking if desktop software is dead.

I personally think that is not dead and that is still very alive. I know inexperienced users that are running installations on their local computers to install their favorite software. And it’s very easy to understand from the user point of view as this the oldest form of applications that we know. The most used software apps, Word, Excel and PowerPoint, are all desktop products.

Continue reading

Having a development framework

When developing software you’ll find yourself sometimes repeating the same lines of code between projects to accomplish similar tasks. When this situation occurs, you probably can build frameworks that can be reused later on projects.

The problem with developing frameworks is that it takes more time to build them and sometimes the project constraints don’t allow investing time in this type of issues.

Frameworks are generally composed of objects and libraries that can be used to extend a new set of objects, removing the need to rewrite code. Also, when changes are needed in these extended objects, is basically simple to add them because the framework handles most of the logic. Also fixing bugs is easier as a fix in the framework, which means all extended objects are fixed.

In our case, we develop all our products and projects on frameworks developed during the years and using freely available ones.

Data layer

Our data layer is completely automated. I really don’t remember the last time we had to write a SQL statement to access the database.

First we started using Gentle.NET that was very powerful at the moment. It allowed us to create tables, views with an easy object representation. It also provided CRUD methods out of the box.

Later we migrated to Enterprise Framework that provided a similar set of features but performance was even better and the possibility to use LINQ gave us a lot of flexibility for writing custom queries. Adding columns to tables is easy as adding the property to the data objects. The whole application then notices the changes and continues working.

The business (or logic) layer

For this one we created a custom framework. We have a set of classes that automatically handles CRUD operations with objects in the data layer. On all our products we have a set of separate objects for logic and data. This gives us lot flexibility when making future changes.

This business layer also includes functionality for getting a list of objects and some basic filtering methods for these objects.

Authentication and authorization

We have a set of classes that handles authentication and authorization at the object level for users. Each object checks by itself if the current user has permissions to perform the selected operation. This verification is even made in relation to the object and user. In essence, is the current object owned by the current user and then can the current user perform the actual operation.

All this is a part of a framework and objects get the functionality by inheriting from the framework objects. No need to code and recode again these validations.

Email handling

We have a container that has all email templates configured and just need to plug it into the application for it to work. We just need to configure the content for the emails and the events the application will respond to for sending the emails (user registered, forgot password, etc.).

All SMTP send and receive is already coded.

Do you think frameworks can help reduce development time?

What ever happened to SDKs?

Does someone still remember what SDKs are? Software Development Kits? They were really popular when new technology was released. They had a bunch of information on how to use the technology, documentation and lots of samples in different scenarios.

Today, because most of new technology is released as web applications, the need for SDKs have diminished. Now websites provide a variety of REST APIs that allow third party developers to connect their applications to these services.

All documentation about these APIs resides on the company’s website. Instructions on how to connect and authenticate are also in documentation pages. Really good tools have been built on Javascript to document these apis so developers can traverse them and better learn.

But very few companies are providing working samples of applications using these REST APIs. Basically, they leave the developer to figure out how to use them from the documentation and then build the application. Wouldn’t it be easier and better to provide SDKs that have working samples of application and pre-built utilities we can use to make development faster? They could also provide these samples in different code languages so they’re available to all developers market.

When we launched LicenseSpot, we provided samples on how to integrate the licensing component into applications but never provided a formal SDK. Since three months ago, we published an SDK with refined samples, in different environments and in multiple languages. Also the SDK includes a component that basically automates the interaction with LicenseSpot and utilities with predefined methods for calling our REST API.

This translated into big success for us. Conversions went up and we started getting more advanced and targeted questions from potential users. Because of this, we now invest more time on making the samples in the SDK better, add more platforms and languages.

It would be great if we could see more of this replicated throughout the industry. It’d increase developer’s productivity dramatically and web application owners would benefit by having more application integrating with their services.

Generating serial numbers and keys in C# and VB.NET

Using serial numbers is the most common way to unlock applications in the market today. Microsoft made that part of our life (us developers and isv) easier using serial keys all over their product lines. This has made final users and customer familiar with the term and how the should use them to activate their applications and that’s why we use them in our .net licensing product LicenseSpot.

One aspect to keep in mind about generating serial numbers is to keep them unique. In the function below we’re using GUIDs to generate serial numbers as we know for sure that they’re unique.

The function basically takes a guid string and just take the desired length for the key. It returns a serial number with the format: XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXX.

public  string GetSerialNumber()
	Guid serialGuid = Guid.NewGuid();
	string uniqueSerial = serialGuid.ToString("N");

	string uniqueSerialLength = uniqueSerial.Substring(0, 28).ToUpper();

	char[] serialArray = uniqueSerialLength.ToCharArray();
	string finalSerialNumber = "";

	int j= 0;
	for (int i = 0; i < 28; i++)
		for (j = i; j < 4 + i; j++)
			finalSerialNumber += serialArray[j];
		if (j == 28)
			i = (j) - 1;
			finalSerialNumber += "-";

	return finalSerialNumber;

Below the VB.NET code:

Public Function GetSerialNumber() As String
	Dim serialGuid As Guid = Guid.NewGuid()
	Dim uniqueSerial As String = serialGuid.ToString("N")
	Dim uniqueSerialLength As String = uniqueSerial.Substring(0, 28).ToUpper()

	Dim serialArray As Char() = uniqueSerialLength.ToCharArray()
	Dim finalSerialNumber As String = ""

	Dim j As Integer = 0
	For i As Integer = 0 To 27
		For j = i To 4 + (i - 1)
			finalSerialNumber += serialArray(j)
		If j = 28 Then
			Exit For
			i = (j) - 1
			finalSerialNumber += "-"
		End If

	Return finalSerialNumber
End Function

Why SaaS applications should provide pricing information

Everyday new online services are launched and must of us don’t even notice but a few of them. I’ve found that the majority of these few start with a freemium model or a beta test mode to attract users and subscribers. I don’t find anything wrong with this, but personally, the first thing I do when exploring a new service is to find the pricing page to check if I can afford it.

For me, there’s no personal benefit to subscribe and start using an application day on and day off, configuring the service, entering my data, so when the owners think they have a large customer base, publish the pricing information and I end up without being able to use the application. It has happened to me before. Now, when I can’t find the pricing information, I just don’t sign up and let it pass it by.

Why everyone should you have a pricing model:


Even if you need a year for beta testing your product, at least publish how you think the business will make money. It shows potential customers that the company has a plan and also, when the time comes, you’ll know how much you’ll need to pay. Also the company has (or at least has think of) a business model. Most start ups just die because they can’t find the right model to generate cash flow. This gives some kind of assurance to customers.

The right customers

Every potential prospect subscribed has even more probability of becoming a customer when the application exits the beta testing phase. You can increase conversion even more by giving a discount to beta tester for their efforts.

One of the first thing we did with LicenseSpot, our license and software protection service, was to define a pricing and a business model and then built the website and all collateral information. Even though we’re live, any new prospect can check how much the service is worth and if it fits they’re pocket.

Do you provide pricing information on you web applications?

Should there be a partnership or a buyout between mobile operating systems?

A lot has been written about how the top three mobile companies should configure themselves. I’m talking about Apple, Google and RIM. Which one is better and which one is worse, who should die first and who’s second.

I think all those views (although have some degree of veracity in them) are too absolutist in the sense that things are not black and white. But also, it depends on the point of view of each person and their own experience.

All platforms have their own strengths, if they didn’t, neither of them would reach to the place they’re right now. Some value is the end user getting from them.

Here’s what I think in short words:

Blackberry OS

Is the oldest of the big three (even though Windows Mobile has a long history) but that doesn’t make it a looser. Been the oldest brings a lot of experience to the table. One of the biggest and strongest fields of Blackberry is their enterprise market capabilities. It has lots of good features built in that satisfy big companies like the White House. Lots of features has been incorporated into Apple’s iOS trying to get into this market, but adoption has been slow. As I said in the beginning, Blackberry has lots of experience in this field.

Besides been a leader in the enterprise market, Blackberry has fair good market share of the consumer market. This comes by a good reason: there are features that millions of people feel attracted to when buying Blackberry, one of them being the BB Chat. See as this simple and common capability, available on the Internet since its own birth, is one of the top features. Again, experience. I still don’t know why Apple didn’t launch the first day with a feature like this.

Apple iOS

It has a domination of the consumer market. The ease of use makes it a winner between people that have never had a smartphone.

Also, one of the biggest advantages is their App Store that has thousands of good applications. And more coming in with innovative features. This makes it a winner for usability and in the area of solving daily issues.

Adoption in the enterprise market has been slow, advancing a in small steps, but it’s coming.


Also the usability here is a big winner. A fast growing market of applications makes it look interesting against Apple and Blackberry.

The biggest advantage of Android might be their price. As it’s an open source platform, carriers and phone makers don’t have to include royalties in prices bringing the phone’s total cost of ownership down.


I think all three has their own pros and cons. Neither of them should abandon their technologies for adopting the other. They have their own bright spots.

Even more, there could be some partnership between them if they want to consolidate and reduce costs. For example, a partnership between Android and Blackberry could integrate Blackberry enterprise features into Android giving it the experience and technology know how to become a unique platform that combines consumer and business capabilities.

Who you think should partner with who?

Upload multiple files using jQuery and ASP.NET

A few weeks back I needed a control that allowed me to upload multiple files to a SQL database going through an ASP.NET ashx handler. Also, the whole control needed to be implemented client side and the best option if using jQuery.

I spent lots of time trying to find some good control that didn’t used Flash. Most of the controls available out there were pure based Flash applications or a combination of jQuery + Flash. None were pure jQuery and supported the option of multiple files. Then I found Andrew Valums jQuery upload control. It was pretty easy to install and configured. The only drawback is that uses iframe for uploading the file, but this is transparent to the end user, so I decided to give it a try.

Here’s how it works:

Download the control

Go the website and download the control. Keep in mind there are two versions: one GPL and another one with the MIT license. I went with the one with the MIT license. You can download it here.

Place the control on your page

Use the following HTML code to place it:

<div id="uploadRegion">
<input id="button3" type="file" />
<p>Uploaded files:</p>
<ol id="infoUploadedFiles" class="files"></ol>

jQuery code to create the control

new AjaxUpload('#button3', { action: 'filehandler.ashx',
name: 'myfile',
data: { '' },
onComplete : function(file, response){
var fileResponse = $.parseJSON(response);


ASP.NET code to handle and receive the file


HttpPostedFile file = context.Request.Files[0];

string name = Path.GetFileName(file.FileName);
string ext = Path.GetExtension(file.FileName);

byte[] fileContent = new byte[file.ContentLength];
file.InputStream.Read(fileContent, 0, file.ContentLength);

After receiving the file in a byte array proceed to save it to the hard disk or a database, as needed.

Transalating a webiste automatically based on users IP address

Why is it that sites that provide localization always try to assume that the best content for you is the one based on your location?

Most people sometimes aren’t in their hometown. They could be on a trip to Asia or the middle east, but this doesn’t mean that when researching for a site or information, they want to see these sites in mandarin or in Arabian.

I may say that the majority of users try to look information first in English because the majority on sites are already in this language. You have more probabilities in finding what you need when querying in English.

What I’m saying is, don’t try to provide information on your site with automatic translation based on the visiting’s user IP address. Give the information in your primary language, be it English, Spanish, French or Portuguese and then give the user the option to select the language in which they would like to see the website and save that on cookie or the user profile for when they comeback. If the user queries google in English and when it enters your site it is then automatically translated to Spanish because the user happened to be in Cabo for vacations, he might leave, inferring the original language of the site is Spanish.