Archive for December, 2007

Goals for 2008

Monday, December 24th, 2007

It’s almost the end of the year so, as is now traditional for a “web-worker”, here are my goals for 2008.

Personal Goals

Sorting out my money. For some reason money just flows out of my account; I have looked at where it goes and everything seems to be “essential”. So time to stick a cork in it and get my incomings to be greater than my outgoings every month.

Reduce the amount of time I spend in the car each day. Not actually much I can do about this – I have to take the smaller child to the childminder’s and back and she is over on the other side of town. It’s a pain – between two and four hours a day depending upon the traffic (it’s only 7 miles – 28 per day). But in September she starts school and all three of our choices are nearby. In the meantime I have bought a small car to save on petrol.

Get rid of things. I love Freecycle. You may think it’s some sort of altruistic joy at taking something that is useless to me and giving it to someone for whom it is useful. I wish. It’s actually the joy at seeing some empty space in my garage or on my floor or in the cupboard. Yet I still have tons to get rid of.

Cook more. One of the unexpected results of working for myself is finding the time to cook (well mainly stuff I can prepare and then leave it cooking as I get back to work). And it is suprisingly good.

Business Goals

My ultimate business goal is to generate enough money automatically that I can pick and choose when and for whom I work.

To do this I need to increase my revenue; 10% per month would be a good start. Also implying I will be taking in over twice as much by my first year anniversary – which would be nice.

Ideally I would like to do this without (often) working over 40 hours per week. I don’t want my kids or wife missing me. So this revenue increase needs to be automated – either other people doing the work for me, or some sort of product that can generate revenue while I am asleep (or at least doing more interesting things).

Marketing wise I need to build a consistent message. And I’m not sure what that is yet. I guess this one ought to be top of the list.

And I would quite like my technical excellence to be well known amongst the UK Rails community (“you worked with Baz? I’ve heard he’s pretty good“). Everyone’s got an ego.

Getting things done

I have ideas for each of the personal goals – a debt snowball, using a smaller car for everyday and short journeys (although I can’t bring myself to get rid of my big car), put stuff on Freecycle (or eBay if it’s worth something) and get into the kitchen.

On the business side – I will be getting some outside help with the marketing stuff, and will home in on one of the many potential directions I have in mind. Once that is done, I can start building the revenue generators – a couple of product ideas or expanding the work-force to free up my time on business development (yeah, sales, marketing and management). And getting my name known? Well that comes through meeting people.

Overall, these are pretty modest goals. So, I have no excuse for failure. And then, next year, I can think really big.

3hv is a small software company in the north of England. Subscribe to be notified whenever a new article is posted – or just hire one of the best web developers around.

Implementing a Task

Friday, December 21st, 2007

Yet another post in an occasional series detailing the way that 3hv works. Read more here or subscribe to be notified when a new article is posted, or find out why hiring 3hv will benefit your business.

This is the most important of the lot. Where the work gets done. Where I earn my money.

I believe in Test-Driven Development. This is a method of software development where, before you write any code, you write a test that proves the function.

So, the specification may read “the user goes to the product page, clicks the edit button and changes the product name. Upon clicking ‘save’ the product listing is updated with the new name“. Using TDD I would write a test that simulates calling the product page, clicking the edit button (with its implied suggestion that this brings up a new page that lets you edit the product), change the product name, click ‘save’ and then check that the product listing is updated.

Because the test is written first, I need to write some code to make it pass. Until the test passes I know that I haven’t met the specification. As soon as it passes I know that I am done. No overblown, complex code (complexity takes longer to write, is harder to debug and easier to break). I just write the bare minimum to make the test pass. As the test represents the specification, I know that I have done enough to meet the client’s expectations.

But TDD has extra benefits. I can go back and improve the code (maybe I discovered a more efficient way of performing an operation and need to change the existing code to use it). Making such changes often fills developers with dread as it could break stuff (“if it ain’t broke don’t fix it“) – but as I have a suite of tests I can make changes, safe in the knowledge that everything still works and meets the specification (in the trade, this is known as refactoring). Which means that the code stays beautiful – easy to read, easy to maintain, easy to improve. So you, the customer, benefits.

Want to know the secret of how to do it? Here it is – Implementing a Task

3hv is a small software company in Leeds, England. If you’re of a technical bent then take a look at the geek blog – made of stone. Otherwise just subscribe to be notified when new stuff is posted here.

Shameless self-promotion

Friday, December 21st, 2007

I’ve added some recommendations onto the 3hv site.

