5 stages of validation for a startup business idea

Someone was asking Fiona and I about our views on validating an idea for a startup, they had been prompted by, amongst other things, posts on Pollenizer. Over lunch Fiona and I came up with our 5 stages of validation of a business idea for startups.

Our view is there is no such thing as validation of the complete business proposition until you’ve actually made a shedload of money, which thus provides the validation. It’s fine to test your ideas to a limited audience, or small groups of informed experts, but you are still guessing when you assert that because they all think it’s a winner, you can go slap a deposit down on your private island. Or super yacht  or whatever bauble you are planning to spend your billions on.

Stage 1 – Run the idea past domain experts

Talk is cheap. So talk a lot. Go find people in your market, buy them lunch, ply them with booze and sketch the idea for them. If they respond “fabulous” then great. If they express concern, then listen to their feedback and revisit your proposition. It doesn’t mean it’s a bad idea, you may not yet have learnt how to present it. Rinse and repeat.

Stage 2 – Build prototype MVP and run past potential users/trend setters

Make something people can try. Doesn’t have to be all the bells and whistles, but sufficient that a potential purchaser can gain a good understanding of how your product will work; what it might do to make their lives easier, save them money – showing them how you intend to solve their pain points is essential because people will pay you money to alleviate pain. Rinse and repeat.

Stage 3 – Get pilot users for prototype

Build out your prototype and find a small group of users/customers/suckers to use the product for real. Make sure these users are friends, family or people you have strong relationships with for when you have a catastrophic failure. Because you quite likely will. Rinse and repeat.

Stage 4 – Sell it to someone for money

Make a proper version, with the feature set you have distilled down as being the core proposition. Take money off someone for them to use the product for real in the big bad wide world. Then go sell it to another customer. And another. Nail down the sales funnel, process and cycle. Rinse and repeat.

Stage 5 – Sell it to shitloads of people for shitloads of money

Do Stage 4 but x 100, or x 1000, and preferably x 1,000,000.

Congratulations you have validated your business idea. You can now subscribe to Private Islands of the World.


Parse JSON with TSQL in a SQL Server Stored Procedure


I’m a big fan of JSON as a data exchange format, it’s lightweight, and every API worth playing with is usually JSON-friendly. So in idle curiosity I wondered if it was possible to parse JSON with TSQL, and guess what, someone else has come up with a way to do so.

A hat tip to Phil Factor (and RedGate for their great Simple Talk blog) for his article Consuming JSON Strings in SQL Server. Phil not only has example code to parse JSON into a table format, he shows you how to go the other way – create JSON from table output.

SQL Server does handle XML, but let’s be honest, it’s a pain in rear to use. But it’s all we’ve got natively with SQL, as Phil says:

TSQL isn’t really designed for doing complex string parsing, particularly where strings represent nested data structures such as XML, JSON, YAML, or XHTML.

You can do it but it is not a pretty sight; but why would you ever want to do it anyway? Surely, if anything was meant for the ‘application layer’ in C# or VB.net, then this is it. ‘Oh yes’, will chime in the application thought police, ‘this is far better done in the application or with a CLR.’ Not necessarily.

Sometimes, you just need to do something inappropriate in TSQL.

I gave the code a quick try parsing JSON into a table and it worked great.


How to locate text string in a SQL server object – stored procedure, view or function

Sometimes it’s handy to just conduct a simple search of your SQL server objects to locate a text string.

FROM sys.sql_modules
WHERE OBJECTPROPERTY(object_id, 'IsProcedure') = 1
AND definition LIKE '%text%'

FROM sys.sql_modules
WHERE OBJECTPROPERTY(object_id, 'isView') = 1
AND definition LIKE '%text%'

SELECT OBJECT_NAME(object_id),definition
FROM sys.sql_modules
(OBJECTPROPERTY(object_id, 'IsTableFunction') = 1 OR OBJECTPROPERTY(object_id, 'IsScalarFunction') = 1)
AND definition LIKE '%text%'

SELECT c.name AS ColName, t.name AS TableName
FROM sys.columns c
    JOIN sys.tables t ON c.object_id = t.object_id
WHERE c.name LIKE '%MyName%'

Testing web sites in multiple versions of Internet Explorer


There’s nothing more frustrating running  a web site only to receive complaints that it “doesn’t work” in some specific version of a browser. The major culprit almost always seems to be Internet Explorer – I’ll leave the philosophical debate why this might be the case for another day.

The issue came up for me because I was messing with a little personal project the other night that uses the Bootstrap 3 framework. I tried the page in IE11, with IE8 emulation, and the pages didn’t work correctly – despite being on a full size screen, the pages were acting all ‘responsive’ on me, and rendering the mobile versions. I then read somewhere that IE8 emulation on IE11 is not accurate – pretty useful! It seems IE11 in IE8 emulation mode does not respect conditional statements – which was what was messing with my responsive design. It was not handling the media queries include that’s needed to correctly render modern CSS in an IE8 browser.

Of course the problem here is I don’t have IE8 on a real machine available to me anywhere.

However, help is at hand, with thanks to Microsoft, which has now made available pre-packaged virtual machines for many combinations of Internet Explorer and Windows OS.

Providing you have one of the virtual machine software setups, for example Virtual PC on Windows or Parallels on Mac you are in business. I use Parallels and here are the VM configurations available to me – it’s pretty wide, there’s even IE6 on XP, but also IE8, IE9, IE10 and IE11 on Windows OS  including Vista, Windows 7 and Windows 8.

Screen Shot 2014-03-07 at 8.03.59 AM

