Thursday, 23 February 2012

Reflection.. "I want an upgrade" - 1 year on

Since my whole "I want to be Rob 2.0" spiel back at the end of 2010, I have been working hard in so many areas. As I look out the window at this beautiful morning, I realise that the changes have individually been subtle. But the end result has been quite profound.

In the last ~12 months, I have been scared, upset, tired, haemorrhaging money and humbled.

And I wouldn't change any of it.

I feel more confident, passionate, well-rounded and above all - alive.

How's your upgrade going?

Now go be awesome.

Sunday, 12 February 2012

Startup Lessons Learned: Your Idea


I have been meaning to start posting my thoughts on findings on my startup experience for a while now, and since I am now in the run-up to returning to contracting (temporarily I might add), the timing seems appropriate.

I want to start with where it all began - the idea.

Beware of your noisy mind

Over the years, I have had lots of ideas. I often sit there getting on my soap-box and start putting the world to rights about just how different things would be "if I were in charge" (and of course I still do).

As a geek, this is natural - our very career is built on solving problems, simplifying things (or at least attempting to).

Exercise caution. The truth is, most of your ideas are stupid. Now, this isn't to insult your intelligence - but most ideas we come up with are spur-of-the-moment. They lack the clarity and experience that you will need to get them off the ground.

My advice: Don't write off ideas immediately, but write them down in a little notebook and review them regularly. After a week or two of letting ideas soak and rattle around in the brain a bit, decide if they should remain or be refined.

If you have to say "it's like.... but.." - BIN IT

I've met too many people at startup meetups that just seem to be doing just this.

Here's some truth for you - if it's like something else, but it's so similar that you have to use that to identify your product. You have no edge.

There is absolutely nothing wrong with getting inspired by something else. Google is a great example - but when pitching the idea to people, I bet they didn't start with "It's like Yahoo.. but..". No - "It's search, that's it. A really simple, really smart search."

Naturally, many ideas are formed on what is currently happening around us. That's how we grow and improve - but focus on what you are bringing that's new to the table. If you are "like" other things - what are you bringing to the table?

For me:

  • moflo: Based on a system I refined during my own personal financial journey. Borne out of a hatred for spreadsheets and complex formulae, it gets you to focus on the parts of your budget that you can do something about, and just focus on improving your financial situation. We aim for it to be nothing like anything you have used before because everything sucks.
  • dreamBIGLY: Many people have not even asked themselves "what do I want to do before I die?" dreamBIGLY is all about inspiring, connecting people, doing and sharing. It's all about creating those smiles that creep across your face when you do/see something totally awesome. ^_^ Every list app I have seen before just made me yawn.
Eat your own dog food

Along the same vein as the above - if you don't want to use it yourself. Don't bother. You must have a passion for what you are building. If you don't believe in it yourself, how on earth do you expect to convince others to do the same?

I actively use both moflo and dreamBIGLY each month and in doing so both my budgeting and "life list goals per year" count is improving significantly. My spending on things I don't value continues to fall, while ticking things off the life list becomes more common.

Live and breathe your idea. Not only will this help you build a better product - but it will give you a solid opinion with which to fight the critics with. Yes, as incredible as your idea is, some people might not like it!

Take all the "smart" out.. For now

One mistake we made with moflo was to try and put too much "smart" in in the beginning. We ended up making things over-complicated and ripping it all back out. Yes, it will eventually be going back in, but only after we have learned two things:
  1. Do people even need such "smart"?
  2. How can we introduce in an unobtrusive way that "just works"?
It's easy for us to focus on all the "magic" we can add - and we should definitely keep it in the back of our minds. But focus on building the simplest form of it first. When I say simple, I mean simple.

The truth is, your own idea will be a little warped - this doesn't mean it's "bad" - it just needs refinement.

"Form follows function" is what the architects would say. I have started to think "form emerges from function". Take your idea down to the root, re-plant it and then let it grow.

To wrap up..
  • Let the ideas soak.
  • Refine them into the simplest form.
  • Use your own ideas. Test them. Understand them.
  • Plant the seed and let it grow.
  • If it takes a hold with other people, you may be on to something.
Now go create!

Saturday, 21 January 2012

Ruby Open Classes