Doing the Work

Wednesday, December 19th, 2007

This is one of an occasional series on how 3hv conducts its business processes. You can read more here, subscribe to be notified whenever a new article is posted or find out why hiring 3hv will benefit your business.

So I’ve got the sale. Nice work fella.

Now what?

Well, I want to make sure that I don’t lose money, and as a service business, time is money. Absolutely vital to the success of any business is that I keep a lid on the costs – my time in this case.

So the project (which, in most cases, is fixed price) needs to go into my time-tracking software (I’m currently using Freshbooks as I can invoice and get paid, online as well – but I’m not wedded to them). And my task list needs to go into Basecamp (because I make a living on the web and everyone uses Basecamp don’t they?).

Then, just plough through the tasks, one at a time (more on this in a later post). Once it is completed, the tests pass, the page looks nice and I’ve gone back and tidied up the code, tick the task in Basecamp and record the hours in Freshbooks.

Now, one of the most important bits. Post a message in Basecamp, addressed to the client, explaining what I have done, how it works (in English, not techno-shite) and why it works that way. Not forgetting to include a link to the new feature, so the client can evaluate it straight away. In other words, get feedback from the customer as early as possible. This minimises misunderstandings and means that I can react quickly to mis-steps and mis-communications (because they always happen). If there is feedback, deal with it (if necessary, negotiating an extra charge if it is beyond the scope of the original request).

Once all the tasks are completed (and they should be to the client’s satisfaction, as they have been checking as we go), I can build the invoice, send it to the customer and then watch my bank account like a hawk as the pennies come flooding in. Unless I need to chase them (well Freshbooks does that for me). When the payment comes in, update my accounts, have a nice sit down, glass of red wine and buy an iPhone (well maybe not).

Yeah yeah, them’s the words, where’s the pictures? Here – “Do a Project and Invoice it”

3hv is a small software company in the North of England. You can find out more by visiting the web-site – or just subscribe to be notified when new articles are posted (here or on the technical blog).

The Interview

Sunday, December 16th, 2007

Taken from Shane and Peter.

What’s your personal mission statement?

No Regrets. So far that’s pretty true.  Or maybe “I’m glad I have tasted fantastical places” (which I am and I have).

What’s the biggest mess you’ve dealt with this year?

The application I was working on at my previous employer. Over the years it had fallen in to a really bad state (and I fully take the blame for part of how it got that way). We folded the company, took the time to restructure a lot of the basic code and turned the product around. Then the company restructured and a lot of the good work (and staff good will) was lost.

What current entrepreneurial efforts consume your time?

3hv of course. I am a bit obsessed by it at the minute. I won’t stop until I feel like I know enough about business (whatever that may be). The same happened to me with coding – I devoured information on how to be the best developer until I reached a point where I felt that I couldn’t get much better. The same process has now started about business in general.

Why do you do what you do? What inspires you? When do you get most excited?

Because I’m good at it, because I hate being told what to do, because I hate living a 9-5. And I love writing Ruby code and watching my tests pass (sad I know). Business-wise, 37signals is an inspiration. Life-wise, Nottingham Forest gets me shouting.  And annoying my wife with my, frankly ridiculous, haircut.

Boxers or Briefs? or as Naomi says, Bikini or Thong, duh?!?

Boxers

What do you do when you’re not [designing | programming | managing | writing | toiling for the wo/man]?

Spending time with the wife, kids, dog, cat and rabbit. Watching the spectacular shambles that is Nottingham Forest.

What one thing made the biggest difference when getting started?

My wife.

What’s your exit strategy?

Product Development.

What is the last thing that made you belly laugh?

Kath and Kim. It’s not really my kind of thing (I’m much more into stuff like the Mighty Boosh) but there was a line about “Koala Lumpar” that made me laugh out loud.

Have you ever been in business before?

Yes – when I was a kid, my friend and I ran “JORB Enterprises”. We wrote a magazine and came up with a subscription plan for it that would double our money. We were 12.

At what point do you consider yourself successful?

When I can afford to pick and choose for whom and when I work. And when my hair is so big I can’t fit through doorways.

What was your first experience with a computer?

ZX Spectrum. The power pack overheated and produced a load of smoke. It was soon replaced by a Vic-20 and I never looked back.

Steve Jobs vs Bill Gates in a jello wrestling match, where’s your money?

Bill Gates. He fights dirty.

Where do you do your best thinking?

In front of the TV on an evening.

