Weekly update: Incorporation and Integration

Another Thursday rolls around, what have I been doing?

Last week on codeamplifier.com your intrepid hero was about to set off to see the accountant about incorporation. Well that mission was completed, I’m now the Company Director of Code Amplifier Ltd. I decided not to go with the cheap and dirty start-a-company website. Though I have had success with that in the past, this time I wanted someone more experienced to look over it at the start. As I need to get an accountant to handle my personal accounts too, it seemed to be sensible to get them to incorporate the company at the same time. I’ve read a lot of stuff about the chores and costs involved in setting up companies in the US, I can only assume that it’s completely different over there as in the UK, it seems trivially easy and cheap. Between £100-£300 depending on who you get to do it as far as I can tell.

I’m not yet VAT registered, as there is no real point until I start selling something with VAT added. That’s probably a good thing as I’ve got my eye on another monitor and various other bits and pieces which I don’t need but I’m sure would make me that bit more productive and if I had the added incentive of knowing ( or thinking ) that I’d get the VAT back then I’d be sure to buy them.

Monday was back to coding and I’ve finally put in the log in screen to the web app, as I was doing it I couldn’t but hum Code Monkey to myself. In this case the boss is coding the goddamn login screen himself.

I’ve also been doing more general set up, last week I switched to Mercurial, this week I’ve been setting up a build server for Continuous Integration. Unfortunately, in my experience, setting up CI is always slow and painful, but you only have to do it once! And I know for a fact that it’ll will pay back in spades. It’s unlikely that I’m going to have a QA team let alone a large one for a while and it is critical that the applications I write are rock solid and tested as automatically as possible.

I tried out Hudson briefly but unfortunately the only machine I’ve got spare for a build server is an old MacMini with Ubuntu for PowerPC installed on it, and Java runs like an absolute pig on that machine. I couldn’t put up with 30 second waits while pages refreshed on the web interface. So I’ve gone with BuildBot which is a little scary interface-wise but it does have the advantage that all the configuration is in Python, which is currently my language of choice so it’s a natural fit.

So the last two days I’ve been battling against unit tests that work locally but fail when run on the build server. I think I’m getting there, but it’s frustrating and I don’t feel like I’m achieving much. This weekend I’m taking a break to head back into London for The Amazing Meeting which looks set to be awesome and should give me a chance to stop thinking about coding for a couple of days.

Coming up soon, the home office revealed!

Thursday Night Update

Thursday is my blogging day, I’ve got a recurring quest in Epic Win ( 912 miles travelled, Level 3 skeleton thing, thanks for asking ) and I mean to stick to it. So weekly progress reports are going to be the default unless I get particularly inspired. Incidentally, for the rest of my schedule, Monday to Thursday are full time Code Amp, Friday is fun day when I try out other ideas and work on the iPhone game ( at least until Code Amp takes off and I have more external commitments ) – it’s sort of my Google 20% time.

This week:

Still moving into the new house, the office was ready for Monday morning, but we’re still in a sea of boxes. Most of Monday was spent running network cables, getting the new router ADSL router working, setting up computers and shelfs and unpacking. Tuesday I finally got to do some work, but there was also a lot of unpacking.

Yesterday I switched my existing code base from Subversion running on my shared hosting Dreamhost account to Mercurial on Bitbucket. Subversion has done me no wrong in the last year or so, but it is very much a baseline tool, and having really got to grips with Perforce at Sony for the last 5 years or so, Subversion just doesn’t seem as powerful. I’m so used to working with multiple branches, one for each release, a user branch for my work and feature branches for larger re-workings or new features that Subversion clunky merging put me off too much. So one of these new fangled Distributed Version Control Systems was needed. I tend to be a bit stubborn and contrary so Git‘s popularity was a bit of a turn off, though I’m very impressed with github and jealous of some of the features ( in particular the ‘gists’ which would be useful to use on this blog ).  Also as a bit of a python fanboy I decided Mercurial was the one for me and so far it has been incredibly straightforward. I activated the convert extension and the used hg convert command to switch all my subversion repositories to mercurial ones. I still miss p4v and perforce, but I’m not able to fork out the $700s a license just yet, and without the heavy binary demands of a game it’s not so critical.

