Monday, 4 November 2013

Gamedev start up journey - post mortem

The Company Journey

Here we go again. After the Lightning Lab I decided to work with another friend in our own game company. Our objective was to create sustainable games that would contain financial literacy lessons embedded into them.

It didn't take long for us to realise that we had a key missing component: none of us is an artist or designer. It didn't matter what game we would build, it would always look "square". We recruited one artist along the way, but our direction and scope was a bit different from his expectations which meant that for him it became more of a chore than an enjoyment to work on the game.

We pivoted several times. We were trying to streamline the game. Keeping it simple but engaging, the more we progressed with development and market research the more we realised we would have to invest in art.

That is when we decided to take a different approach and try to bring in a sponsor or partner where we would create the games for them. We talked to some big financial organisations and unfortunately most of them did not have the interest in games or, the one that was actually interested, considered us as a risk because we were an start up.

Then with this grim scene, I joined a game jam weekend and created a game named Contagiosus. I did enjoy building and playing the game. I have polished the game enough to be "releasable". Reality is, even for a simple game such as Contagiosus there is an enormous effort to make the game ready that excludes content and game mechanic. That is instructions, tutorials, sounds, game settings, game flow and general user interface polishment.

The Reality

 Reality check: we did not have funds for be iterating more games, paying art and marketing the game. Any game we create we will need several future iterations with feedback from the community which means an extended time is required. And even if we go through the progress we may end up finding that the game is not good enough to be financially sustainable.

 Looking at those elements, we could not justify spending more time and money on it.

We didn't have the big budget to go through all those elements at a full time rate. The game community will not be built over night and it is a long process to get it up - going full time doesn't necessarily makes a big difference.

Funny enough there are lots of blogs out there that say exactly the same thing. I hope this reaches someone who is intending to go full time for his game.

Lessons Learned

It has been a great experience. I had to do it. I wanted to do it. I definitely put something to sleep that has always been in my heart: game development. It is not an easy business.

Build your game prototype and community before going full time

As mentioned before, it takes time for building the community and it is a long process. Going full time does not necessarily helps it.

Have goals and objectives to guide you through the process

This is one thing that we did well. We always had in mind what we wanted and when we wanted. It helped us to always move forward, plan our journey and having points where we were reevaluating our direction. "We need this to get that"
Example:  we built our prototype to have content and ideas to present to prospect sponsors and partners - objective was to get funding for art
Having objectives will also help you decide when to stop. For example, for the prototype we needed to have certain elements. When we got those elements, we decided to stop otherwise we could spend time for something that will not go ahead.

The uniqueness of your game is your value

If your game doesn't have anything unique what do you actually have? Another clone or copy? That is fine but is it enough to get above the indie devs noise? There are amazing games out there being built.
Our game unique proposition was our "garden", where the player would build his own area and share with friends. The challenge with this proposition was that there was alot of art work required hence why we needed funding.Maybe if our game play was more unique and interesting we wouldn't have this big art dependency and would be easier to get out there.

Sell from day 1

You need to build your community. Doesn't matter what you are building, start talking about it. Get people involved.

That is definitely something we should have done. The benefit is your participation in the game dev communities out there. It increases your exposure and you get valuable feedback.





Monday, 9 September 2013

GameMaker for a gamedev start up



The game development tool is probably one of the most important aspects from the job. I love coding, tinkering, making it reusable, creating components and modularizing code.

As a strategy move I decided to go for Game Maker as our tool and here is why:

Being a start-up and self-funded means that our budget is very low (almost nil) which means that we can’t afford too much in the tool itself. Not only that, we need to move fast. It is not like we have 6 months to build a single game. We also need to iterate fast, we may start a game and find out that was not exactly what we think it would be.

I got the free version and I was amazed with how simple it was to get something up and running. They made the things very simple… I built a quick demo in a day which would take me a few days in other tools – just to catch up with the reference.

