@madpilot makes

Freelancing 101 – Seven tips for managing your accounts

I’ve been freelancing under the moniker of MadPilot Productions on and off for nigh-on 7 years now and I’m the first to admit that making the books balance wasn’t always at the fore front of my mind. I’m a web developer – I need to develop! Unfortunately, running your own business means at some point you will have to deal with accounts and invoicing and the tax department. After all those years of battling my way through and making (expensive) mistakes, I have compiled a number of simple hints and tips that can help take the pain out of the financial side of things.

First my disclaimer: I’m not an accountant (ha!) and this might not be the most optimal way of doing things – but it does make it easier and is working for me. This is Australian specific, although I’m sure the general ideas will translate to other countries.

Register as a proper business

In Australia this is a really important step because you won’t be able to deal with Goods and Services Tax (GST) if your aren’t a registered business. You can register as a sole trader, which means you don’t need a company behind you. This is the easiest way, and usually isn’t going to cause to many headaches. I’m not going to cover the other types of business you can create (such as partnerships etc) as that can start getting complex, and you should really be taking advice from an accountant and/or a lawyer.

Once you have registered as a business you can apply for an Australian Business Number (ABN) and register for GST. Getting an ABN is optional, but I’d recommend doing it – it doesn’t cost you anything and if you don’t have one, other companies that you deal with are entitled to keep 46.5% of your invoices. So just get one.

Although you don’t need to register for GST if you are going to be making less than a threshold (it is currently $75,000) I would still do it. If you are small and you are good with you accounts it doesn’t take that much work, and it means you get to claim the GST back on any business related expenses!

All of this is explained in full at http://www.business.gov.au it also have links to the necessary forms to get you on your way.

Get a separate bank account

I personally find this the easiest way to manage expenses for your business. Having a separate statement at the end of the month is much easier than trying to sift through one HUGE single statement. It also means you can partition business money and personal money. If you ever get paid by cheque, you will need one as more often than not the cheque will be made out to you business name, not you personally – you can’t cash it if the names don’t match. Basic business accounts are usually pretty cheap and they are well worth it. Most banks will allow you to link your personal and business accounts via their online interface so transferring money between the two is easy.

When you are starting out, getting a business credit card can be nigh on impossible, but in this age of the web having one makes life MUCH easier. The solution is get a personal one (you are the only person using it if you a freelancer anyway) and pay any business expenses back from your business account. Many banks also have Visa or Mastercard debit accounts so if you don’t trust yourself with credit, this is another option. Unfortunately, these cards are generally only available to individuals not businesses, so you will still need another business account.

Get an accounting package

This is something that most new freelancers don’t think about, because they aren’t free and it seems like an expense that is hard to justify. Hopefully this will justify it: The accounting packages will help you see hidden expenses that you have forgotten about, such as TAX! When you work for someone else, they take care of the tax you need to pay. Unfortunately, since you are now your own employer, you are responsible for paying it. How much do you need to pay? No idea – that is what the accounting package is for.

There are many options – in Australia, MYOB and Quicken are the most popular choices, but have interfaces that suck. Thankfully there are some other options, such as the online system: NetAccounts which is what I use. These have a myriad of options so can take a little work to get used to but it is worth it, especially at Business Activity Statement (BAS) time – you click a button and it tells you how to fill it in – well worth the couple of hundred bucks you need to lay down to get it.

Get an accountant

You wouldn’t trust an accountant to do their own website, why should you do your own tax? They know the tax system better than you, so let them deal with it – if you follow my previous piece of advice and get an accounting package it should be a walk in the park for them. It’ll probably set you back a couple of hundred, but it could cost you a lot more if you did it wrong.

Get income insurance

If you get injured and can’t work, you are pretty well screwed. This is where income insurance can be really helpful. If you are in low-risk industry such as IT, it can be pretty cheap (mine is about $13 a week) and if you get injured they will pay out 75% of your income until you are fit enough to go back to work. Have a chat with an insurance broker – they can point you in the right direction.

Track your time