What does your average daily work / life balance look like? How much time do you work, play and sleep?

Up between 5:30 and 6:30. Get the kids ready, drop everyone of at their various destinations. Back home by 9-9:30 to start work proper (sometimes cooking as I go). Off to get Lizzie at around 4 and back for dinner by 6. Lizzie in bed by 8, so either an hour or two of work in front of the TV or switch the computer off and chat to the wife.

If I could introduce you to anyone, who would it be?

Business-wise – Steve Jobs (boring I know). Otherwise Ian Brown, Terry Hall or Bez.

What stops you from giving up when you are frustrated?

I don’t like losing.

If Chuck Norris and Steven Hawking had a baby (hey it’s my damn interview), would you vote for her for president?

No

And my own special question: what did you dream of doing when you were younger?

Record producer.  Collect a load of prima-donnas, hear their ideas, pick of the best ones and then push them into a situation where they can transform those into a classic.  Hmm, sounds familiar.

Update: added the bit about my hair. You always forget the important stuff.

Updated again: added my own question to the end.

Estimating a Project

Saturday, December 15th, 2007

This is one of an occasional series on how 3hv conducts its business processes. You can read more here, subscribe to be notified whenever a new article is posted or find out why hiring 3hv will benefit your business.

Often, a client has a good idea of exactly what it is they want building. This, in theory, makes my job very easy. Take the list of requirements, figure out how long they will take to build, calculate the price, sign the contract. Easy peasy. Lemon squeezy.

Of course, if it was that easy then IT would be known as one of the world’s favourite industries. As opposed to smelly geeks in bad T-shirts who cost a fortune, building stuff that never works.

The reason for this is that estimating a project is hard. If you were estimating the cost of building a bridge you have hundreds of years of previous experience to draw upon – you know the tolerances of the materials involved, you have a number of different architectural styles to draw upon. In other words, it is a known problem. Unfortunately, in software, often we are building stuff for the first time. We don’t know how the server will react. We don’t know what the best design to use is. That’s just the way it is with a young industry.

But, things are changing. In fact, there are libraries of patterns to draw upon – the famous “Gang of Four” book should be essential reading for every software developer. Ruby on Rails takes those patterns and forces you to follow them. It’s part of why I love it so. There are known procedures to follow to make your server scale.

And if you break the project down and divide it in small enough chunks (providing the actual requirements capture is accurate) you can build a decent estimate. One of the key features being that I assess the risk of each task and give myself some leeway if there is a chance that I may not know how to do things or that the feature may be misspecified.

The attached flowchart shows how I do it … New Project Estimate. Feel free to take a look – and leave your thoughts below.

This is the blog of 3hv Limited – a small software company based in Leeds, England. You can find out more by visiting the web-site – or just subscribe to be notified when new articles are posted – both here and on the technical blog.

Scaling a business

Friday, December 14th, 2007

Oresund BridgeWe Ruby on Rails developers are used to the barbs. “Ruby doesn’t scale” they say. Ignoring the fact that Twitter famously deals with eleven thousand requests per second.

For those of you for whom the above was gibberish, let me explain. Scaling a web application is making it deal with large numbers of simultaneous users. That in-house application that happily deals with all thirty people in your office using it at the same time may fall apart if thirty thousand people start using it concurrently. And, in this age of Digg, Techcrunch, even Slashdot, getting hit by a sudden spike in users is quite likely.

But there is a problem with scaling. Namely the processes and procedures you need to follow to make an application scale can sometimes be in direct opposition to those processes you need to follow to make the application fast for a small number of users.

There is a similarity here with making a business scale. I have spent all of my career working for small companies (although many of my clients have been large). The reason? Just like a small-scale application can be fast and responsive, a small-scale company can make quick decisions and run fast and loose with its procedures. This means that every staff member needs to do a bit of everything, every staff member has a say in decisions, every staff member can make a real difference.

The problem comes when the business starts to grow. How do you keep your corporate culture when suddenly you find that “newcomers” out-number the “old-timers”? How do you keep that “folk knowledge” (no, we don’t do it like that – because two years ago X happened and we nearly lost two clients) when your staff no longer fit in a single room?

Now this is looking far-ahead for me. Currently, 3hv is a one-man band (the odd contractor or freelancer aside). My procedures live in my head; no-one can do the wrong thing because I get to decide what is right and what is wrong.