What did attract me the most on Game Maker was the out of the box features that it has: advertisement, in app purchase and analytics (and other stuff) – but those three definitely got my attention. From my research at the time, any other tool I would have to build my own or pay for it.

But it is not a bed of roses. Their programming language is procedure (function) oriented. Although you can create “objects” (entities), these are more data holders than anything else. You can set behaviour and inherit that behaviour but you can’t create functions inside of that object and call from somewhere else (there are ways around it, but is not elegant nor maintainable).

The point above was big downside for me as a developer where I couldn’t create my logic and reuse in various place in an intuitive and clean way (as in most object oriented languages).  

Overall it is a good tool, gets the job done in an easy and quick way. Specially the deployment. I was very happy to see versioning and with one click I created an Android package – that worked!

I have been using for the last 3 months and am happy with it. So far we created about 3 games, one has been canned, one is half way and seeking for funding and the third is my personal project.

Summary:
  • Not too expensive (maybe not anymore - as they just nearly doubled their price - ouch!)
  • Easy and quick to create 2d games
  • Good set of base out of the box features
  • Not the greatest programming language

Monday, 22 July 2013

Number 8 Games

It has been a few months since the Lightning Lab finished and since then I have been working in a new venture: Number 8 Games.

It has been 3 months since inception and we started with the intent of creating FUN games with financial education embedded into it. And we are still sticking to the same idea!

Not sure which one is harder: creating a game company or a business start up. In the last few 6 years of my life I have been a bit disconnected from the game industry and because of that I may feel that a business start up is easier than a game start up.

Business Vs Game Start up

When creating a business start up we ask ourselves the following questions: is this idea solving a problem? Is the problem big enough that people would pay for it? What is the size of the market?

How about games? That's where it is tricky. Games are very subjective. What is fun for me, may not be for you. What is beautiful for me, is ugly for you. What now?


A game start up is very similar to a business start up. You need to understand your market and build accordingly. For example, if we are trying to reach teenagers, what do they like? What are their aspirations? I find hard to believe that if you create a game with technical financial terms in a setting similar to the real world we would be able to reach them.

The key question always is: what is your target market and how is your product/game attractive to them.

The game

What would be a game company without a game ? We have pivoted the idea, several times. :) As you do. The theme is always the same: financial literacy, but what has been changing is the way we approach it.

One thing that we have always kept in our minds is keeping it short: both the game and the development. 


The game we are sitting in at the moment is: Money Tree. We will engage our players by allowing them to collect money and items from trees and learn about investments at the same time.

Our time box is one month. Let's see how we go :)

Wednesday, 19 June 2013

Lessons from co-founding a startup in a business accelerator programme

My first start up went to an accelerator programme named Lightning Lab, which I wrote about in other post named Inside of a Business Accelerator.

Our team met during the Start Up Weekend and we won the first prize, since then we continued working on project on our free time until we applied to Lightning Lab. The team of 6 individuals got trimmed to 4 (and a half) by the time we joined the programme.


We went through the programme but at the end of it we decide to fold the company and below are my key lessons out the whole start up experience:

Vision

When joining or starting a start-up company it is important to understand the vision of the business that you are creating.

Dan Khan dives into Vision in much more detail and I completely agree with what he said in this article: Keeping hold of your company vision

Our mistake: we did not have one. Consequently we kept pivoting, changing direction and getting nowhere. We had nothing to help us stand our ground, not even passion:

Passion

Vision and Passion should be aligned with the co founders, otherwise there will be a drag and instability in the team. Passion, in this context, in my opinion, is the feeling of achievement when progressing and discovering the aspect you are working on. You may discover bad things, or good things, or amazing things, or horrible things, but you want to go further.... and further!

Reality is: you will place yourself under a lot of stress with no or little 'reward' and without the intangible asset of passion you may struggle to keep your motivation and productivity up.