This is especially important if you change by the hour. It is all too easy to lose track of time and go over budget on a project. If you track your time well, you can warn a client if they are about to hit their budget limit BEFORE it happens and it also allows you to go back through your records when you are quoting in new jobs. If the job you did two months ago took 10 hours and is similar to the new job request you just got, you have a pretty accurate estimate.

Many people use spreadsheets for this, which I hated – so I wrote 88 Miles which is a simple time tracking system specifically for freelancers and small businesses. There I’ve plugged it!

Treat yourself as an employee

Ok, this sounds weird, but hear me out. A good general rule of thumb is that 2/3 of the money you bring in is going to go straight back out as expenses and tax (sucks huh?) so if you work that out as your wage you are less likely to find yourself short when all the bills come around. At the end of each week (or fortnight or month – what ever is easiest based on your cash flow), transfer 1/3 of what you brought in to your personal account. This is your money, and you can do with it what you like. Paying rent and buying food is always good and hopefully you have some left over to have a bit of fun.

DON’T TAKE ANY MORE OUT OF YOUR BUSINESS ACCOUNT! The business account if for the business – I can’t stress this enough.

If you have regular enough income, you can even setup the payroll facility of your accounting package to allocate you your pay each pay period. The benefit of this is it will take into account tax and superannuation. If this is the case, you can work on paying yourself 2/3 – the extra 1/3 will most probably end up going to the tax department, so you won’t see it anyway.

Example:

You are charging $50 an hour. Let’s say you can manage 5 hours of billable work a day and that you want to take holidays at some point (the standard is to treat one year as 260 days) you will be bringing in $65,000 a year. 1/3 of that is about $21,000 a year. The tax on $65,000 is roughly $15,000 so our estimate is close. So you will have $400 per week in your pocket for living and about $400 a week for running your business.

The great thing about this method is that you should have money left over, which means you should be able to go on a little spending spree at the end of the financial year, but more importantly if you get sick or want to take holidays, or god forbid the work dries up for a period, you still have some money in the bank to cover your expenses (for a while).

Hopefully this can help you freelancers out there run a successful business. The industry is pumping at the moment, so there isn’t a better time to go out on your own – just make sure you are smart about it.

WAWA finalists announced – Yours truly gets a gong

button1x2-white-3.gifThe WA Web Awards finalists for 2007 have just been announced and both 88 Miles and Bloggy Hell made the grade! 88 Miles is nominated for the “Best online application” category and [Bloggy Hell][2] is nominated for “Best personal or blog site”. The quality of the sites this year was awesome, so it is a great privilege to included in the group of finalists.

Go and [check out the list][3] for all of the finalists.

[2]: “Bloggy Hell” [3]: http://wawebawards.com.au/previous-winners/wawa-2007-finalists/

Prezz E Place goes live

Even though I left Bam two weeks ago, we have been covertly finishing off one final client project together – Prezz E Place. Prezz E Place is an online gift shop for those people how are too busy or phsyically can’t get to a shop to buy that special gift. It features a “dreamboard” where users can place products they would like to receive as well as a built in anniversary reminder system.

Prezz E Place is built in Ruby on Rails and took just over 150 hours to complete. From a technical point of view it utilises the Ferret search plugin for all of the product search, un-obtrusive JavaScript, SEO friendly URLs, plus some of the regular plugins I use such as action_mailer_layouts, custom-err-msg and paginating_find.

Let me (or Bam) know what you think!

Happy Birthday, Moose!

Shopmoose is turning 1!

One of my good friends, Matt Brown has managed to keep his boutique online gift store, Moose running for a year, which is no mean feat considering who his [dodgy web developer is][2] ;)

Seriously though, Moose has some really amazing pieces of artwork that would make the perfect gift for that friend or family member who has an art-bent  – not only that, but he supports local artists.

[Little Birdy brooch - $72 by Kyo Hasimoto][5]

To celebrate the first birthday, Matt has organised a 15% discount across the ENTIRE range of gifts – just enter the discount code moose1 at the checkout and help celebrate the milestone!

