• Freelancing: First eight months

    Apr 8 2007

    It's now been one year since I started freelancing, eight months since I announced I was doing it full-time, and exactly six months since I did a two-month review. And wow, I've learned a lot in the past six months. Let me share with those of you thinking of freelancing or already doing so.

    1. Schedule in time for long-term projects

      This has bit me in the ass more than once. It's one thing to say that long-term projects deserve attention, it's another to physically schedule them in. Your clients will need quick fixes and other maintenance, and they may not want to wait until you have some "free time" (which doesn't exist as a freelancer). I'd recommend pencilling in a few hours per week for any long running projects, whether the client anticipates a need for it or not. Besides, it's better to have extra time than not enough.

    2. Schedule in time for family, friends and yourself

      I don't know about you, but my family and friends (especially my mom, dad and girlfriend) need help with their websites. And I always promise to help out, but assume I'll do it in my "free time" (again, it doesn't exist). Well, that just doesn't work. Even if I don't get paid to help, I need to book them in just like any of my other clients, otherwise they'll be the first people I neglect even though they're most important to me in "real" life. My own projects get neglected even worse, something I definitely have to improve on.

    3. Try to find a good daily routine

      Even after eight months, I haven't quite figured this out. I've tried working all at once when I wake up, working before I go to bed, or working in small chunks throughout the day. Some days it feels like I've worked all day even though I get nothing done. Other days I get a ton done but feel like I haven't done anything. I'm still trying to figure out which times of day to work for optimal productivity, but this remains elusive.

    4. Stay focused on your speciality

      When I started freelancing, I agreed to work on anything that came my way. Granted, I was worried about finding enough work to fill my time. Nowadays, I can keep busy with just JavaScript and Ajax projects (Ajax being my speciality), and end up turning down other projects (hint: heavy server-side development). I highly recommend figuring out what it is you do best and enjoy doing best, and stick to that as much as possible. Nobody benefits when you work on projects you don't enjoy.

    5. Try not to overcommit yourself

      Man, I say I've learnt these things, but they keep getting me time and time again. I hate to say no to people and try to give the best service I can. And unfortunately, when combined with optimistic time estimates, this can really be overwhelming. If something seems like it will take 25 hours, you can probably assume there will be at least 5-10 hours of stuff you're not thinking about, so try and factor that in. If you don't, it'll be your weekends and evenings that pay for it. Let me repeat my mantra: it's better to have extra time than not enough.

    6. Learn to relax and have fun, even under stress

      This has saved me from having a nervous breakdown at least once or twice. Even if you're completely running out of time, overworked and overstressed, the best thing you can do is take a deep breath, put your shoulders back, do what you do best and try to have fun. Your work and your health will suffer if you try to work faster than normal to meet a deadline. Nothing can make you work faster than your natural pace, so just enjoy the work as best you can.

    7. Find a tax accountant as soon as possible

      Tax accountants are very smart, knowledgeable people, and they'll be able to give you advice on all sorts of financial topics. If you're like me, you'll spend hours reading tax advice on the web, only to feel like you might be missing something important. Rather than waste your time trying to master the art of tax jujitsu, find a great accountant and relax. Chances are you'll want one eventually anyway, so the sooner you do it the better.

    8. When taking time off, get off your computer

      As I mentioned, I often spread my work out in chunks throughout the day. Unfortunately I spend all the time in-between reading blogs, chatting with clients on IM or surfing the web. At the end of a long day, I feel like I've worked the whole day even though my billable time is just a few hours. The only real way to relax and refresh is to get away from the computer, whether it's just washing dishes, watching a movie, or leaving the house.

    9. Learn when to charge fixed rate or by the hour

      This is something I struggled with when I started freelancing, but now the difference is clear to me. If I'm doing something quite small and tangible, where I can picture all the steps involved, then I'm happy to charge a fixed rate. You always take a gamble with a fixed rate. Sometimes it takes you half the time you estimated, sometimes longer. It's best to over-estimate (ie. factor in the unknown) when doing a fixed rate. Also, new clients tend to like a fixed rate because they don't yet trust you, and a fixed rate minimizes surprises.

      For longer term projects with many unknowns, where you'll be expected to fix bugs, and where the whole project is fairly open-ended, hourly is the only way to go. This way things are the most fair for everyone. The client only pays for the work you do, and you get paid for every minute you work. It's still important to remain transparent and communicate how many hours you work, and always ask before doing something billable that wasn't explicitly requested.

    10. Honesty and trust are at the centre of freelancing

      When a client hires a freelancer, they're not sure what to expect, whether they will get ripped off, or somehow be tricked into spending too much. It's very, very important to build trust with a client, and the only way to do this is by being completely honest and transparent. This means admitting when you make mistakes, explaining how you spend your time, and not lying about the number of hours worked. On the other hand, if you're (painfully) honest, your clients will be more than happy to put their faith in you to deliver.

      Being honest also means managing expectations. If you think you'll have to miss a deadline, explain this as soon as you suspect it, and be honest about why you're behind schedule. If you're going to have things finished early, say this as well. Otherwise, next time when you're (only) on time, your clients will be disappointed because they expected that you'd be early.

    11. Working for a reduced rate in exchange for ownership

      This is something I've had to struggle with since I started freelancing. As a freelancer, most of your clients will be very small companies or independent entrepreneurs, and very often they will be looking for a partner to help build their company. This can be tempting. What if this company becomes the next big thing? What if you say no and miss out on a million dollars? It's important to really look at the numbers and what's being asked of you. If you would normally charge $1000 for the project, and they want you to work at half price in exchange for 10% of the company, what they're really doing is selling you 10% of the company for $500. Ask yourself if you'd pay $500 for 10% of the company even if you weren't the web developer (or whatever).

      Also very, very important is to get this agreement in writing, and this means answering a lot of questions. What happens if you stop freelancing? What happens if they decide they don't want you involved any more? Is the ownership conditional on how many hours you work per month? If the company gets successful, are you willing to be involved with it full time? It's easy to have entrepreneurial dreams about people getting together to create something great and get rich, but reality is very unpredictable, so make sure you can answer all these questions on paper before you agree.

    It's been a really great time freelancing, despite the occasional stressful moment. I don't think I could ever go back to working full time for a single company, having to be at an office 40 hours per week. I choose how many hours I work per week (typically 25-30), I choose when to work them, and I choose where to work. I choose which projects I work on, and I choose how much money I want to make. I wouldn't give up this flexibility for anything. I highly recommend freelancing for anyone thinking about taking the plunge.

  • YUDOmagic - Share and Learn Magic Tricks

    Mar 25 2007

    Announcing YUDOmagic, a new site where you can watch, upload and share magic videos. You can watch all the magic performances for free, and you can get access to watch tutorial videos and learn how to do the magic tricks yourself just by sharing a magic video of your own. There is also a free magic forum so you can discuss magic and magic performances with fellow magicians and magic aficionados.

    This was one of the first sites I built using Ruby on Rails, the one I alluded to when talking about Switching from PHP to Ruby on Rails and Vanilla on Rails: The Coexistence of PHP and Ruby.

    If you're interested in magic, or if you just want to see what I've been up to, go check out YUDOmagic and have some fun.

  • JavaScript-only Links

    Mar 19 2007

    JavaScript-only interfaces often have some links that activate some kind of click handler but don't actually go to another page. These are called JavaScript-only links, and there are a bunch of different ways to make them, listed here from crappiest to best:

    • <a href="#" onclick="myFunc();return false">

      This method is really common, and not that great. If you are scrolled down the page, and forget to include the return false, the page will jump up to the top. Also, the user will see "#" in the status bar (not a real problem, but kind of messy). The link requires JavaScript to work. It's basically one big workaround for making some text clickable.

    • <a href="javascript:myFunc()">

      This method gets a lot of slack, but I think it's slightly better than using href="#". True, it's a totally invalid href attribute, and it's pure luck that browsers actually support the javascript: protocol. But it works (if you have JavaScript enabled). And it has a slight benefit (or downside?) that users actually see the name of the function in the status bar, giving them a clue as to what is going on. You also don't need to worry about returning false from the click function.

    • <a href="#myFunc" onclick="myFunc()">

      Very similar to using href="#", this method actually changes the URL to something slightly meaningful. This method can be useful if it changes the page in a repeatable way (displaying a specific tab or hidden area). This way you can add JavaScript that looks in the URL, sees the #myFunc, and recreates that change when the user refreshes the page. If you're tricky, you can even get the back and forward buttons to work. The downside: if the user has scrolled down, the page will scroll back to the top.

    • <span onclick="myFunc()" style="text-decoration:underline; color:#00f; cursor:pointer">

      This is my favourite obtrusive method. If you're going to make a JavaScript-only link, why use a link at all? Anything can be clickable in JavaScript, and using CSS you can make a span look exactly like a link (even the mouse cursor). Downside: this method is still obtrusive, requiring JavaScript, but at least it's honest about it.

    • <a href="alternate.html" onclick="myFunc();return false">

      This is a highly superior method to the others. If JavaScript is disabled, the link still works, and ideally goes somewhere that does the same stuff that the JavaScript function would do.

    Disclaimer: I don't recommend using the onclick or style attributes on a regular basis. I also don't recommend making JavaScript-only interfaces ever (unless you have to, and you rarely have to). For more on how not to do all this bad stuff, check out my presentation on Unobtrusive Ajax.

  • FlickrCash

    Mar 9 2007

    I've been really busy lately working on one of the coolest projects I've worked on: FlickrCash. It's built entirely using Ajax and JavaScript, specifically jQuery.

    FlickrCash searches for photos on Flickr in the most efficient way, so that you can see as many thumbnails as will fit in your browser. It loads up to 10 pages in the background, so it's very fast to browse through to find the photo you need.

    It's got some cool features, like a preview that pops up when you click a thumbnail, listing all the sizes that are available for that photo. If you sign up and create an account (for free), you can save your search results, and put together a "shareable lightbox" of photos with a secret URL. This way you can search for some photos and share them with your clients in order to get their feedback. For example, check out my Sunset Lightbox. This makes it really easy to use Flickr to find stock photography, whether for your print projects, blog posts, presentations, or just for fun.

    Before I even had a chance to blog about FlickrCash, Lifehacker beat me to it. There's also a Youtube video you can check out that demos all the features I mentioned and more:

<< older posts newer posts >>