But I fully believe in starting as you mean to go on (reserving the right to change my mind at any time of course :0)). And, more importantly, as things stand now, there is a limit on my income. I have to eat and sleep, and most importantly, I have a family. That means I cannot spend more than ten to twelve hours per day earning (and ordinarily eight to ten hours is all I can manage). So, if I am paid by the hour, the only way to increase my income is to increase the number of chargeable hours. And the only way to do that (apart from a time machine) is by bringing in more staff. Yet once I do that, how can I guarantee that the quality of the work (the thing upon which 3hv’s reputation depends) is maintained? I don’t want to be hiring and then throwing away the extra hours by monitoring everything my staff do. At the very least, that is going to be totally demoralising to the staff.

So instead I must start to scale my business from the off. Document my procedures and processes. Emphasise (and write down) the values that make 3hv what it is. Share them with my customers, my (future) staff, my acquaintances. Like scaling an application this may make me slightly less responsive now. But, when the time comes, it means that I can grow as quickly as needed with no loss of quality.

And, of course, this being the age of transparent internet business, I intend to share these processes with you. Why? I get feedback (from you, dear reader), you get to watch 3hv grow and (hopefully) come back here to see what I will come up with next. And it should promote trust between me and my potential customers – as they can see exactly how 3hv works.

You know you want to subscribe to find out more. Or maybe you just want to hire a web developer who will talk to you in plain English and deliver you some code so beautiful you will cry with joy.

Photo of Oresund Bridge is by sundstrom.

Fork in the Road

Thursday, December 13th, 2007

I’ve taken the decision to split my blogging activities into two (three if you count my infrequently updated Nottingham Forest Football Club blog).

From now on, 3hv (that’s here) will be the place to find out about business (strategies, tactics and stuff I learn along the way). In other words, the perfect place to find out more about 3hv as a company.

And made of stone will be the place to find out about the intricacies of Ruby on Rails and software development in general. The perfect place for your inner geek (or the geek that lives in your basement and is afraid of sunlight and soap).

Of course, you can subscribe to both blogs – 3hv here and made of stone here.

When Enterprise software will finally get respect

Tuesday, December 11th, 2007

Blackfriars Marketing commenting on Bill Gates’ claim that Enterprise Software gets little respect (via the Wall Street Journal).

As someone who has worked on ‘business’ and ‘enterprise’ software for most of my career (the difference being one of scale as far as I can see) I wholeheartedly agree. I got sick of being told that the user-interface was ‘good enough’. Half a second of frustration quickly adds up if you are sat in front of an application for eight or more hours a day(*).

especially when we confront real systems at work that increase workloads, enforce meaningless restrictions that don’t help customers, and sport user interfaces that feel Kafka-esque in their user hostility. It’s not surprising that enterprise software gets no respect; it is surprising that there aren’t more cases of employees throwing their computers out windows in frustration.

(*) Incidentally, that always used to be my response when people said that Windows had achieved parity with the Mac user experience. Give two experienced users a tight deadline, one on a Mac, the other on Windows, and see who swears the most. Frustration => Unhappiness => Staff Turnover (for the buyer) and No Repeat Sales (for the vendor)

Weird behaviour involving controllers, modules, namespaces and functional tests

Monday, December 10th, 2007

Weird one here.

I was working on some code that had controllers within a namespace (Admin::ThingyController). The controller descended from an Admin::BaseController. And Admin::BaseController included a module (include GenericStuff), which in turn was defined within the Admin namespace.

So far, so good.

The code-base was actually somebody elses and the time came for me to add a new controller into the Admin namespace. So away I went: ruby script/generate controller admin/another_controller, editing the file so that Admin::AnotherController descends from Admin::BaseController.

Then, as I do, I filled out my functional tests, made them pass (ruby test/functional/admin/another_controller_test.rb) and then built up some (reasonably) nice views and examined them in my browser.

All good. The views worked, the tests passed, the controller did what it was supposed to.

One final check before committing to svn – rake. Bugger. A whole load of failures. What have I broken? Eh? It’s AnotherController that is failing. Check it in the browser. All good. Check the test individually. Row of dots. Try rake test:functionals. Blam!

To cut a long story short (actually the story is pretty short, it was the investigation that was long) the cause was the included module in the BaseController. What is particularly weird is that it was only AnotherController that had the failures, even though all the controllers within the admin namespace were defined the same way. Adding the new controller had upset the rake loader somehow.

And the fix? Change the include in BaseController from include GenericStuff to include Admin::GenericStuff (even though the admin prefix is not necessary as both GenericStuff and BaseController are within the same namespace). Now they all work – tests, rake and in the browser.