[2]: “That would be me, fools!” [3]: http://www.shopmoose.com.au/pieces/view/519/-decaf-print [4]: http://www.shopmoose.com.au/pieces/view/572/little-birdy-brooch [5]: http://www.shopmoose.com.au/pieces/view/562/the-love-terrorist

The times, they are a-changing… Part II

It is with a mixture of jubilation and sadness that I announce I am moving on from my current position at Bam Creative to take up a contract position at with Norg Media. Jubilation because of the opportunity to work on an exciting Web 2.0 startup over here in Perth, whilst still being able to pursue my own projects – sadness because I will be leaving a great bunch of workmates over at Bam.

By the time I leave at the end of June, it will be just over a year since I made the move from freelancing to full time work. The past twelve months has taught me more about teamwork and running a business than I could have garnered in a lifetime of freelance work, and for that opportunity I would like to offer my sincerest thanks to Miles and the rest of the team. I’m going to miss the crazy shenanigans that have gone on within the Bam walls.

I am really looking forward to taking the development position at PerthNorg – having the opportunity to work with a site that is young, growing and showing it’s potential is one that is hard to pass up. The fact that Bronwen has allowed me to work four days, giving me to have a MadPilot day has made the deal even sweeter, so now I can spend more time on 88 Miles, Twitteresce, AWIA and the WAWAs as well as pursue some of the other projects that I have in my head.

All in all an exciting time to be in the industry really!

Go on, take the survey. I dare you.

A list apart is conducting an online survey of the web industry. If you are in the industry I would recommend you take 10 minutes out of your day – the more responses, the better the data.

Have you done it yet? It’s ok, I’ll wait.

Stuff to do this year

I hope that the first week of 2007 has been fruitful – unfortunately I got hit with a stomach bug late in the week which put the brakes on to my running leap into the year. Oh well, there is always next week :)

I thought I might list some of the things I’m going to do this year – I refuse to call them resolutions, but I guess that is what they are. 2006 was a busy year with me leaving freelancing and starting work at Bam, starting work on 88 Miles and becoming chairperson of the WA Web Awards, but I can feel an even busier year coming up.

First on the list is getting a production version of my new project out. I used the time off over Christmas to build the footings for it so now I’m committed to getting something out. I’m hoping to make an announcement about what it is, what it does and how it does it sometime towards the end of the month. I can tell you that is is built on Rails (naturally) and it targeted at web designers and developers, and will be something they will on sell to their clients.

I also want to continue work on 88 Miles. The number of sign-ups have really ramped up in the last couple of months of so, and I’ve been getting really good feedback. I’ve also managed to find a way to integrate with the time tracking system at work, so I’m back to using it constantly which puts me back in the drivers seat.

The WA Web Awards are back again this year, after a really successful event last year, the committee had a big job ahead of them again this year. I plan to use last years experience to really refine the process – having volunteers means time is valuable and wasting it can’t be an option.

I’m the Events officer for AWIA (Formerly Port 80) this year, and I’ve got big plans. I want to instigate quarterly local speaking events where local talent gets a change to talk about what they are doing in a similar vein to Sydney’s webjam. This would be on top of the traditional Port80 speaking events: Ideas4 and Ideas5. If you are from Perth, passionate about what you do and want to tell the world (or at least a group of people in a pub) about it, please drop me a line.

I’m going to find time to go out and see my friends again – I’ve been particularly piss-poor in this area in ’06 – sorry guys.

And lastly, spend as much time as possible with my girlfriend, Giovanna – even though we live together, it is harder to find us time than you think ;)

Phew! That’s a lot of stuff. I need a nanna nap just reading it.

Three development tools you simply must have… Part I

As a web developer, there are a number of tools in my toolbox that I find it hard to live with out. These tools for the basis of my development and deployment procedures and have not only made my life easier on many occasions, but saved my arse on more times than I care to admit.

Although these tools excel when used by a team of developers and designers, I still use then when I’m developing my own projects, such as 88 Miles. I’ve split this mini tutorial up into three parts, so that I can be a little bit more descriptive about the actual process.

Application #1: Subversion

