Coding with Jesse

Empower your clients to make changes

A woman fishing

When a client asks me to make a change to a website, I have two choices. I can go and make the change. Or, I can set things up so that the client can make the change themselves.

It's not always obvious which of these two will be a better use of my time. If it's a one-time change that will never need to happen again, of course it's better if I go make the change. But sometimes it's obviously something that will need to be changed again and again.

Sometimes the change is so small that it's a quick copy & paste, so there's almost no benefit to adding a content management system. Often, the changes can be more complex, and require a lot of back-and-forth communication, asking for clarification, testing, reviewing, etc. I have a pretty low tolerance for this before I insist on building a tool for my client instead.

Pretty much every system should have some kind of administrative login area, where the client can go in and access these admin-only tools. It might be as complex as a content management system, where they can create whole new pages, and change all the text in the system. It might be where they manage other users, or get the answers to questions they might have otherwise asked me for.

In one case, I had built a system that had a complex set of rules, basically if/then statements, and it was evolving rapidly. Every week I was being asked to make changes to the logic, and also asked to remind the client about what it was already doing. So, in a few days, I designed and developed a Domain-Specific Language (DSL) that allowed all of the logic to be captured in a single text file. It wasn't a programming language, because my client isn't a programmer. Rather, I designed it to be intuitive for him, so it would be easy for him to read, edit and publish changes to the logic in the system. Many years later, he is still actively working with this same DSL.

I have another client who is more technical, and has some experience with basic HTML and CSS. They wanted to make broad changes to the design of the site, and to the text that was hardcoded throughout. I gave them two options: either they could provide me with a long list of these changes, or I could bring them in to collaborate on the code. They had no experience with git, GitHub, Svelte, or even with using an IDE. I thought it was worth a try, so I sent them a long list of instructions for installing all the software they'd need. I sent them a few YouTube videos about using VS Code with Git, and had them create a GitHub account. I explained how the site was architected, and the basics of Svelte components.

Within a week, they were making changes to CSS and text and committing and pushing changes to GitHub! It was so exciting! Just looking at the long git diff, there were literally hundreds of changes. If they had tried to write out those changes in a Google doc, it would have required dozens of screenshots. It honestly would have been painful for me to carefully go through and implement all of the tiny changes. And chances are, I would have screwed up more than once, and they would have had to make new screenshots. They would've felt like a bother to ask me to increase the font size by 5%, or change a border to a different shade of grey. More than likely, they would have just accepted my poor attempt as "good enough" and said thanks.

Instead, they are now empowered to go in and make changes themselves whenever they want. As the site evolves, over the coming decade, they'll have the confidence to go in and make all the updates they need. They were even able to use AI to generate a snippet of Svelte code in order to add a second button to the page!

No, I'm not worried about my job going away. I'm happy to be focusing on the hard things, and empower my clients to do as much as they can on their own. They are delighted to not have to "bother me" for small changes when I'm working on bigger features for them. They're able to save money and time. It's truly a win-win.

Another client had a very complex system that was built by a third-party vendor and written in Python. They brought me in to help simplify the system. In this case, they actually did have developers on the team, but the developers didn't have much Python experience. I actually rewrote the entire system in TypeScript. It was a fantastic opportunity to clean things up and simplify. I wrote it in a way that it would be intuitive to them, so the training only took an hour or two. I was delighted to see the developers confidently making changes to the system themselves for the first time ever, and with ease.

A Chinese proverb says, "Give a man a fish, and you feed him for a day. Teach a man to fish, and you feed him for a lifetime." I say, "Make a change for a client, they'll be happy for a day. Empower your clients to make changes themselves, they'll be happy for a lifetime."

Published on December 10th, 2024. © Jesse Skinner

Autumn: A time to simplify

A cup of tea in autumn, fallen leaves on grass in the background

Today is Battery Collection Day in my city. A chance to say goodbye to all those dead batteries I've been collecting all year. I put them out with the many bags of dead leaves I raked this week. There's also a recycling box full of old paperwork I managed to get rid of while cleaning my office.