Coming from the .NET world, if we ever wanted to improve a class (by adding to it's code), we really only had a couple of options:

Subclass

This is limiting because .NET is a single-inheritence model. This means a class can only be subclassed once. So if other developers want to add more functionality, you can end in an inheritance chain nightmare.

Extension Methods

Since .NET 3.0, we've had extension methods. These allow you to bolt your own methods on to a type - the one gotcha being that they must be static. This would mean that you could only get at any public members of the instance you are executed against.

(I should note, these are not criticisms of the language. Just because I have jumped ship to Ruby, I still consider .NET to be a top-notch framework)

Enter "Open Classes"

In Ruby, we have what are called "Open Classes" - and they are pretty much what they say on the tin. Classes are open for extension and modification (yups, direct violation of the Open-Closed Principle).

Anyway, enough talk, let's see the code.

Example 1: Opening String

First up, let's simply add some nice functionality to String to see if it's a valid email address.

Lets get the a regex for a RFC2822-compliant email address.

Courtesy of [regexlib](http://regexlib.com/REDetails.aspx?regexp_id=2558):
^((([!#$%&'*+\-/=?^_`{|}~\w])|([!#$%&'*+\-/=?^_`{|}~\w][!#$%&'*+\-/=?^_`{|}~\.\w]{0,}[!#$%&'*+\-/=?^_`{|}~\w]))[@]\w+([-.]\w+)*\.\w+([-.]\w+)*)$
Even though this is of course very easy to remember, let's make it a little more readable:



No messing around, and makes for somewhat readable code. Moving on.

Example 2: Opening and using instance variables

What's cool, is that we can access all the instance variables in the class too - this means we can truly extend the class with little effort (and where it gets one over on extension methods).

Let's say we are using a piece of code from an OSS library that returns error codes from printing devices. We don't want to keep passing the return values around to retrieve the commonly used error message that accompanies it. However, these messages are business-specific, so don't belong in the OSS library.


The dark side of the force

As you can see, this is pretty powerful stuff, but as you know with great power comes great responsibility.


Not so good. Jay Fields has a great article on alternatives that may be useful if you find you need to tread on other peoples toes..

A lot of my fellow .NET developers are probably screaming at the monitor at this point "WHY BOTHER IF IT'S SO DANGEROUS" (I thought the same when I first saw it) but the truth is this - in the right hands (and I consider the developers I tend to frequent with far more talented than myself), it's a powerful and can a very useful feature*.

* Especially if you discover some weird bug that you need to patch before you can get it merged into the main code base.

Saturday, 31 December 2011

2012: The Plan

So, here we are with another new year just around the corner.
Call be boring, but this is one of my favourite times of year, not for any parties that may ensue, but because I get a chance to plan exciting things to do - and then do them.

I really did a lot of ground work in 2011, which I really want to build on in 2012 - so here we go!

Business Goals

New category because I started this in 2011 :)

  • Get moflo and dreamBIGLY to the point where it is earning enough for myself and my co-founder back to a normal salary (we have taken a rather substantial paycut since we are bootstrapping).
  • Get one charity project out of the door.
  • Start a secondary business that is completely out of my area of expertise (software development).
Financial Goals

Not much to do here really, I did too good last year ;)
  • Get investments up and running. I've been talking about this for ages - time to stop talking and start doing. Goal is 10% ROIC.
  • Clear my last piece of debt. I have a single loan that remains then I am 100% debt free!
Personal Goals
  • Start getting serious about my life list. Complete at least 2 items (preferably 4).
  • "Go Local" in another country. Live in another country for at least 3 months.
  • Publish, document and complete two projects on Lambs to Lions.

Some pretty big items in there - I really can't wait to get my teeth sunk in to them! It's definitely nice to be working in more of an "improving" mode rather than "starting" - starting is always the hardest bit.

What do you plan to do in 2012?

Make no small plans!

2011 Round-Up - How Did I Do?


Wow, doesn't time fly? I can't believe it was a year ago that I wrote this.

So - how did I get on? :)

Supplement income by 25%

I started off with this one quite slow - I sold a few items (which dovetailed nicely with my minimalism goals) and made a few hundred pounds. Obviously, this is a long way off my goal.

I then decided that is was time to take the plunge and go contracting. This then really gave my bank account the cash injection it needed and brought me up to about 20% increase.

While this didn't hit my goal of 25% - it's pretty damn good because it pushed me to take a bigger step that has pretty much changed my life.

Leonis Software was born.

Reduce fixed outgoings by 25%

Last year, I was living on my own in a 2 bedroom flat in Southampton. I was spending a small fortune commuting, not to mention had a relatively high cost of living. I was hellbent on reducing these costs.

I am really, really pleased to report I have reduced my fixed outgoings by a whopping 68%!! This has really opened a lot of doors for me and was also a big part of enabling me to get Leonis started.

Leave the UK at least four times

Managed 3 - Amsterdam, Las Vegas, Paris. Also went to Scotland (doesn't count as UK though). Loved Amsterdam, Vegas and Scotland. Paris - not so much. Good times had all round though and I love going on flying machines!

Downsize the apartment

From 2 bedroom flat in Southampton to 4-person houseshare in central London. Done.

Launch at least one product that is *at least* self-sustaining

Our first product moflo is live, and currently paying for itself. dreamBIGLY will be live *very* soon.

Now, just need to work on PROFIT!

In summation

I am really, really happy with the progress this year. I really feel like I am back to my old productive self and now working on products that I really, really believe in.

I've already had some contact from people using moflo telling me about how it has made them less stressed and they feel more in control of their finances which really rocks my world!

Super-excited about the imminent launch of dreamBIGLY - while budgeting is important (and not as boring as people think), there is already an amazing community of incredible people that I am really looking forward to engaging with and helping them achieve their goals (as well as my own!).

While financially I do not have the massive amounts of savings I would have liked - I have made a MASSIVE change to my working life. While I may need to go back to contracting for a short while to inject more cash into the business, I really can't help but feel like it's a case of when we get the products profitable, not if.

This year has also put me on a great footing for 2012, which I think will be a lot more "fun" orientated - good times!