LavaBlast Software Blog

Help your franchise business get to the next level.
AddThis Feed Button

FranchiseBlast Helps Boomerang Kids Franchise Expand

clock June 25, 2014 13:39 by author JKealey

FranchiseBlast has been featured in a recent case study by Intel Canada.

Large franchises have sophisticated software to help franchise owners manage sales, order product, control inventory, and manage other aspects of the business. Until recently, these systems were too expensive for smaller franchisors to implement. FranchiseBlast, a software solution developed by Gatineau-based LavaBlast Software Inc., makes available the management, inventory and purchasing tools a franchisor needs, at a cost that growing franchises can afford, while providing IT support to keep systems running reliably.

Read more here!

Gotcha: String or binary data would be truncated.

clock March 18, 2014 11:42 by author JKealey

I was playing in SQL Server this morning, trying to fix an odd bug. Took me a while to find it and I thought I’d share this tidbit with you.

Here’s an overly simplistic representation of what was causing the “String or binary data would be truncated.” error message:

   1:  declare @where nvarchar(max);
   2:  -- assume something put a large string in @where (over 8000 characters). 
   3:  declare @sql nvarchar(max);
   4:  select @sql = replace(‘select * from table1 where {0} order by column1 asc’, ‘{0}’, @where);
   5:  exec (@sql);


The reason I experienced this error is because of how replace handles nvarchar(max). By explicitly casting the first parameter to nvarchar(max), the error is resolved.

   1:  declare @where nvarchar(max);
   2:  -- assume something put a large string in @where (over 8000 characters). 
   3:  declare @sql nvarchar(max);
   4:  select @sql = replace(cast(‘select * from table1 where {0} order by column1 asc’ as nvarchar(max)), ‘{0}’, @where);
   5:  exec (@sql);


From the documentation:

If string_expression is not of type varchar(max) or nvarchar(max), REPLACE truncates the return value at 8,000 bytes. To return values greater than 8,000 bytes, string_expression must be explicitly cast to a large-value data type.

Lessons learned during 48hrs in the Valley

clock December 11, 2013 10:00 by author JKealey

We recently attended the C100's flagship event named “48 hrs in the Valley” and want to share some key moments, lessons learned and observations. The event was filled with so many activities that it is difficult to distill everything into a concise picture but we'll give it our best shot. Before we get started, we'd like to take a moment to thank the C100's organizing committee for their great work. Coordinating this type of event is very challenging work and we appreciate it the effort put into it.

Key Moments

Picture by Kris Krüg Rob Burgess' insightful talk is the first things that come to mind when looking back at the event. Coming from a web design & development background, it was awesome to hear the inside story behind Flash. After becoming CEO of Macromedia, Rob had the foresight to pretty much cancel all development on the company's main revenue source (tools like Shockwave) and re-orient resources towards building products for the web (aka Flash). Given how drastically the industry has changed, this was the right decision but the amount of guts it took to perform this pivot is mind boggling. Pivots in a startups are difficult, but completely re-orienting a successful & profitable company with tons of money in the bank is much more challenging.

We also were fortunate to be matched with Debbie Landa for one of our one-on-one mentoring sessions. What started out with “I know nothing about franchises” concluded with a plan to revolutionize the franchise industry. By making parallels to the venture capital world, the future appeared obvious to us and we validated that FranchiseBlast's in a great position to completely alter the industry. Debbie had the energy and big vision we expected to find in the Valley. Combined with the open-mindedness to learn new things and the creativity required to challenge assumptions, these traits guarantee success regardless of your geographical location.

Being a bootstrapped startup not looking for funding, pitching to venture capitalists was also an interesting change of pace. The dynamics of each pitch was completely different. The first presentation was made to an analytical VC with a great poker face. Razor-sharp questions followed in quick succession to lead up to very insightful comments. It was the toughest meeting, but also one of the most valuable. Our second presentation was characterized by stellar flow: each slide was followed by a question answered on the next slide. It was a short meeting due to time constraints, but even in this short blitz one could sense the intellectual alignment. It's great to work with people with whom you can have fast-paced exchanges. Our third pitch slowed things down as we were given twice as much time as allotted and ended up being a conversation more than a pitch. This VC had domain expertise not found in the other meetings which lead the discussion in a completely different direction. The final pitch ended up being the easiest (emotionally) with great validation but few challenges. Putting myself in their shoes, though, I understand how gruelling it can be to deliver insights which can push companies to the next level, pitch-after-pitch.