I’ve been bouncing back and forth between my Powerbook and my new(ish) desktop running Ubuntu for my main development machine. I haven’t used a GNU*/linux machine for development before but I’m really impressed. Today I install Aptana and for the first time ever I’ve been running my Pylons website and have the ability to put a breakpoint in and stop it in a debugger. I honestly thought I was going to be doing all my development using print statements from now on. So I think the powerbook is going to be taking a rest except for my daily mining excursion as it doesn’t seem to like the linux machine.

Tomorrow, I’m off to the accountants to get the company incorporated and any other gumph that needs doing. Remember I said Friday was the fun day, I’m pretty sure the M4 at 9am is not going to be fun. 🙁

* Let’s try and keep Mr Stallman happy, he’s done the computing world a great service so I’m happy to bow to this small ask.

How the Code Amplifer logo was born

I now have the final version of the Code Amplifier logo. You can see it at the top of the page. Beautiful isn’t it?

I need to give a huge thank you to Adam Sullivan the super-talented graphic designer who created the logo for me.  He’s an enormously talented man. You can tell because he’s always too busy to take on any new work, but still he very kindly did the logo on the side for me. Check out his t-shirt work over at MySoti too.

Choosing a company name and logo is difficult, but it’s a fun kind of difficult. It’s so fun in fact that you have to be very careful not to spend too much time choosing the name and end up like a 14 year guitarist spending the whole time choosing a band name and forgetting to learn how to play guitar.

Of course these days it’s not really about picking the company name, it’s about picking the URL. I spent hours and many pounds on random spur of the moment domain names. All of which turn out to be a little rubbish in one way or another.

But, somewhere the word “Amplifier” got into my head and I liked it, because the idea was to make tools that would amplify productivity. Productivity Amplifier was out for being a ridiculous mouthful. For a while I thought Creativity Amplifier or Creative Amplifier, but then someone pointed out there there was a company called Creative, and they make amplifiers. In the end Code Amplifier seemed to work, the domain was available and I had to make a decision or remain nameless forever.

This is how the logo progressed from sketches in my notebook to Adam’s final version:

Sketches

Logo Sketches

Logo Sketches

The original sketches show that when I try and draw a guitar amplifier it looks like a washing machine. I briefly thought about electrical circuit amplifiers. The round circle designs were meant to be guitar amplifier knobs. They go up to 11, sort of thing. I even threw in some binary, because that’s what “code” is, isn’t it?

First Attempt

Code Amplifier first draft

My first attempt.

Unbelievably, I was actually considering using this as the logo for a while. Who needs a designer I thought? Well, now that I’ve got a properly designed logo, I can see the difference. This one looks completely amateurish by comparison. This is the version I showed to Adam, and despite my bad skillz there was something in this one. The graphic equalizer motif and a monospace font both remained in the final version.

Professional First Draft

Adam's first draft

Adam's first draft

Adam’s first draft was great. The first thing he had done was take the aspect ratio of the logo and make it square. I’d tried to make mine the golden ratio so that it would be visually appealing. However, square is better: it will look appealing contained in most aspect ratios – e.g. banners, business cards and it will fit into icons – favicon, app icon – more easily.

Next he’d separated the text and the logo, I knew this was “bad” when I did it in my draft, but I figured that I could still remove the text and have a recognisable logo. Now the text and logo are both distinct units, each of which can be used separately.

I wasn’t a massive fan of the typeface he’d created though. I was mostly concerned that it would be tricky to get it to work at low resolutions. I didn’t want to faff around when I was resizing the logo so we talked about getting a more traditional typeface.

Second Draft

Second Draft

The first set of re-workings

To allay my worries about resolution issues Adam put together a set of different versions but none of these really did it. The font just wasn’t working. So we decided to have a go with some more traditional fonts.

Third and Final Version

Code Amplifier v3

Re-worked with more traditional fonts

This was the final re-working. I was really happy with this set, and by this stage I didn’t want to take up much more of the time that Adam had kindly donated. I could umm and ah about fonts for a long time but the second one down suited me, besides it was nearly time for me to leave my job and I really wanted to get the blog up before my last day so that I could give everyone a link so they could follow me.