In our case, after a few weeks in the programme, it became clear that not all founders had the same level of passion and commitment to what we were trying to do. When the first idea that brought us together failed, it was very hard to glue us back together.


Team


There is an awesome article about Minimum Viable Team made by Start Up Weekend which contains great advice regarding building your start up team.

Key learnings:
1) everyone should understand their roles and responsibilities so they have ownership and autonomy, making the founders more pro active and focused.
2) the vision and passions should be aligned with the co founders
3) understand how to keep the team motivation up, have a leader, have someone who owns the idea (likely the CEO)
4) having someone with domain expertise and connections in the sector that you are working on is a big plus. It helps finding the right people and saying the right things.

Lastly, if you are a CEO and will be looking for VC funding/investment, have a read on Sean Percival insights about his resignation - good insights there.
 
Our team had great individuals. Great skills, great knowledge, great personalities. But we did not make the Minimum Viable Team. It was like we were different pieces of different puzzles put together. Or maybe were we missing the right glue?

Personal Life

The obvious stuff: take care of your well-being, try to relax, care for those close to you.
Easy said than it is done. And looking back, I feel it is what I most neglected. I was stressed and did not know (or my mind ignored the fact).


Once the programme finished and had a bit of a break I started noticing really how the situation was. I found that day-to-day relationship with people in general was affected, I simply didn't want mingle or chit-chat. I didn't have the patience. I allowed the issues in the startup to interfere with my personal life more than it should.

Luckily, I have an awesome wife. She was supportive all throughout the programme and she understood and helped me through. I can't imagine how I would have survived if she wasn't there and I'm glad that she did survive too.

My advice: try your best to keep the balance. What I should have done: relax more, better diet, more exercise, and more time with family and friends specially during the weekend.

If want more insights about how people see the experience of a business accelerator, view this video: What Did They Give Up [to join a business accelerator programme]?

Saturday, 8 June 2013

Inside a Business Accelerator Programme - Lightning Lab



Lightning Lab is the first business accelerator in New Zealand! And I must proudly say that I was part of it! I have written about my lessons in another post, have a look!

The story starts before the Lightning Lab application stage, each team was doing their own thing trying to get their business going until they saw the opportunity of seed funding, an office space, lots of mentors, potential investors, perks, a schedule to help the business grow and an opportunity to expose your business to 100+ investors at the Demo Day at the end of the programme.

It is an incredible opportunity: only 9 lucky teams were selected to join the programme and we found out that the lab offered much more... we had an environment focused in making all companies grow and progress as quick as they could.

During the programme we had sessions where we could share problems (personal or otherwise) and each member could help each other. We had events to help reduce the stress such as yoga and massages! We had Red Bull! We had access to interns! We had the opportunity to have insights from real potential investors! We had valuable sessions around business development! We had 8 other teams going through similar hurdles as we were.

The first four weeks was filled with meetings with mentors (about 2-5 mentors per day) and speaker sessions around all sort of [awesome] topics to increase our entrepreneurial knowledge. Our day-time hours were filled, leaving little space for us to work on our business which meant early mornings and late nights! Must say that I saw a sleeping bag around the lab - several times :).

The mentor meetings and sessions gave us direct access to connections and insights that you wouldn't usually have access to. Each mentor can provide valuable insights around the business models and direction... at a cost: mentor whiplash. Making this first part of the programme the most intense (IMHO).

Then we had a little of a 'break'. The next four weeks each team focus on applying all the knowledge learned, connections acquired and progress made into laser point focus: making it happen. Because of the little time we had in the first few weeks, many aspects were falling behind by this time which meant again early mornings and late nights... but the advantage now is  the teams knows the know-how and are more focused!

Finally... the final four weeks. This was to further prepare the business by giving more atention to financial forecast, business models, business plans and finally most important: the Demo Day pitch - where we present our business opportunity and ask for money
 
The CEOs were the most busy team members at this phase of the programme as they were the one preparing the pitch. They had to practice the pitch. And then practice... and practice, and practice then practice a little bit more. Every day.