Finally, I enjoyed the “both sides of the deal” talk where a startup and their VC discussed their deal from different perspectives. Not only was it extremely funny, it was also very insightful. Rather than discuss the specifics, let us dive into key lessons learned – some of which emanated from this talk.

Key Lessons Learned

Picture by Kris Krüg Although we learned a lot during these 48 hours, we didn't necessarily learn anything explicitly taught. These lessons learned materialized after talking to enough people in Silicon Valley and reflecting on their thought process.

First, the importance of shared vocabulary cannot be overstated. In the software world, best practices are often boiled down to design patterns. When two software engineers have internalized concepts behind these patterns, they can propose & refine software architectures very efficiently. The same shortcuts apply to everything in the Valley: software, finance, companies, people, eras and methodologies. While we do not personally stay abreast of every hot new startup mentioned in tech news and feel it gets in the way of getting things done, we acknowledge that shared vocabulary is critical. In particular, being aware of some of the key events which shaped the technology industry in the past and general knowledge of current trends helps us align ourselves with success and avoid repeating past failures.

Furthermore, having intimate knowledge of the people behind those events is key. In our early days, we saw networking events as a chance to meet interesting people. We went into an event not expecting much and that's precisely what we got: nothing much. However, we unknowingly started to build a network of peers and, after a few years, we're now connecting some dots. We can start transposing our concrete needs onto the desire to meet concrete individuals – or at least give our interlocutor enough information to help guide us to a person which meets our criteria. Although you may randomly bump into the perfect contact, it is much more efficient to do your homework and seek out individuals yourself. As an aside, we purposefully dedicated some time during the event to plugging other local startups (Exocortex, Shopify, Project Speaker, etc.) when meeting relevant individuals because we firmly believe that we're not only founders, we're ambassadors for other startups in our community. “A rising tide lifts all ships”, as Scott Annan often says speaking to the Ottawa startup community.

Picture by Etienne Tremblay We also discovered that the more successful your company becomes, the lonelier it becomes for the founders. By this we don't mean people start ignoring you or despise you to the points of throwing rocks in your direction. No, in fact, we mean that the essence of loneliness is derived from the fact that you can't talk about your fears, successes, challenges or motivations with anyone else. To help illustrate this fact, visualize entrepreneurship as a pyramid of thousands of layers where the dimensions of each layer represents the number of likeminded individuals & companies. When you first start out at the base, pretty much anyone can give you valuable business advice. However, as your business grows, the value of this advice diminishes. This causes you to look elsewhere (higher-up in the pyramid) for high-impact advice, but it becomes exponentially more difficult to find it. As an example, when you've raised venture capital, you may find that there is a limited pool of likeminded entrepreneurs in your city with whom you can discuss your challenges; this forces you to branch out. We believe the same logic holds for every major transition in your company's lifecycle, from your first part-time freelancing gig to IPO to managing a trillion dollar company. In the technology industry, we believe the entrepreneurship pyramid reveals Silicon Valley's greatest asset for founders: a greater density of likeminded individuals to accompany you in your journey.

Key Observations / Thoughts

  • If you wish to raise capital efficiently, you must know which funds are aligned with your business model, which ones of those are at the right place in their funding cycle and which individuals within those funds you should talk to.
  • If you wish to network efficiently, you must know what you're trying to accomplish, which companies have done it before and which individuals within those companies are responsible for the behaviour you wish to emulate.
  • Company culture is important for all businesses but even more so for companies undergoing hyper-growth.
  • Toughest thing to do as a CEO is terminating someone who's gotten you to where you are now but hasn't evolved.
  • You will outgrow the impostor syndrome.
  • Our peers during the 48hrs event were there to get things done. Everyone is independent and focused. This may come off as arrogance; break through the shell.
  • Behind every success story are individuals who are just like you.
  • The C100 organizing committee sets up the context, but it's up to you to leverage the opportunity to reach your goals. Sink or swim.
  • Once you board the funding train, you're not getting off.
  • The only way to minimize risk is to use pattern recognition. (Hiring, investing, sales, growth, etc.)
  • Because of the importance of pattern recognition, most people follow. (Many investors chasing the same startups, etc.)
  • Fitting the right patterns increases your likelihood of success. Revolutionary ideas must break the appropriate patterns, but not all of them. Finding the perfect balance is extremely difficult.
  • Pick good lawyers; vet them.
  • Business is not a zero sum game. Find a win-win agreement.
  • At lastly, a tweet I saw while leaving California: Help others. Luck favours those with good karma.