I gave Adam the green light and he tidied it up and gave me the final versions, including a black and white version for print or for using against a light background. You can see the final colour version in the title bar of the blog. I had showed Adam the first draft on the 21st July, there were around 20 emails back and forth and the final version dropped in my inbox on the 21st September.

Farewell, Sony

Farewell Duck

I'm ducking off.

Today is my last day at SCEE London.

It’s been a blast. 7 years that changed me from a green AI programmer to slightly jaded, but hopefully seasoned professional.

SCEE London is a excellent place to work and the PlayStation Home team is a world-class collection of talent, working to create an innovative product. Despite some criticism it is pushing boundaries in the console space and has spawned many imitators.

I’m off to start new things, initially alone, but I know that the friends I’ve made in Sony will be there to help me out if I need them.

Hopefully I won’t blub like a girl at the leaving drinks. :’-)

Reading List: Multi-Tenancy

As promised here is the trail I made while reading up on Multi-Tenancy.

One of the initial architectural decisions that I need to make is whether to run as a single-tenant ( One database per client ) or a multi-tenant ( Each database has many clients ). My initial thoughts were multi-tenant, to save on database admin overheads and overall running costs. I didn’t really know what to base my decision on though. So over the course of a couple of days. I did a lot of reading and listening.

StackOverflow is a great place to start for reading because the best answers are based on the experiences of real developers.
http://stackoverflow.com/questions/2202049/how-to-design-a-saas-database
http://stackoverflow.com/questions/13348/what-are-the-advantages-of-using-a-single-database-for-each-client
http://stackoverflow.com/questions/255616/should-i-use-a-single-or-multiple-database-setup-for-a-multi-client-application

After reading these answers I at least know the name of what I’m looking for. Multi-tenancy, which makes sense, putting multiple tenants into one application.

Those questions also lead me to to the Stack Overflow podcast, which gives us Spolsky’s point of view. At this point I’m erring back towards one database per client.
https://stackoverflow.fogbugz.com/default.asp?W24218

The wikipedia article is great summary once you know the name of what you are looking for.
http://en.wikipedia.org/wiki/Multitenancy

Screencast from salesforce; if they can do it with that many users, multi-tenancy on my scale would be a cinch.
http://www.salesforce.com/community/crm-best-practices/dreamforce08-developer-sessions/2008-tdf-plattech-multitenant-magic.jsp

Some slides from linked in:
http://www.slideshare.net/linkedin/linkedins-communication-architecture
http://www.slideshare.net/linkedin/linked-in-javaone-2008-tech-session-comm

MSDN often has some really good articles, this one is not too SQLServer specific.
http://msdn.microsoft.com/en-us/library/aa479086.aspx

The table of “Days between Failure” is putting me right off multiple databases.
http://scale-out-blog.blogspot.com/2010/01/exploring-saas-architectures-and.html

Nice overview
http://www.saasblogs.com/2009/04/24/is-multi-tenancy-more-important-than-just-cost-savings/

Side-tracked into row level security, but I don’t think this is much use to me.
http://www.sqlmaestro.com/resources/all/row_level_security_mysql/

The outcome? Multi-tenancy is too useful a feature to ignore, so I will definitely be starting off with all clients going into one database. I  may spin off a separate database for shared data ( e.g. Users ) but I’ll have to re-examine that later.

However, I’m certain that for some customers multi-tenancy won’t be good enough. So at a later date I will offer single tenant solutions, either for self-hosting or as a premium feature for hosted.

Competition

Just discovered another well established competitor for the first product I’ve got planned ( announcement coming in a few weeks ). I’ve only found two direct competitors, but that has made me much more nervous, when I first started planning this I couldn’t find any information about people doing the same idea.

However, as I keep reading, competition is good. It validates the market – if people are buying their product then there are people willing to buy my product. Still it’s a terrifying prospect to launch something and have everyone say “Oh, we’re already sorted, thanks to company X”. I find myself switching moods daily between “the market is validated, everyone will love my new tool” to “the goldrush is over, everyone has what they need, you’re years too late”. I really wish I’d started on this 12 months ago!

