dougo: (Default)
([personal profile] dougo Mar. 18th, 2010 04:37 am)
As I mentioned last July, I've been working as a software consultant, as a subcontractor for [livejournal.com profile] 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 [livejournal.com profile] 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 [livejournal.com profile] prog, I shouldn't bill for time spent doing things that [livejournal.com profile] 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. [livejournal.com profile] 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 [livejournal.com profile] 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.
.

Most Popular Tags

Powered by Dreamwidth Studios

Style Credit

Expand Cut Tags

No cut tags