FranchiseBlast invited to the C100’s 48hrs in the Valley

clock November 20, 2013 20:15 by author JKealey

48hrs 48hrs in the Valley is the C100's flagship mentorship program put on in conjunction with the Canadian Consulate of San Francisco and Palo Alto. Twice a year the C100 invites 20 of Canada's most promising startups to the Silicon Valley for two days of mentorship, workshops, investor meetings, strategic partner visits and networking.

FranchiseBlast is proud to have been selected for this exciting event.  We started the company six years ago, wrote our software startup lessons learned series, and have been continuously improving our product and our company since then. Our focus has increased and so has our drive. It’s been a great ride to date and we know we’re at an inflection point in the company’s journey.

Once the dust settles, we’ll collect our thoughts and write about our experience, just like we did for Ottawa’s Lead To Win program.

In the meantime, we would like to remind you that we are actively hiring. Join us.

ASP.NET translation tools & gotchas

clock March 8, 2013 11:35 by author JKealey

We’ve recently translated one of our applications and thought we’d share the tools & techniques we used. In particular, every time we perform some ASP.NET translation, we hit a few gotchas. We kept facing the same problems every time we worked on translation, so we figured we might as well write everything down in a post for everyone’s benefit.


Because we’re translating an ASP.NET WebForms application, the main process is to open an *.aspx or *.ascx, switch to Design view, and perform Tools –> Generate Local Resource. This generates a *.resx file and adds the relevant markup in your source file. Tools are available to perform the actual translation and create the *.resx files in other languages.

The core issue here is that you need to perform this operation for each individual file. Potentially thousands of times and/or until you go crazy. (Personally, I find it frustrating that bulk resource generation is not a core VS.NET feature. )


Step 1 - Bulk Generate Local Resource

Instead of wasting our time opening each individual file, we found a macro on this forum. The macro does not run in VS.NET 2012, so we loaded up our old VS.NET 2010 and ran it from there.

The macro wasn’t flawless – it sometimes randomly crashed after processing files for half an hour. Deleting Visual Studio’s *.suo file and restarting it seemed to help.


Step 2 - Realize that VS.NET corrupted your files

I assume one of the reasons bulk resource generation is not a core VS.NET feature is because the feature is (in addition to being slow) partially broken.

Gotcha: Inline scripts/comments are sometimes deleted.