Autumn is naturally a time to purge and simplify. Animals retreat into their homes, stockpiling food or preparing for hibernation. Trees, anticipating the destructive force of winter, pull their energy inwards and shed their leaves. Farmers harvest the year's crops and sell what they can, or store some away for the cold months.

Coincidentally, or maybe not, I also feel a deep urge to simplify my own life, to pare down, to have less, to do less. I'm saying "no" to more opportunities, the ones that don't feel like they fit. I have my few favourite clients, and I'm not looking to take on new work. I'm looking to declutter my house, to sell, donate or discard items which I don't need.

I feel a desire to finish things instead of starting new things. I'm playing video games I started when I was a child but never finished. I'm reading books that sat with a bookmark in them for years. I'm checking items off my To Do List that have been on there all year. I'm filing taxes and clearing out drawers and getting things done. I'm drinking tea that has sat in my cupboard all year, enjoying tossing the empty boxes away.

There's a coziness that comes with simplifying. As I check off each task, discard each item, or finish each project, my world feels calmer.

Eventually Winter will be here, a time to hunker down and enjoy the simple life. Eventually it will be time to start new projects, to expand my world and embrace the excitement. My wife will be having a baby, and there'll be new life in our home, a new beginning.

For now, though, you'll find me drinking tea and trying to finally beat Final Fantasy on the NES.

Published on November 5th, 2024. © Jesse Skinner

Finding time for side projects

In many ways, time has been going very slowly amidst this pandemic, as we've all waited for case numbers to come down, lockdowns to lift, and vaccines to be tested. In other ways, time has been flying by. It's hard to believe I bought joyofsvelte.com almost seven months ago, and my initial Spring 2020 launch date is already months behind us.

I've never launched a product on my own before. I didn't realise how different it would be recording videos for a paid video course compared to making free videos for YouTube. If I'm going to expect people to pay, these videos have to be absolutely perfect. That means when I record them, I need to have a large block of uninterrupted time, completely free of distractions, and I need to be well-rested, in a good mood, full of joyful energy and inspiration.

Well, I have a four-year-old at home. I absolutely love being with my son all day, but there's definitely not much stillness around here, and any extra energy is either spent on getting some freelance work done, cleaning up the house, or trying to fit in a grownup movie or game before bed.

Last weekend, my wife took my son to a socially distanced birthday party, which marked the first time I had the house to myself in four months. I got to sleep in too, so I was well-rested, in a quiet house, full of joyful energy and inspiration. It was time to finally record. And I did! I recorded two more videos. Well, one and a half before they came back home. But I had momentum, so while we let my son quietly play Mario Kart, I went and finished the second video!

It's hard to find time for side projects. It's even harder when you have such high standards for that time. They say that perfect is the enemy of good, and I'm coming to realise that something like a video course can never be perfect anyway. I can only do my best with the time and energy I have available. I'd rather finish this course and share my experience and insights on using Svelte with the world, than to plan it forever and never launch.

If you keep calling it a side project, it'll keep getting pushed to the side.

I wrote that tweet back in May and obviously I've failed to take my own advice. But I'm not giving up. I'm going to keep at it and keep trying to find the time. We're probably going to keep my son home from school this fall, so it doesn't look like I'll have a quiet house for a long while. I'm going to have to get creative and find a way to make it work.

I hope you're able to find some time for your own side projects too, and know that you're not alone in that struggle. We usually only see people launching projects once they're already done. I'm sure there are countless more unfinished and unlaunched side projects that the world will never know about. Don't let your side project become one of them.

Published on August 1st, 2020. © Jesse Skinner

5 Reasons Freelancers Can Succeed in a Shrinking Economy

