Jun 21

In a tech startup, how to improve the quality of your product

I am part of a mastermind group of 4 entrepreneurs. Last week, one question that came up was “How do you keep the quality of your product up?”. As the only technical founder of the group, I could offer some suggestions regarding the software development aspect. Since my suggestions were well received, I thought I would try to capture them in a blog post. Please note that this is targeted at non-technical founders.

There are several checkpoints in the development of a new feature where you can check for quality. The earlier you find a bug, the cheaper it usually is to fix it.


If you run into product quality issues (bugs), the first thing to look at is your team culture. The two founders raising concerns about the quality of their product were also often referring to their velocity, which made me think velocity was important in their team culture.

If you have a poor quality outcome, maybe you are trying to go too fast. Try to reduce the scope of work per iteration.

Better to have half a product than a half assed product.

Something that can help you here is by improving your estimates. In the software development world, you can look at techniques like the Planning Poker. Planning Poker is a technique recommended as part of the broader SCRUM software development framework.

Check out SCRUM if you are not familiar with it. It has a lot of practices in place to keep the quality of your software up throughout the lifetime of the project.


Sometimes, a feature is badly implemented because the specifications are not defined well enough.

Design quality in rather than test quality out

It is worth spending extra time in the design phase to ensure you cover all cases (blank states, error states, mobile version, print version, etc…) so that the developer doesn’t have to solve them himself/herself.


To help developers remember everything that needs to be done during the development of a feature, make sure you have a well defined Definition of Done (another SCRUM concept).

It is basically a checklist of everything that needs to happen to a feature before it can really be considered done.

An example of a Definition of Done:

  • Unit tested (where appropriate)
  • Mobile friendly
  • Documented
  • Peer reviewed
  • Deployed to test
  • Validated by QA
  • Validated by Product Owner

Peer review

Make sure that any code change is peer reviewed. The main two benefits of peer reviews are:

  • Knowledge sharing between developers
  • Increased personal accountability: when you know your work is going to be reviewed by someone else, you can going to make extra sure your work is fine.


One simple and relatively cheap thing you can do to reduce the bugs that make it to the live product is to hire a manual QA tester.

We live in an incredible world where you can find a QA tester in less than a week on platforms like Upwork. Depending on the complexity of the software to test you could find someone for about $10 USD per hour to help you.

Get your testers to list test cases for each new features, and to test them manually before deployment to production or after big changes to the product.

Internal product demos

SCRUM (again) suggests having product demos at the end of each iteration where the developers have a chance to showcase their work and receive feedback from the team, product owner and stakeholders.

It is one thing to imagine a feature, it is another one to see it for real. The developers are likely to receive valuable feedback at this stage, even before a user gets to use the feature.


Once a feature is deployed to the production environment, you can put things in place to lessen the impact of bugs:

  • Error tracking: make sure these are reviewed regularly and allow time to work on the issues that come up
  • User feedback: ask your users what they think about a particular feature


Quality in a product is an ongoing challenge you won’t solve in a week. Make sure quality is part of the regular conversations you are having with your team so that it becomes part of the DNA of the team. In doubt, look at the SCRUM framework because it has a lot of good ideas.

Do you have any tips for other founders?

Apr 17

Living the Lean Startup : slides

Another presentation I did at Fishburners. This time I tried to share some of the ways I apply the concepts taught by the Lean Startup movement inside my startup.

Mar 17

How to manage a development team in a startup: slides

Shared a few tips on how to manage a dev team, especially useful for the non technical founders who have no dev project management experience.

Feb 17

Outsourcing for startups: slides

I presented at the coworking space Fishburners about outsourcing for startups. It is a good way for me to introduce myself to the community here in Sydney, and I got to improve my presentation skills 🙂

Sep 15

How to publish a open source nuget package

I have a piece of code that enables ELMAH SQlErrorLog to pull the connection string from the app settings. I needed that in order to make use of AppHarbor’s configuration variables.

In this article, I am going to document the process I went through to open source the code, and package it in a nuget package.

Create a new repository on GitHub


Make sure to tick the “Initialize this repository with a README”.

If your project is a .NET project, you can choose the VisualStudio .gitignore configuration.

Once your repository is created grab the url:


And execute “git clone <URL>”.

Move your project files in the new folder:



Prepare project to be published as a nuget package

First I needed to download the nuget.exe command line tool.

Then I run “nuget spec” in the folder where my .csproj file is. This generates a standard .nuspec file.

I included that file to the project and replaced the values:



Generating and publishing the package

I called “nuget pack WiseLabs.AppSettings.csproj” to generate the .nupkg file.

I called “nuget setApiKey API-Key”. (You can find your API key in your nuget.org account).

“nuget push WiseLabs.AppSettings.0.1.nupkg”

That’s it, your code is available as a package and can be installed in a project using “Install-Package WiseLabs.AppSettings”.

Pushing the code to github

At the root for the repository folder:

git add –A

git commit –am “First commit”

git push origin master

Nov 13

Bangkok .NET user group: Write better javascript (slides)

We had our fourth Bangkok .NET user group last Wednesday. Things went well although my presentation could have been a bit shorter :-/ Thanks to everyone for coming!

Here are the slides:

Oct 13

Bangkok .NET User Group #3: Best tools for .NET developers 2013

Yesterday’s was the third event of the Bangkok .NET user group. We had the pleasure to have some people from Microsoft and an MVP attending.

Here are the slides from yesterday’s session about the best tools for .NET developers.

Sep 13

Next Bangkok .NET User Group session (#3): Tools of the Trade

Last session, we were 12 people for the WPF presentation. Hopefully, we will be able to grow this number even more.

Next session, I will be talking about some nifty tools I use and make my life easier. Tools like MvcMailer, NCrunch, MiniProfiler, Gyazo, etc…

This session will be interactive, everyone is welcome to share their own exotic tools 🙂

Sign up here: http://www.meetup.com/Bangkok-NET-Users-Group/events/140006322/

Aug 13

Bangkok .NET User Group #1: source code of the Knockout.js taskboard

Thanks for coming to the first session of the Bangkok .NET user group.

I have pushed the source code of the taskboard project on Bitbucket: https://bitbucket.org/AymericG/taskboard.

Next meetup will be the 11th of September (topic: WPF): http://www.meetup.com/Bangkok-NET-Users-Group/events/133324222/

Aug 13

ABjection.js: simple javascript library to A/B test with Google Universal Analytics

I needed a simple way to write new A/B tests on a WordPress website and I couldn’t find one that was working specifically for Google Universal Analytics so I wrote one.


Basically, it comes down to this:

A/B testing with Google Universal Analytics

The code will look for any DOM element with the class .ab-call-to-action and will either apply the default variant or the variant1 variant. The variant being applied is saved in a cookie and is set to the custom Google Universal Analytics dimension so that you can segment your traffic by that custom dimension (which I called Experiment in Google Universal Analytics).

Good luck with your testing!