At a high level, any script blocks in your *.aspx/*.ascx files are vulnerable to deletion. Generate Local Resource will simply strip them out if they are contained in an <asp:UpdatePanel …/>.   We filed a bug on Microsoft Connect which was not deemed important enough to be fixed.

This is appalling because it will introduce pernicious bugs in your application that only show up at runtime, if you don’t pay close attention to each and every individual file.

For example:

<script>alert('<%="Some Constant" %>');</script>
<script>alert('<%= btnSomething.ClientID %>');</script>
<%-- <asp:Button runat="server" id="btn" Text="Some button that I may need to re-enable later"/> --%>
if (Request.QueryString["test"]=="bye") 
    Response.Write("Goodbye World"); 
    Response.Write("Hello World"); 

Would become the following, after Generate Local Resource, because everything



Admittedly, some of the inline code above is bad practice.  However, the silent deletion causes needle-in-a-haystack type bugs at runtime.

We decided to remove all of our inline code blocks from our code to avoid having issues during local resource generation.

Gotcha: culture=”auto” and uiculture=”auto” is added to all *.aspx files

These values, added in the *.aspx header, force the page to change culture based on the browser’s settings. In our application, this was not desirable as it by-passed the logic defined in our Global.asax file. (Our users can change their language via the web applications itself, not via their web browser settings.)

For more information, see this post by Rick Strahl.

Gotcha: Nested controls can be problematic

When trying to localize a LinkButton containing an Image and literal, the Image will be dropped.

<asp:LinkButton ID="lnkHello" runat="server" OnClick="lnkHello_Click">
    <asp:Image ID="imgEdit" runat="server" ImageUrl="~/images/icons/edit.gif"></asp:Image>


<asp:LinkButton ID="lnkHello" runat="server" OnClick="lnkHello_Click" meta:resourcekey="abcdef">    


To solve this issue, the nested controls must be separated.

Gotcha: Ajax:Accordion breaks during Generate Local Resource

If you are using <ajax:Accordion ../> from the ASP.NET Ajax control toolkit, be aware that it will be corrupted after generating *.resx files. The fix is simple: delete the erroneously added Accordion Extender.


Step 3 – Extract other hardcoded strings.

Your *.aspx/*.ascx files and your *.cs files may contain additional strings which must be extracted. Back in 2008, we had create a Macro to help with this process but in this iteration, we simply used JetBrains ReSharper. The VS.NET plugin made it easy to find strings which had not been extracted, and push them into *.resx files.  ReSharper is jam-packed with other useful features, but we’ve found that it does have a significant impact on performance in our solution.


Step 4 – Perform the actual translation

Back in 2008, we released a web application to help translate RESX files. We’re no longer using this application – there are better options out there. We picked Zeta Resource Editor and it worked nicely.


The tools available today are much better than they were five years ago, but one piece of the puzzle (Generate Local Resource) is still far from perfect. We’d love to see an improved version (in either VS.NET or ReSharper) which would:

  • Not delete inline code or comments inside UpdatePanels
  • Would be configurable (insert culture=”auto” everywhere? etc.)
  • Would produce reviewable reports of any changes which are not additions of meta:resourcekey to controls. (Performing a diff with regular tools is very time consuming given the thousands of changes.)
  • Could be executed in batch in a timely manner across a project

PS: Big thanks to @plgelinas for his research efforts for this project.

jQuery plugin to postback an ASP.NET button

clock August 20, 2012 10:52 by author EtienneT

We use jQuery a lot here at LavaBlast, but we also use ASP.NET webforms. We needed a simple reusable way to cause a postback on an managed Button or LinkButton.

Here is how it would be used for <asp:Button ID=”btShow” runat=”server” OnClick=”DoSomething” />

// Cause btShow to postback to the server

If you are not too familiar with jQuery, the selector [id$=”btShow”] search for any control with an id which ends with “btShow”.

Since ASP.NET 4.0, you could also use the new ClientIDMode=”Static” property on the server control to be able to have a static ID on the client and use a jQuery selector like this: $(‘#btShow’), but this is the matter of another discussion completely.

The postback() method is a jQuery plugin which I include here:

(function ($)
        postback: function ()
            return this.each(function ()
                if (this && "undefined" != typeof
                else if (this && this.tagName.toLowerCase() == "a" && this.href.indexOf('javascript:') == 0)
                    eval(this.href.toString().replace('javascript:', ''));

Feel free to use this and let us know if you find any problems with the code.

Style ASP.NET Web Forms Validators with qTip 2

clock August 13, 2012 08:20 by author EtienneT

View demo | Download source

The default validators inside ASP.NET Web Forms are quite uninteresting and require some styling work to look adequate.  Recently, we’ve been using the qTip2 jQuery library and we love it.  qTip enables you to add visually pleasant tooltips to any element.  For example, you simply add a “title” attribute to any element and then apply qTip to this element and the “title” attribute will be used as the tooltip’s text.  This is the simplest use case.  Here’s an example; with our FranchiseBlast registration form.


When you try to submit this form and the validation doesn’t pass, we replaced the default ASP.NET validators with styled qTip tooltips beside each validated element.


Like you can see, the validators have absolute positioning, which enables them to flow outside of the bounds of the registration panel.  We could also easily change the position of the bubble in relation to the validated element and also change the bubble tip position.

Let’s take a look at what was needed to accomplish this, using a simple ASP.NET project. Here is the main ASP.NET code for the ASPX page.  Nothing fancy: a simple form with some validators:


<asp:ScriptManager ID="p" runat="server">
        <asp:ScriptReference Path="" />
        <asp:ScriptReference Path="~/Scripts/qtip/jquery.qtip.min.js" />
        <asp:ScriptReference Path="~/Scripts/validators.js" />
<fieldset class="Validate" style="width: 300px">
    <legend>Tell us about yourself</legend>
        <span class="label">Business Name:</span>
        <asp:TextBox ID="txtBusinessName" runat="server" />
        <asp:RequiredFieldValidator ID="rfvBusinessName" runat="server" ControlToValidate="txtBusinessName" Text="Your business name is required" SetFocusOnError="true" EnableClientScript="true" />
    <div class="alternate">
        <span class="label">Your Name:</span>
        <asp:TextBox ID="txtYourName" runat="server" />
        <asp:RequiredFieldValidator ID="rfvName" runat="server" ControlToValidate="txtYourName" Text="Your name is required" SetFocusOnError="true" EnableClientScript="true" />
        <span class="label">Your Email:</span>
        <asp:TextBox runat="server" ID="txtEmail" />
        <asp:RequiredFieldValidator ID="rfvEmail" runat="server" ControlToValidate="txtEmail" Text="Email is required" SetFocusOnError="true" EnableClientScript="true" />
        <asp:RegularExpressionValidator runat="server" ID="revEmail" Text="Invalid Email" ControlToValidate="txtEmail" SetFocusOnError="true" ValidationExpression="^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$" EnableClientScript="true" />
<asp:Button runat="server" ID="btnCreateAccount" CssClass="Next" Text="Create Account" />

Starting from the top, we need jQuery and also qTip to be added to our page.  The interesting JavaScript code in located in ~/Scripts/validators.js.  The rest of the code here is a simple ASP.NET form.  One important thing is that each element to be validated is enclosed in a <div> with his corresponding validators.  This is important because we will use this convention later in our script to find the associated validators for an input control.

I also have to mention that I added some lines in the .skin file of the App_Theme:

<asp:RequiredFieldValidator runat="server" CssClass="ErrorMsg" Display="Dynamic" />
<asp:CustomValidator runat="server" CssClass="ErrorMsg" Display="Dynamic" />
<asp:RangeValidator runat="server" CssClass="ErrorMsg" Display="Dynamic" />
<asp:CompareValidator runat="server" CssClass="ErrorMsg" Display="Dynamic" />
<asp:RegularExpressionValidator runat="server" CssClass="ErrorMsg" Display="Dynamic" />

This will force CssClass=”ErrorMsg” on validators.  This will be used next in our JavaScript code to find the validators:


Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function () {
    function getValidator() {
        return $(this).parent().find('.ErrorMsg').filter(function () { return $(this).css('display') != 'none'; });
    var inputs = '.Validate input:text, .Validate select, .Validate input:password';
    var submit = $('input:submit');
    var q = $(inputs).qtip({
        position: {
            my: 'center left',
            at: 'center right'
        content: {
            text: function (api) {
        show: {
            ready: true,
            event: 'none'
        hide: {
            event: 'none'
        style: {
            classes: 'ui-tooltip-red ui-tooltip-shadow ui-tooltip-rounded'
        events: {
            show: function (event, api) {
                var $this =;
                var validator =$this);
                if (validator.length == 0)
    if (window.Page_ClientValidate != undefined) {
        function afterValidate() {
            $(inputs).each(function () {
                var validator =;
                if (validator.length > 0) {
                    var text = validator.html();
                    $(this).addClass('Error').qtip('show').qtip('option', 'content.text', text);
//                    validator.hide();
        var oldValidate = Page_ClientValidate;
        Page_ClientValidate = function (group) {

There is much to explain in this code.  First we register a new function to be executed each time there’s an ASP.NET PostBack on the page here: Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function () { … });

The function getValidator finds the visible ASP.NET validators associated to a control to be validated.  We use the fact that the control to validate and the validators are contained inside a <div>.

We apply qTip to the inputs to validate and we get the text of the message by finding the visible validators.  Also we have some logic to prevent showing the qTip element if there aren’t any visible validators.

We also do some monkey patching at the end where we inject our own code inside the Page_ClientValidate ASP.NET JavaScript method.  To do that, we simply get a reference to the Page_ClientValidate function, create a new function with our additional code (calling the old Page_ClientValidate) plus we override window.Page_ClientValidate with our new function.  This new function have both the new and old functionality.

You would probably have to modify this code a little bit to fit your needs, but this shows how you could integrate qTip2 for nicer validators in ASP.NET Web Forms.

View demo | Download source

Microsoft Excel on Multi-Monitor Machines

clock June 5, 2012 11:51 by author JKealey

All of the developers at LavaBlast use three monitors; utilizing multiple monitors has significantly increased our efficiency. However, Microsoft Excel doesn’t work particularly well in a multi-monitor setup. By default, every time you open a new Excel file, its contents are displayed within the same instance. You have to manually launch other instances of Excel to have one instance per monitor, which is time consuming.

It is possible to configure Microsoft Excel to load one Window per file, but it involves a number of obscure configuration settings & registry changes. Every time we move to a new machine, this configuration needs to be redone. The information is spread out on a number of sites/forums and it takes a while to re-discover the sources. his post aims at centralizing this information.

In particular, this post focuses on Microsoft Excel 2010 on Windows 7 64-bit. I believe the fix works on other versions as well; feel free to comment on this blog post if the steps are different.

Step 1) Force Excel To Open Multiple Windows

Excel 2010:

  • File –> Options –> Advanced –> Scroll down into the “General” section –> Check the “Ignore other applications that use Dynamic Data Exchange (DDE)” checkbox image

Excel 2007:

  • Office Icon in the top left corner of Excel –> Excel Options –> Advanced  -> Scroll down into the “General” section –> Check the “Ignore other applications that use Dynamic Data Exchange (DDE)” checkbox

Once this change is done, every time you double click on an Excel file in Windows Explorer, a new instance of Excel will open. However, you’ll probably encounter the following error.

Step 2) Fixing “There was a problem sending the command to the program”

Each Excel file you open from Windows Explorer now launches in its own separate window. However, Excel spits out “There was a problem sending the command to the program” and leaves the Excel window blank.  You can drag & drop your existing file to this window to open it, but this is still painful. We will need to change the system registry to solve this issue; please refrain from doing this is you are not comfortable with the reg edit tool.

  1. Launch regedit
  2. Rename the HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\ddeexec  key to HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\ddeexec.bak
  3. Edit HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command\(Default).  Change /dde to “%1” in the value.
  4. As an example, mine was from "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /dde to "C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" "%1"
  5. Edit HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command\command. Change /dde to “%1” in the value.
  6. As an example, mine was from ykG^V5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ /dde to ykG^V5!!!!!!!!!MKKSkEXCELFiles>VijqBof(Y8'w!FId1gLQ "%1"
  7. Rename the HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\ddeexec key to HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\ddeexec.bak
  8. Edit HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command\(Default). Change /dde to “%1” in the value.
  9. Edit HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open\command\command. Change /dde to “%1” in the value.


Excel should now load separate Windows for each file you open. This setup will consume more memory, but will vastly increase your productivity.

Troubleshooting note:

  • Ensure you used “%1” with the surrounding quotes (not this: %1) in the above registry changes. Otherwise, you will get an error message: “’{file}’ could not be found. Check the spelling of the file name, and verify that the file location is correct.”

Thanks to Turbo2001rt  for the final important tweaks.

      FranchiseBlast Wins Bootstrap Award

      clock February 27, 2012 10:07 by author JKealey
      FranchiseBlast Wins Bootstrap Award

      We’re proud to announce that 2012 is off to a great start! We’ve recently received lots of local recognition and thought we’d share this great news with you.

      First, we’ve been listed as a Startup To Watch for 2012 by the Ottawa Business Journal. Past nominees (, FaveQuest, Select Start Studios and PatientWay to name a few) have had a tremendous impact on the Ottawa-Gatineau startup community  and we strive to do the same. For decades, our region has featured a tremendous wealth of engineering talent and we’re proud to be a part of the group of companies rebuilding our digital economy. 

      Second, we’ve won a Bootstrap Award for Best Sales/Value Proposition. This award recognizes companies who’ve grown their companies without the use of external funding (such as venture capital). We’ve been growing organically since our creation in 2007 and bootstrapping has enabled us to focus on creating value for our customers from day one. Today, we have an awesome product that is a perfect fit for our target market. If we had to name a single element which helped us refine our value proposition (other than listening to our customers for five years), I would have to name Lead To Win.

      Lead To Win is a startup ecosystem/accelerator (which takes no equity)  which helps companies get to market faster and/or accelerate their growth. We strongly recommend the program to other high-tech entrepreneurs, especially engineering students who don’t have a background in business.

      Thank you to everyone who’s vouched for us over the years. 2012 will be a year of great growth for us and we hope to share more good news soon!

      FranchiseBlast Now Member of the CFA and CQF

      clock February 17, 2012 11:25 by author JKealey

      LavaBlast Software Inc. (creator of FranchiseBlast) is proud to announce that it is now a member of both the CFA (Canadian Franchise Association) and the CQF (Conseil Québécois de la Franchise / Quebec Franchise Association). Over the past five years, we’ve helped numerous franchises grow thanks to improved operational software and we feel the time is now ripe to get involved in these franchise associations. We hope to have the pleasure to meet you at one of the upcoming CFA or CQF events, such as the CFA’s National Convention in April 2012.

      franchiseblast     CFA      cqf

      Month List


      The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

      © Copyright 2017

      Sign in