Each team was also being ranked scores on how good their pitches were. Scores were given by mentors and the lab's leading team. We all started with a score between 0-2 (of 10) and we were asked to have at least 8 if we wanted to be in Demo Day - no pressure (motivational constraint).
It was amazing to see each team's improvement on their pitch in short periods of time.

Pitch was one side, we also had various sessions about investment rounds & options, due diligence, how to be prepared for investment, legalities and consequences. Extremely informative.

Demo Day was the day that we had show how much improvement we did since we started the programme. It was each team's opportunity to meet investors and get their first round of funding. We had the morning to practice in the theater then we presented to a crowd of 100+ investors. After that we met them and attempted to schedule meetings to secure some investment!

The result? $3 mil of potential investment into the teams. Read more here and here.

The 3 months felt much more like 1 year worth of work. All teams were focused. All teams learned a lot! It is an amazing experience, totally worth.

Saturday, 13 April 2013

ASP.Net Web Api Header authorisation and Sencha Touch 2 Request

Recently on the Questo Project that I have been working I needed to create a quick way of locking certain features from the API where only authorised users should be able to use it.

ASP.Net WebApi Code

AuthorizationFilterAttribute

The easiest way to protect your code is by adding a filter attribute to your controller or method.
Below is the code that checks the request's headers and validates the api code from it.

If invalid, returns an Unauthorized response to the client.

Important: Note the using namespaces! It is importing the WebApi namespaces rather than the ASP.NET MVC.
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http.Filters;

namespace QuestoApi.Filters
{
    public class WebApiKeyAuthorisationAttribute 
                    : AuthorizationFilterAttribute
    {
        private const string HeaderApikeyName = "ApiKey"; //header name

        public override void OnAuthorization(
            System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            base.OnAuthorization(actionContext);
            
            //AJAX frameworks usually send a OPTIONS, below allows the 
            //options to run as usual.
            if (actionContext.Request.Method == HttpMethod.Options) return;

            string key = null;
            if (actionContext.Request.Headers.Contains(HeaderApikeyName))
            {
                key = actionContext.Request
                                   .Headers
                                   .GetValues(HeaderApikeyName)
                                   .FirstOrDefault();
            }

            if (ValidateApiKey(key))
            {
                //If it is valid, no need to do anything
                //But alternatively, you can set the HttpContext User 
                //to allow your app identify the user who is calling the API
                
                //HttpContext.Current.User = GeneratePrincipal();
            }
            else
            {
                //Otherwise, return a response now as an Unauthorized
                actionContext.Response = actionContext
                                          .Request
                                          .CreateResponse(HttpStatusCode.Unauthorized);
            }
        }

        private bool ValidateApiKey(string key)
        {
            //Write here your key validation
            return key == "valid-key";
        }
    }
}

Using on the controller

You can either place the attribute at the class level:
    [WebApiKeyAuthorisation]
    public class RegisterQuestController : ApiController
Or at method level:
        [WebApiKeyAuthorisation]
        public HttpResponseMessage PostUserQuest(RegisterQuestRequest p)
 
When placing the attribute, that method or controller will be protected requiring the client to always include the api key into the header of the request.
 
Once the ApiKey is validated, you can optionally access the user details from the
HttpContext.Current.User = GeneratePrincipal();
 
Note: When placing at class level all methods will use the filter. Fear not, there are ways of allowing anonymous authorization on selected methods - but fear now, you will have to do your own research :) I have seen somewhere.

Adding Header to Sencha Ext Ajax Request

How to use this using Sencha Tounch 2 Ext:

Ext.Ajax.request({
    url: url,
    method: 'POST',
    headers: {
        'Content-Type': 'application/json;charset=utf-8',
        'Accept': 'application/json',
        'QuestoApiKey': 'valid-key'
    },

    params: data, //your data

    failure: failureCallback,
    success: successCallback
});