Interestingly, the two competitors have been around for very different timescales. The one I found out about a few months ago is just launching now, so is going to be in a similar boat to me. New, young, product looking for traction. The other company has been around for 10 years; their product is on version 4 and they look to be much more established.

However, in the 10 years I’ve been working in the games industry, I’ve never heard of them. Which makes me think that this area is still open for new products and services.

Like mine.

Reading lists

I’m a veracious consumer of information, particularly reading and podcasts. When I’m gearing up to write a bunch of new code in an area which I know little about I try and read up on it as much as possible. This is especially true at the moment as I can’t do any real coding until I’ve left my existing job, but I can do a lot of thinking and on-paper design.

After the latest batch of web-surfing around a new topic I got the idea for a way of filling my weekly blog posts: Reading Lists. So this is the introduction to a series of posts which will give you a batch of reading around a small topic, generally about the architectural design decisions that I am making.

First some background about how I do my reading and the essential tools.

Tools of the trade

A web browserWell, duh. Most of my reading content is from the web. A significant proportion is blog entries, but also papers, Q&A sites and commentary ( from sites like Hacker News ). I use Chrome most of the time and a Firefox every now and again.

InstapaperAn invaluable tool for those with an iPhone. Instapaper is used to save web pages to be read later. It caches them on a server and then you can download them in a handy readable format to your iPhone for offline reading. I use it almost everyday on the Tube into work.

EvernoteAnother page bookmarking / caching tool, a bit like instapaper. But with this I can clip the whole page to their server, tag and store them in categories. Mostly just so that I remember where I found something.

Sources

Generally I start with a Google search on the topic, sometimes this is harder than it sounds, for example, I didn’t know what multi-tenancy was called until several searches into the topic. Then usually I bounce through the links in the first 10 or so results. Often this will bring up some real, paper book references. I’ll usually bookmark these, and occasionally pick them up from Amazon if the topic looks deep enough or the book looks good enough. Some topics seem to lend themselves better to a print book than others. For example, there is a ton of content on the web about CSS, but it is all but lost in a sea of spam and articles from 1999 which aren’t much use to anyone. However, one book, is practically all you need.

A couple of other places worth looking if they don’t come up in Google:

Stack Overflow – you can’t beat if for programming questions in the right sort of areas: web programming, databases, C#, and .net. But you’ll find something about most areas of programming on there.

Hacker News – It’s tougher to find a specific topic, but keep and eye out and technical discussions are of a very high standard.

First reading list is coming up in a day or two. Stay tuned.

GDC Talk

I submitted a proposal to GDC earlier this week. We’ll have to see if they like it enough to let me do it.

I won’t go into much detail here, in the hope that it get’s accepted. Suffice to say that it is about creating tools for game developers. Something that I’m not sure gets enough attention over at GDC. I’ve always felt there was a little too much bias towards graphics programming and audio. When I went to GDC a few years ago, it seems like audio was very over-represented. Not that I think audio isn’t an important part of the development. Just, that perhaps there are other parts that deserve some attention too.

Like tools. 🙂

Mission Statement

You may have noticed that the first post on this blog is quote from me. That’s a little pompous you probably thought. Well, yes, maybe, but I thought it was a nice way of starting the blog off with the company mission statement. When I first thought about starting a company I never dreamed there would be a company mission statement, but I was listening to Simon Sinek’s TED talk:

Where he talks about Starting with the Why? when creating and marketing a product. After listening to this I immediately sat down and tried to put down why Code Amplifier should exist and the first thing that came out was this statement:

Code Amplifier believes that making games is too slow, too hard and too expensive.

We believe that great games are made by the people with great tools, and we know that you don�t always have the time to make tools as good as they can be.

So Code Amplifier makes tools for you that will make your team happier and more productive. Which means that your product will be finished more quickly, more easily and for less money.

I’m particularly happy with the part about making tools that will your team happier. It really sums up why I wanted to start Code Amplifier. So I’ve adopted it as a mission statement and hopefully it will give everyone else a feeling for what I want to do, and why I want to do it.