Like many people, I've been a bit obsessed about the economy lately. I'm wasn't sure whether or not to be scared, and to be honest I still don't. But I did think of some reasons freelancing might be a safe place to be.

  1. You have a diversified clientele. Your clients can be anywhere in the world, and you have many of them. And if you're lucky, you have more than enough work to fill your time. No matter how bad the economy gets, there should still be some business available.
  2. You have very little overhead. For most freelancers, all you need to work is a laptop and the Internet, both of which you'd probably have even if you weren't freelancing. You probably pay $10/month for your web site hosting, but otherwise you don't have a reason to borrow money. The gears of the credit crunch don't touch your business.
  3. You can drop your prices whenever you want. If you find less people can afford what you're charging, you'll be able to adjust accordingly. If you have a job and they decide they can't afford you, then you get laid off.
  4. The Internet is the place to be for self-employed professionals. With the considerably low cost of having the Internet, I would assume that a lot more business will happen online as more people become self-employed and work from home. The number of people you can potentially connect with online feels infinite.
  5. Businesses who don't want employees might turn to freelancers. Who knows, maybe in uncertain times, more business will want to hire freelancers on a contract basis rather than dedicate to hiring an employee they don't know if they'll be able to keep.

For those of you who don't freelance, I'm not suggesting you quit your job and start freelancing tomorrow. You'll have to decide that for yourself. If you want to start freelancing, I would suggest is to get the ball rolling on the side while you have a job. Get that website up and get some presence on the Internet. That way you'll have something to fall back on if you lose your job.

So things don't look too bad for us freelancers. How about you? Have you noticed the shrinking economy having a direct effect on your business or job? What do you think we can expect?

Published on October 24th, 2008. © Jesse Skinner

Wanted: Ajax Developers

I'm starting to get really swamped with work, and it's about time I started looking for some great talent to help me out with cool projects like FlickrCash.

Here's what I need you to be:

  • You're a self-employed individual (no teams or agencies, please).
  • You're freelancing full-time (at least 20 hours per week).
  • You are an expert in JavaScript, Ajax, CSS and XHTML.
  • You're always doing your best to produce work that is valid, accessible, and uses JavaScript unobtrusively.
  • You're at least familiar with jQuery. (You don't have to be an expert because jQuery is easy to learn.)
  • You're very experienced programming on the server side, especially with PHP and MySQL. Ruby on Rails experience is helpful too.

If this sounds like you, drop me a line and let me know. Please give some details like where you live, how long you've been freelancing, what kinds of projects you like to work on the most, what your hourly rate is, etc. I'll be in London for the next week but I'll email everyone back as soon as I can. Thanks!

Published on April 18th, 2007. © Jesse Skinner

Freelancing: First eight months

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.

Published on April 8th, 2007. © Jesse Skinner

Freelancing: First two months

