As I mentioned last July, I've been working as a software consultant, as a subcontractor for
prog. So, how's it been going?
First off, I love working from home. There's no commute, no need to get dressed, no coworkers to interrupt me, I can listen to loud music, and I can take a nap whenever I like. And it helps that I like my apartment and I like my neighborhood.
The work itself (LAMP apps) has not been super-exciting, but interesting enough to keep me from getting bored. Working in Perl has not been as much of an issue as I feared; it's certainly got its quirks and aggravations, and the fairly lax documentation standards of the Perl community makes it a bit more difficult to learn for someone like me who's used to rigorous language specifications (like Scheme or Common Lisp or Java or ECMAScript). But, at the moment, I think I actually prefer Perl to C++ or Java. A bigger frustration is dealing with somewhat flaky third-party libraries, like HTML::FormFu, for which I've already submitted several patches. But that sort of issue is going to come up in any non-trivial project no matter what language you use.
Being able to work whenever I want to is somewhat of a double-edged sword. I can sleep late, I can see afternoon matinees, I can work in small chunks spread out whenever it's convenient, including late at night or on the weekends. But, just like when I was working on my dissertation, I don't always have the discipline to make myself actually spend enough time working. At my current contract rate, I need to work an average of 50 billable hours a month to live comfortably, and about twice that to match what I would expect to be making in a full-time salary job (after subtracting health insurance and self-employment tax). I billed 60 hours in the first three weeks of December, so I think it's doable, at least in bursts; I think I can sustain a 60-80/month pace, maybe more, if I can get into a rhythm. But that remains to be seen.
80 hours a month doesn't sound like a lot: that's less than four hours per weekday. But there's a difference between total time spent "at work" and actual billable hours. I use FreshBooks for time-tracking (on
prog's recommendation); I turn the clock on and off whenever I switch between working and checking email, or surfing the web, or playing FreeCell. I'd be doing all that stuff if I were sitting in an office at a 9-5 salary job, but there's no clock to turn off there. And it's pretty surprising how low my natural ratio of work to non-work seems to be; it varies, depending on what I'm doing—higher when I'm deep in some complicated coding task, lower when I'm switching between several small tasks, or when I'm stuck on some design issue or tricky bug—but I think it averages close to 1:1. In other words, that 4 hours of billable time per day is about 8 hours spent at the computer in "work mode". So it's pretty much full-time.
Another issue is that the line between billable and non-billable is rather fuzzy. I'm essentially new to Perl (I did a little bit of Perl 4 programming in the early '90s, just enough to scare me away from it for what I thought was for good), not to mention Catalyst and the other tools we use, so I spend a fair amount of time reading manuals and doing experiments to learn the ropes. For the most part, I don't count that time as billable; I figure, since I'm subcontracting for
prog, I shouldn't bill for time spent doing things that
prog wouldn't have to do, and he knows the tools a lot better than I do.
I also go back and forth about whether to charge for time spent in meetings, or in writing email to the client, or other work-related time that is not actually me sitting at a keyboard editing code. And, in theory, I could even be charging for some of those email/freecell breaks; I read about a study recently [citation needed] that said that people who took frequent breaks were more efficient than those who worked uninterrupted for long stretches of time, because those breaks help the mind avoid fatigue and even unconsciously work on solving problems while you're concentrating on something else. But, all three of the clients I've worked with so far have at some point pushed back a little about what we charge them for, so I've been getting more conservative about what I bill.
This has actually been my main frustration with the contract-programming lifestyle. I think it's a real drag on my productivity, having to constantly make that decision of whether I'm on the clock or off the clock. There's also the question of coming up with estimates, and how to deal with going over time: you can charge for all time spent regardless of the estimate; you can charge up to the estimate and just eat the extra time spent; or you can aggressively cut corners to make sure you always finish by the estimated time. The first choice seems like the right one, as long as you make it clear to the client that an estimate is only an estimate (and if you're conservative enough with your estimates that you come in under time as often as over time). But there's not a lot of wiggle room when we have very cost-conscious clients (and in one case, they're on a fixed-amount academic grant), and it becomes tempting to go with the third choice. Except, I really really hate having to cut corners; that was a big part of why I went to grad school, in order to be able to get research-oriented jobs where it isn't all about doing whatever it takes to ship a product on time. It's just too frustrating to have to do the quick-and-dirty papering-over that that requires, especially when those kludges start to build up and ossify and make the job a lot harder in the long run. So then the second choice becomes more appealing; I can justify it to myself by saying I'm just satisfying my own perfectionism, or else chalk it up as a learning exercise. But it still makes me uneasy to consider basically working for free.
Finally, there's the question of having enough work to do. So far we haven't totally run dry, but we're about to finish up a project that will leave us with only one active client.
prog assures me that this client (his longest-running) is steady and deep-pocketed enough to sustain both of us for a good while. But, I have not yet been formally authorized to start working on that client's project; I'm not sure when that will happen, and I'm not even entirely sure that it will happen at all, which has been stressing me out. My subcontracting arrangement with
prog is that he does all the client pitching/haggling/contract stuff, so that I don't have to deal with it, in exchange for a portion of my billed rate; I am happy with this, except for the fact that I'm entirely dependent on him to find enough work for me to do. And I don't like putting that pressure on him, either. It might be good to have my own clients—for one thing, I could probably have more control over project architecture (e.g. language; sadly, I doubt I could convince anyone to let me use Scheme, but Python might be a happy medium). But I really have no idea how to go about finding clients, especially the more institutional-sized clients who wouldn't haggle about hour-by-hour costs, and I doubt I would be able to deal with the self-marketing and networking that is required.
Anyway, that's my current job state. In theory, I still think this can be an ideal situation for me, especially if I can get efficient enough to both work enough to pay the bills and also have free time to work on my own projects, which could potentially blossom into some sort of money-making ventures of their own. But right now it's a bit of a struggle, and if things don't change appreciably in the next few months I may have to get back into the salary-job hunt. We shall see.
First off, I love working from home. There's no commute, no need to get dressed, no coworkers to interrupt me, I can listen to loud music, and I can take a nap whenever I like. And it helps that I like my apartment and I like my neighborhood.
The work itself (LAMP apps) has not been super-exciting, but interesting enough to keep me from getting bored. Working in Perl has not been as much of an issue as I feared; it's certainly got its quirks and aggravations, and the fairly lax documentation standards of the Perl community makes it a bit more difficult to learn for someone like me who's used to rigorous language specifications (like Scheme or Common Lisp or Java or ECMAScript). But, at the moment, I think I actually prefer Perl to C++ or Java. A bigger frustration is dealing with somewhat flaky third-party libraries, like HTML::FormFu, for which I've already submitted several patches. But that sort of issue is going to come up in any non-trivial project no matter what language you use.
Being able to work whenever I want to is somewhat of a double-edged sword. I can sleep late, I can see afternoon matinees, I can work in small chunks spread out whenever it's convenient, including late at night or on the weekends. But, just like when I was working on my dissertation, I don't always have the discipline to make myself actually spend enough time working. At my current contract rate, I need to work an average of 50 billable hours a month to live comfortably, and about twice that to match what I would expect to be making in a full-time salary job (after subtracting health insurance and self-employment tax). I billed 60 hours in the first three weeks of December, so I think it's doable, at least in bursts; I think I can sustain a 60-80/month pace, maybe more, if I can get into a rhythm. But that remains to be seen.
80 hours a month doesn't sound like a lot: that's less than four hours per weekday. But there's a difference between total time spent "at work" and actual billable hours. I use FreshBooks for time-tracking (on
Another issue is that the line between billable and non-billable is rather fuzzy. I'm essentially new to Perl (I did a little bit of Perl 4 programming in the early '90s, just enough to scare me away from it for what I thought was for good), not to mention Catalyst and the other tools we use, so I spend a fair amount of time reading manuals and doing experiments to learn the ropes. For the most part, I don't count that time as billable; I figure, since I'm subcontracting for
I also go back and forth about whether to charge for time spent in meetings, or in writing email to the client, or other work-related time that is not actually me sitting at a keyboard editing code. And, in theory, I could even be charging for some of those email/freecell breaks; I read about a study recently [citation needed] that said that people who took frequent breaks were more efficient than those who worked uninterrupted for long stretches of time, because those breaks help the mind avoid fatigue and even unconsciously work on solving problems while you're concentrating on something else. But, all three of the clients I've worked with so far have at some point pushed back a little about what we charge them for, so I've been getting more conservative about what I bill.
This has actually been my main frustration with the contract-programming lifestyle. I think it's a real drag on my productivity, having to constantly make that decision of whether I'm on the clock or off the clock. There's also the question of coming up with estimates, and how to deal with going over time: you can charge for all time spent regardless of the estimate; you can charge up to the estimate and just eat the extra time spent; or you can aggressively cut corners to make sure you always finish by the estimated time. The first choice seems like the right one, as long as you make it clear to the client that an estimate is only an estimate (and if you're conservative enough with your estimates that you come in under time as often as over time). But there's not a lot of wiggle room when we have very cost-conscious clients (and in one case, they're on a fixed-amount academic grant), and it becomes tempting to go with the third choice. Except, I really really hate having to cut corners; that was a big part of why I went to grad school, in order to be able to get research-oriented jobs where it isn't all about doing whatever it takes to ship a product on time. It's just too frustrating to have to do the quick-and-dirty papering-over that that requires, especially when those kludges start to build up and ossify and make the job a lot harder in the long run. So then the second choice becomes more appealing; I can justify it to myself by saying I'm just satisfying my own perfectionism, or else chalk it up as a learning exercise. But it still makes me uneasy to consider basically working for free.
Finally, there's the question of having enough work to do. So far we haven't totally run dry, but we're about to finish up a project that will leave us with only one active client.
Anyway, that's my current job state. In theory, I still think this can be an ideal situation for me, especially if I can get efficient enough to both work enough to pay the bills and also have free time to work on my own projects, which could potentially blossom into some sort of money-making ventures of their own. But right now it's a bit of a struggle, and if things don't change appreciably in the next few months I may have to get back into the salary-job hunt. We shall see.
From:
no subject
Yeah, Larry Wall's approach to Perl was (is?) to treat it like a natural language. The result is a grammar that doesn't feel much better defined than a natural language. (Realistically, it must be better defined since computers are able to parse it.) Perl 5 is a definite improvement over Perl 4. Perl 6, if it should ever be deployed, looks like it may be an improvement over that.
From:
no subject
From:
IANAL, but I do help run an IT consulting shop...
As for going it on your own, unless you have a strong business background, you're probably better off giving up some of your rate for someone else to handle it. There is a lot more to it than just finding clients and negotiating rates (both of which are done here by trained, experienced salespeople who do nothing but that all day long). Billing, collections (can you wait 60-90 days and make half a dozen phone calls before you get paid?), taxes, insurance (many companies, especially larger ones, require contractors to be bonded and insured -- this can be thousands of dollars out of your pocket before you ever see a dime from the client), all of this will cut into your time and your wallet anyway. Unless you enjoy running a business as much as you enjoy coding, you'll probably be happier leaving it all to someone who does.
From:
Re: IANAL, but I do help run an IT consulting shop...
Yeah, the key term is "reasonable clients".
From: (Anonymous)
Nice post...good read
From:
no subject
I am also trying to track my hours -- right now nobody is paying attention but me, but I want to make sure I feel good about the amount of time I'm putting into Berkeley and HeadLamp. It's definitely hard to figure out what time counts as billable. I'll check out the time tracking software you mentioned.
I'm using Python now after years of Perl and enjoying it quite a bit, though I still like Perl too. I'll be interested to hear what you think if you ever end up working with Python.
From:
no subject
I think you are short changing yourself and making things needlessly complicated and stressful. My definition of billable hours would be things I was doing that I wouldn't be doing otherwise. It doesn't matter what Jason can do as it isn't like you are going to charge clients extra if you have a skill that he doesn't have. Besides the client gets the advantage of getting the work faster than if Jason did everything himself even it requires you to brush up on a subject. Meetings also I would put clearly into the charge pile. Assumably you have meetings and send e-mails to improve the outputs to clients and not for your general health. If the meetings are more general purposes, I'd bill Jason directly. Breaks are trickier, but I'd say a paid 15 minute break after 4 hours of work is reasonable.
From:
no subject
That was certainly my attitude going in. But it's hard to keep that up when a 20-hour estimate ends up taking 30 hours, or when the client says "you have 10 hours left and that's it".
From:
no subject
From:
no subject
When I work from home I usually charge at about half rate ("I sat down at 9:30 and here it is 2:00 -- but I did three loads of laundry and made cookies, so that's about 2 net hours").
But it's different because it's only one employer and really I ought to be a W-2 employee, but we're all too lazy to reevaluate.
From:
no subject