Downloading and setting up the VMs is a snap, within a few minutes I had a fully functional version of IE8 running on Windows 7 in a window on my Mac – and 10 minutes after that had diagnosed the problem with my web site and applied a fix. Note, if you are using Parallels on Mac there is some helpful information on the Parallels web site about configuring the VMs, starting with the fact the file you download has the wrong file extension – you need to manually update the file name before Parallels will recognise it as a VM.

An item with the same key has already been added (SQL Report Services)

Screen Shot 2014-02-26 at 7.42.34 AM


I was creating a new report in SQL Reporting Services, I pasted in the SQL query for the report and up popped the message “An item with the same key has already been added”.

Turns out I had two columns with the same name – which as always with these error messages, begs the question, why not just say so!

Copy Azure SQL Database to local machine (SQL 2008 R2)

You would have thought in these days of point and click a simple task like copying a database from one place to another would be a walk in the park. So when I wanted to take a copy of a SQL database from Azure and move it to my local machine, I thought it surely would be straightforward. It’s not. Here’s what I came up with:

In Azure make sure you have a Storage account set up, with a container inside. My container is called ‘files’.


In Azure go to your database. Click the Export button down the bottom.


A new window will pop up. The file name will probably be pre-filled. Select your blob storage account (if you only have one then it’s already selected). Select a container (mine is ‘files’). Enter your SQL Server log in name and password – these are the credentials you set up when you added the database. Click OK and the export should start – you’ll see the status down the bottom.


Once the export is done, you can click to view your Storage container, and you should see the export file there.


The trick now is to get the file from Azure to your local machine. I use Azure Storage Explorer, it’s a free download. Download the file from your container.


If you have SQL Server 2012, then you are home free, because you can import the BACPAC file in SQL Management Studio. Right click on the Databases folder under a server in the Object Explorer and choosing “Import Data-tier Application.

If like me you are on SQL Server 2008 R2, you need some help.

Create a new blank database on your local machine.

Go to  http://msdn.microsoft.com/en-us/jj650014 and install the SQL Server Data Tools for Visual Studio 2010. After install go and find SqlPackage.exe, I located it in C:\Program Files\Microsoft SQL Server\110\DAC\bin. Open up a DOS prompt and use the following command:

SqlPackage.exe /a:Import /sf:c:\Desktop\FILENAME.bacpac /tdn:DATABASENAME /tsn:SQLSERVERNAME
  • FILENAME.bapac is the file you downloaded from Azure, whereever it is located on your machine.
  • DATABASENAME is the name of the new blank database you created a minute ago.
  • SQLSERVERNAME is the name of the SQL server on your local machine.

I followed these steps, albeit for a fairly small file, and it worked perfectly.

And this is why the banking system in the USA sucks – $40 fees to transfer $150 between two accounts at the SAME BANK!


I’ve been following with interest stories in the media about the US banking system getting its act together and introducing Chip and PIN security for credit cards. A credit card transaction protected by a chip (embedded in the card) and PIN (a PIN as opposed to a signature) is a much much more secure payment, and far less open to fraud.

I read an article today headlined “American businesses are holding credit card security back“, which actually seems to be more about how the US banking system is holding it back – they are pushing for Chip and signature, a lower grade of security. I particularly thought this quote from the American Bankers Association was a good indicator of the banking sector’s resistance:

“You’ve got both banks and retailers struggling with how to find the right mixture of providing security to customers, yet also the convenience that American customers expect.”

Their argument is consumers don’t want another PIN to remember. What a load of tosh – for most people this is a furphy. I have a Visa card, that is also my EFTPOS card. It’s the same PIN. Nothing more to remember. And is anyone seriously suggesting that signing is faster than tapping in a four digit number?

We’ve had Chip and PIN in Australia for quite a while – along with contactless payments like Visa PayWave, where you just wave your card at the payment terminal for transactions under $100. Terrific technology that saves heaps of time.

Along with card security, it would be nice if the US banks sorted out the fundamentals. Take my experience this week. Someone in the USA owed me $150. Normally he would wire payments to my Australian account, but that costs him $35 for the transfer fee, which seemed silly for $150. The money was sitting in his Bank of America account, so I suggested he just transfer it to my Bank of America account. I never have much money in there, but it’s useful to have a few dollars lying around to cover Netflix and iTunes (for the US iTunes Store).

Here’s where the lunacy begins. My friend sends me the money. The bank charges him a transfer fee of… are you sitting down with a stiff drink in one hand … $US25. I then log into my account and, as you can see from the above screenshot, I’ve been charged a $15 wire transfer fee. A total charge of $40 to move money from one savings account to another WITHIN THE SAME BANK!

Patently ludicrous. If this was Australia, I could have logged into my National Australia Bank app, typed in someone else’s NAB account, and sent them the money, with no fees, and the money be immediately available to the receiving party (it takes a two or three days for Bank of America to make the cash available).

It’s no wonder that disruptive startups like Square, Stripe and others are tackling payments and banking in general. I’ve heard loads of excuses – oh, the inter-changes between the banks in the US are so much more complicated; or, there are multiple funds transfer exchanges; or, there are so many players in the market it’s difficult to gain cooperation and agreement. Whatever. But given the industry association that claims to lead policy for the US banking system itself seems resistant to introducing change, I suspect the main impediment is that more convenience for customers might lead to less price gouging opportunities for all the players with their snouts in the financial services trough.

Yet it seems to this unqualified economist that addressing fundamental structural weaknesses in an economy, such as the ease and free flow of payments, surely must be a driver for growth and expansion. Which then suggests the US banking system is happy to favour short-term profits over long term economic and social benefits. Now where have we seen that before? Oh yup –  when they buggered the home mortgage sector and kindly bestowed the GFC on us all.