Developing without subversion (SVN) is like throwing rocks at your house. Sure it may be fun, but sooner of later you’ll hit a window and lose all of your source code… I’ll leave the unmixing of that metaphor as an exercise for the reader. Subversion is a source code versioning system which you can think of as a safe for your source code. The concept is simple:

  1. You take a copy of the source code (checkout) and you work on it.
  2. When you have made your change you save the change back in to the repository(commit)
  3. When you delete or stuff something up, you check the previous version out of the repository and no one is any the wiser.

SVN uses a copy-merge system which allows many people to check code out and work on it at the same time. This is handy if you have a lot of developers. Many other version control systems use the exclusive-lock in model, where a developer checkouts the file, which locks it until they are finished, which is fine too – both have their pros and cons.

Copy-merge pros:

  • You can have many developers working on the same code at the same time
  • If a developer leaves a project, goes on holiday falls in to a mighty cravass, there is no risk that they will have an exclusive lock on a file, stopping other developers working on it.

Copy-merge cons:

  • This can get messy if two developers work on the same file at the same time. At check in time, they will need to merge their changes, and if they have been making major changes, this might not be trivial. Solving the issue requires some heavy communication (not really a bad thing) and some planning (again, not a bad thing). On small projects, the likely hood of this is pretty small

Exclusive-lock pros:

  • It is impossible for two developers to work on the same file at the same time, eliminating a situation where one developer destroys another developers work

Exclusive-lock cons:

  • It is impossible for two developers to work on the same file at the same time :)
  • See Copy-merge pros

One of the greatest things about SVN is it’s price tag – nothing! (Don’t let that freak you out though, there are many big projects that use it – Ruby on Rails is one that comes to mind) and there are clients and servers for Windows, Mac and *nix.

Although setting up SVN itself is probably beyond the scope of this article, I’ll out line the basic procedure to set up a repository, and to work with that repository.

Setup

There is a command line utility bundled with the package called svnadmin. This, funnily enough, is the administration tool for subversion. To create a repository, you do the following:

svnadmin create /path/to/repository

Where /path/to/repository is the location of the repository. So, say you want to create project called foo in the directory /home/subversion, you would execute

svnadmin create /home/subversion/foo

And it is setup! You will probably have to play with the permissions by editing the /home/subversion/foo/conf/svnserve.conf file, for the sake of this excercise, we will allow unlimited access to the world. Obviously, in real life, you would lock it down so only those that you wanted to be able to access the code could. Check out the subversion manual for details on how to do this.

Open the svnserve.conf file and find the line that says:

# anon-access = read

Change it to

anon-access = write

SECOND WARNING: THIS IS INSECURE. DON’T DO THIS FOR A SERIOUS PROJECT. And if you do, don’t come looking for me when some one steals your code.

Now you can checkout the empty repository in to your working directory – so called because it is the directory that you work in. The command will probably look something like this (depending on our server setup of course)

Right! now you are read to start coding! Once you have finished, you can add any new files, delete any old file and then commit the changes. Just so I know what is going on, I will first check the status of the directory

A new_file_2

U modified_file

D deleted_file

The letter before the filename gives you a hint as to what you need to do – A is add, D is delete, U is modified. To complete this commit, I would run the following commands:

/path/to/working/directory% svn delete deleted_file

/path/to/working/directory% svn commit -m “Created some files, deleted a file, modified a file”

And if all goes well, subversion will return the new revision number. Revision numbers in SVN are global, so every time you run the commit call, the number will be incremented. The -m flag stands for message, if you don’t put it in, a text editor will pop up asking you to add a message. The message you enter needs to be descriptive of what you do, so that others (or yourself) can go back and see why each commit was done.

Want to rollback the changes from a commit? Say you made a BIG mistake in revision number 5 and you need to go back to revision number 4, running the following command should do the trick:

_/path/to/working/directory% svn merge -r 5:4 svn://svn.myserver.com/foo

/path/to/working/directory% svn commit -m “Undoing BIG mistake”

So revision 6 will now be the same as revision 4. Notice though that revision 5 still exists, so if you later realise that the mistake wasn’t that big after all, you can revert back to revision 5!