It's been two months now since I announced I would start freelancing full-time, and hardly anything has gone the way I expected. Here's a little list of some of the things I've learnt or found surprising:

  1. You don't work as many hours in a day as you think

    Originally, when trying to figure out how many hours I'd be working per day, I just figured I'd do the same I did at my day job: 8 hours, from 9 to 5.

    The first time I tried to work that long, I realised it just wasn't going to happen. I discovered that it takes me about an hour of checking email, reading news, etc. to wake up enough to start working. Then, I can only work about 2 hours straight before my mind turns mushy and I have to take a break.

    I quickly realised that my prime working length was around 5 hours in a day, spread out over a period of 7 or 8 hours. But when you're billing by the hour, you really should only charge for the time worked, not the time eating lunch or surfing the web. This is a major difference between freelancing and a regular job.

  2. Scheduling can be very hard

    Scheduling is a juggling act based on a few difficult tasks: estimating how long it takes to do something, and figuring out when you'll have time to do that work. Multiply these simple looking problems by the fact that you'll occasionally be stuck waiting for something from clients. This can create these weird bubbles in time where you have nothing to do, but know that a few days from now you'll have way too many things to do.

    With web development, the size of projects can vary from an hour or less to over 400 hours of work. It's especially hard to deal with very large projects. You can say it'll take 100 hours, and that it'll take a month to work those hours. What do you do while you wait for the client to get back to you - tell everyone else who asks for work that you're all booked up? Then what happens if the project never happens? You get screwed!

    I'm starting to figure out I have to just explain my situation to my clients, tell them I don't know exactly when I'll have time, but that I should be able to finish within the next month or two. I'm also being careful not to commit more than maybe a third of my time to any one project, because anything can happen. The more flexibility I can work in, the better.

  3. Freedom isn't free

    Probably the best part of freelancing is the freedom to work when and whereever you want. While this is true in theory, when you schedule work for yourself, you have to make the commitment to actually work those hours. If you don't, well, you'll either have to work extra hours later or else deliver things late. These are the only stresses that really force you to work, but I'm glad that they're there, or else I would probably be taking off way too many days.

    Freedom also gives you the opportunity to find your own rhythm. I'm starting to think that I may work better in the evenings, though my girlfriend isn't so excited about that idea. It's actually not so easy to figure these things out, something you don't have to think about when you're told exactly which hours you have to work at.

  4. No time for blogs

    When I had a day job, and I wanted to take a little break, I just loaded up Bloglines and tried to catch up on the 200 or so feeds I subscribe to. Now, I can say I haven't read any of them since I went completely full-time. You may also have noticed that I've hardly blogged at all during this time, either.

    The reason is, now that the computer at home is where I work, when I take breaks or stop working, I want to get as far away from the computer as possible. It's like blogging and even reading blogs is a part of work that I need to schedule in or make time for, except it seems like the least important thing I have to do, so I never end up with time for it.

  5. It's not so hard to find work

    I once told a guy who worked at a web development company that I was about to start freelancing. He said, "That won't work. When will you have time to find clients?" I haven't had that problem at all.

    Okay, I do have the advantage of having this blog. Nearly all of my clients come from my Hire Me page. But I'm not scared that this will stop. I know that I can easily find more work through sites like Rent A Coder or Guru, even if it pays a bit less than I prefer. I could also step up my marketing efforts at any time (which means doing any, since right now I'm doing practically none).

    Okay, it's true, I don't have a lot of time to go find clients. But if I ever ran out of work, I'd certainly have the time to find new clients. It should balance itself out quite well.

So there's some of the things I've learned. Do any other freelancers out there have anything to add to this list?

Published on October 8th, 2006. © Jesse Skinner

Finding a job as a web professional

If you're a web professional looking for a job, or looking to find a better job, there are some really great job boards to keep an eye on:

  • 37signals Job Board

    This is a great site to find some of the best jobs out there. Many of them are looking for Rails developers, but there are other development, design and management jobs. Plus, I think it's a good sign when a company knows about 37signals.

  • jobs.rubynow.com

    Certainly the best place to find a Ruby On Rails job. There's new postings nearly every day.

  • Vitamin Job Board

    There's a nice variety of web professional jobs posted here, though mostly centred around development.

  • CSS Beauty

    If you're passionate about web standards and semantic markup, there's probably a good job for you on here. I bet it would be nice to work in a company where you don't have to convince anyone about the benefits of web standards.

  • craigslist

    If you know the city you want to work in, Craigslist is a great place to look for a job. It doesn't have every job, but in my experience the companies that post on there tend to be at least a little hip. The squares probably haven't even heard of craigslist.

  • Indeed

    Indeed's like the coolest job search out there. You can put together a complex search string and search across a number of job boards (including craigslist). Then, you can subscribe to the RSS feed for that search. This can be really great if you want to specialize in a particular technology or filter out all jobs mentioning ASP.NET.

When looking for a job, it helps if you either live in a great location like California, New York or London, or you're willing to relocate. Who knows, though, maybe your dream job is just around the corner.

I think all of these job boards have RSS available, so you can just subscribe now and keep an eye on the results while you mull over quitting your current job.

Published on August 17th, 2006. © Jesse Skinner