This is just touching the tip of what subversion can do – you can do all sorts of other funky stuff, but I’ll leave that up to you to read up on. 99% of the time, this is what a subversion session looks like for me.

Next: Trac bug tracking

Setting up a Rails app on a Media temple grid server

Now that I’m back from Sydney, I have had a bit more of a change to play with my shiny new MediaTemple grid server account. It looks like I will be pushing 88 Miles over to it over the weekend – everything is setup and ready to go, and just have to do the migrating. I though I would share with you a few thinks I found out along the way…

Setting up the Rails environment

The instructions on the media temple site are pretty good, there are just a few caveats I would make. Firstly, I’ve now started using capistrano to deployment, so I decided to change a few of the directory structures away from how MT suggests. The steps I took are as follows changes from the MT instructions are emphasised (replace testapp with you apps name – obviously):

cd $HOME/../../containers
mkdir rails && cd rails
mkdir testapp && cd testapp
mtr add testapp $PWD/current

For those of you playing at home, you may have noticed that the /current directory, doesn’t yet exist. Correct! This will get created by capistrano.

Setting up Capistrano

Everything was pretty straight forward in the deploy.rb file. The only gotchas I cam across were specific to my installation:

If your svn repository has a space in it, wrap it in single quotes when assigning the :repository variable, i.e:

set :repository, “‘svn://svn.server.com/path/to/your repository'”

If your svn repository requires a username and password for checkout or export, use the :svn_username variable, i.e:

set :svn_username,
Proc.new { “username –password password” }

The only other modification I needed to make to the deploy file was the addition of the restart task. Because MT uses custom scripts to restart containers, the restart script needs to call them reather than trying to mess with the Apache or Mongrel processes. I also discovered that my secure certificate wasn’t functioning correctly (I’ll explain why in a second) so there is a fix for that here as well.

desc Restart the rails container
  task :restart, :roles => :app do
    run mtr generate_htaccess test_app
    run echo RequestHeader set X_FORWARDED_PROTO https env=HTTPS >> #{deploy_to}/current/public/.htaccess”
    run mtr create_link test_app
    run mtr restart test_app
  end
end

Line 3 uses a MT script to make some modifications to the apps .htaccess file. Because Mt proxies all requests to the apps Mongrel server, the standard .htaccess doesn’t cut the mustard.

Line 4 makes another modification to the .htaccess file. Because I’m slack, I pull a neat trick when I do SSL. I maintain a global list of pages that require SSL – when a user browsers to that page, they automatically get redirected to the secure version if required. And the same works the other way – if they browser away from a secure page to a non-secure page, they get re-directed to the non-secure version. Unfortunately, because of the way MT proxies the request, the Mongrel server knows nothing about whether the connection is secure of not (i.e request.ssl? always returns false). Thankfully, there is a fix for this in Rails – if you include the X_FORWARDED_PROTO=https header in the request, rails knows what is going on. This line checks for the environmental variable HTTPS (Which is a flag that is set if the server is in SSL mode) and if it is, sends the modified header, which makes everything good again.

Line 5 links the web directory to the rails container and line6 restarts the server. Nice and easy!

MediaTemple’s new grid server services

What can you get for $20 per month these days? A Basecamp account? 4 88 Miles accounts? An account of a Grid server with 100Gb of disk space, 100Tb of traffic with support for upto 100 sites? Yeah. Media Temple has just released an insamely priced grid server setup that offers all of that FOR $20 PER MONTH. They even support Ruby on Rails using containers and mongrel. Needless to say, I signed up for account. hopefully it will come through before I leave for Sydney tomorrow afternoon, otherwise I’ll have to wait a week to play.

What is a grid server?

A grid server is basically lots of little servers that acts like one big server. This means that if a server becomes loaded, they can through more hardware at the problem. Google and Amazon use similar systems, infact Amazon offers a service where you can upload a virtual linux machine on to their grid.

If they pull this off, it will pretty much revolutionise server hosting. I’ll keep you posted how I go with my 88 Miles migration.

Previous Next