I’ve now been freelancing long enough that I can talk about some of the things I’ve learned from it. And without a doubt, the biggest thing I’ve learned is the link between effort and reward.

In a normal job, this link is pretty nebulous. You can work for two hours, catch up on some blogs or TV, and run some errands, but if you manage to say one or two clever things in front of your boss that day you will probably remain employed.

If you’re in the top 10% smartest workers, an average of two or three hours of work a day is probably enough to exceed the productivity of almost all your coworkers, and not only keep you employed but keep your bosses somewhat impressed. You can earn a comfortable living this way, and have a more relaxed lifestyle than just about anyone who’s not retired. But you will not be challenged.

Billable Hours

Freelancers usually bill by the hour. An hour of hacking on the project is billable. An hour of reading blogs about technologies you might consider using in the project a few months from now is not billable. An hour spent at the grocery store at mid-day is not billable. Even twenty minutes spent “resting” in the “restroom” is not billable.

You might not believe me unless you measure, but I think an average workday for most computer programmers involves about 3 billable hours of work. Furthermore, there is great variance in the amount of billable time you’ll get each day over a week or two. Some days you’ll rack up 6 or 7 billable hours, maybe even 9 if there’s a release coming up and you’re loading up on coffee. But you’ll easily revert back to a low average with a day of zero billable hours.

I found this out when I started noticing that on a low-energy, mediocre day of freelancing, when I felt I had basically been at work all day, I’d often end up with as little as half an hour of billable time.

Half an hour. I don’t think I’ve ever been exceptionally stupid or exceptionally lazy, but I do tend to procrastinate, and by golly, I’m good at procrastinating. I am so effective at delaying work that I didn’t even realize how effective I was, until I thought about how much money I made on one of these days and realized that it wouldn’t even cover my rent for the day. Let alone ramen noodles.

The billable hour is, to me, a matter of professional ethics. I don’t assume that a workday consists of eight billable hours, and just parcel up whatever I did that day into those buckets. I consider time billable when I’m actively creating value directly for the client. I’m sorry that sounds nauseatingly corporate, but it’s the best I could come up with.

So getting more billable hours, i.e. making more money, is not a matter of being clever or knowing some trick. It’s a matter of stamina.

Programmer Endurance Training

Once you start to see your monthly paycheck as an endurance challenge, a few things change. You start to value consistency more, and brilliant ideas less.

That was kind of hard to write. Putting it that way seems to hide the intellectual challenge of making software, as if it’s just a matter of putting in the time and following a plan, like painting a house. What if I just become a thoughtless code factory, like some sort of pathetic outsourced ASP.NET programmer who just wishes he could charge by the line of code?

That hasn’t happened yet. Instead, I’m awakening to the patterns of lies I used to tell myself about the quality of my output. I know I can’t reach perfect consistency: sometimes I’ll have awesome days when I get a zillion things done in six hours, and other days I’ll only be able to crawl along for four hours of work before some welcome distraction proves irresistible.

On the other hand, I’m now acutely aware of when something I’m doing doesn’t qualify as work. I have a good idea of how many billable hours I can work daily without burning myself out. And this way of thinking and planning is useful not only for doing the work that pays my bills, but for any work I care about.

And so, after a few months of freelancing, I know that I have learned to work much, much harder than I ever did back when I had a salaried job. And I can work that hard for a client, or for myself, or a bit of each.

Really, I can hardly believe how lazy I was.

We organizers have been working hard and are pleased to bring you:

BarCamp Boston 3

May 17-18, 2008

BarCamp is an unConference, organized on the fly by attendees, for attendees.

There is no registration fee, but you don’t just attend a BarCamp — you can participate in discussions, demo your projects, or join into another cooperative event.

Topics may include, but are not limited to: open source software, startups, UI design, entrepreneurship, AJAX, hardware hacking, robotics, mobile computing, bioinformatics, RSS, Social Software, programming languages, and the future of technology.

More information at http://barcampboston.org/. Hope to see you there!

Writing a program is fun. Like writing an essay, the endeavor has two kinds of results: stuff that gets written down, and stuff that changes the way you think. Sometimes you’re aiming for the written product, to fulfill some external obligation. But other times, you’re aiming for enlightenment. The end product is irrelevant next to the understanding you developed in making it.

Most computer book authors wouldn’t claim to be writing about enlightenment. They’ll tell you that if you learn their language, framework, or methodology, you’ll win clients and impress coworkers. In this category there are a lot of useful introduction and reference books, along with a lot of buzzword-laden crap. But there’s another genre altogether, that doesn’t make these claims; it reflects the geek tradition of explaining interesting because they’re interesting. Looking back on experiences that really shaped my thinking as a hacker— a great algorithms course in college, a talk on “Tricks of the Perl Wizards” by Mark-Jason Dominus, Philip Greenspun’s book on web publishing— it’s clear that the most profound things I’ve learned spring from that tradition. Practical Ruby Projects is an exceptional book because it does, too.

Topher Cyll, author of the book and Cambridge resident, is a friend of mine. In college, Topher and I worked together on a community website for students as well as spending a lot of time in the same computer lab. In both roles, he was always full of clever and thoughtful ideas. Practical Ruby Projects is full of such ideas, expanded to project form and in an approachable buffet layout. The projects are indeed eclectic, from computer-generated music to gaming to genetic algorithms, but their common strand is the curiosity they all reward. If you’re one of the unusual folks who maintained this curiosity beyond school, or perhaps if you’re a professor who wants to assemble an intermediate projects course that will appeal to the most curious and passionate of students, this book is for you. With books like this and an open, curious mind, enlightenment might still be unreachable but at least you’re getting closer.

We do have small, yet vibrant Ruby community in the Boston.

We have regular monthly Boston Ruby Group meetings (every 2nd Tuesday of the month). In fact, there’s one tonight.

boston.rb has also been started recently, largely inspired by seattle.rb. The idea is that we get together on the 1st and 3rd Tuesday of the month, hack on some code for a couple of hours, and eventually produce something worthwhile.

Some of the things we’ve done at these hackfests so far:

I myself only started getting involved in the past few months. It’s pretty surprising though, because I feel like I’ve grown a lot as a rubyist in just this short time, all from getting to know other locals, and learning from their ways.

If you’ve living in isolation from your Ruby community, I highly suggest you check it out. Who knows what you might learn?

Want to learn all about Google’s new mobile platform, Android? Google is running a one-day event at the Charles Hotel in Harvard Square. The event is free but registration is limited. See the blog post and registration form.

I’m happy to see even the slightest hint of freedom in mobile software, although I think the best is yet to come in Android. Sure, they can have a nice Java application SDK, but in a world where most important apps are web apps, mobile phone programming will always be a second priority. Why not focus instead on building a really kickass mobile web browser, with something like Google Gears integrated in order to allow connectionless operation?

Maybe I’ll go and ask that question in person. ;)

I got an email today from the PR rep for another YCombinator clone, based in Philadelphia:

DreamIt Ventures is a new pre-seed venture firm launched last week by three Philadephia-area tech entrepreneurs. DreamIt basically takes the Y Combinator approach to funding with the noted difference of providing the entrepreneurs (if they choose) with strategists to help run their new businesses. [press release; discussion on hacker news]

Boston-and-Silicon Valley-based YCombinator pioneered the “buncha dudes make a company over the summer” approach to funding, and as far as one can tell from outside, they’re doing pretty well. They’ve got Paul Graham’s recruiting cachet, plenty of industry connections, and a few years of experience. The clones (Techstars in Boulder, CO; SeedCamp in Europe; LaunchBox in DC; and now DreamIt in Philly) throw in a few variations, touting their own strategists or connections. The ones that advertise teaming with the local lawyers start to scare me — the last thing most 3-month-old companies need is a business prevention department.

But let’s put aside the pursuit of innovation here. Regular VCs don’t try to compete by developing innovative ways to invest; they compete for capital and deal flow and try to pick winning investments. YC may be famous but, with only 25-35 investments a year, must be turning down some good candidates. Can’t our clones fund the best of the rest and do almost as well?

Maybe. Venture investments are very risky; people often guess that 10% perform well and 90% tank. If all the founders apply to YC first, and if YC has a very good nose, they could cherry-pick virtually all of the promising investments before the clones ever get a chance.

On the other hand, seed investments aren’t a sophisticated nation-wide market. If an investor knows a kid who’s got some energy and brains, a little motivational nudge can turn that geek into a business. Getting better connected in schools and companies, especially around a specific industry or in an underserved locale, can probably help a lot.

On the other other hand, though, lowering barriers doesn’t always serve the investor well. Aren’t people who’re willing to move to Silicon Valley more likely to work hard and sacrifice for the business? I mean, we’re talking about an environment useful for running computer companies and playing frisbee, but virtually nothing else (maybe In-N-Out Burger). What about the “strategists” that DreamIt plans to offer? Who’s a better founder: one who will learn accounting so he can understand all parts of his business, or one who thinks an outsider with some stock and a salary can handle that “while I focus on the big picture”? A friendlier investor may be inviting more extra losers than winners. Perhaps the goal should be to tear down social barriers (risk stigma, family expectations, getting taken seriously in deals) while preserving barriers that test competence and perseverance.

In any case, it’s great to see this kind of venture firm growing. Despite the competition, Paul Graham et al. must feel at least a little vindicated to see their hack so widely duplicated. But some–perhaps most–of these firms are bound to fail. How many can succeed? What will the next round of successful “summer-stage” firms look like?

A recent post on Hacker News asks about this question on YCombinator’s just-opened application for their Summer 2008 seed funding round in Boston:

Please tell us about the time you most successfully hacked some (non-computer) system to your advantage.

That’s just a fun discussion question, with a few good stories in the responses. My answer, still kinda computer-related, is that time in high school that my friends and I built a computer lab so we could study Computer Science AP. (Although my treadmill desk and simulation of a door using a paperclip also came to mind.)

What’s yours?

It’s been over 9 months since BarCamp Boston 2 (March 17-18, 2007). So it’s time to start planning the next one! I’ve contacted the MIT E-Club officers about using the Stata Center again, but haven’t heard back yet. Do you know someone at MIT who can help? Or another venue that’d be suitable for a BarCamp?

Venue selection is always the biggest hurdle, but once we’ve got a date and place we’ll be in good shape for an excellent BarCamp.

Cross posted from my blog, but I figured people may be interested.

Sunday marked the concussion of No Fluff, Just Stuff for the Boston Fall 2007 event. To put it simply: it was a truly amazing experience.

If you aren’t familiar with NFJS, it was started just over six years ago by Jay Zimmerman out in Denver, Colorado. After many discussions with members of the Boulder Java User’s Group, it was decided that there weren’t any local conferences that focused on Java and agility, and that were strictly technical. Shortly thereafter, NFJS was born with a three-day symposium format. It was decided to cap the attendance at 250 in order to keep a high level of interaction between speakers and attendees. Each day has five concurrent tracks with a total of eleven 90 minute sessions with top-notch speakers from around the country.

I had the opportunity to speak briefly with Jay, and one thing I had asked was if much had changed over the past years. Apparently it had not. The particular format of the symposium works amazing well, with the small number of attendees, great speakers, and a high level of interactivity. Changing any of these would detract from what makes it so good, and would violate the original intent in which the event was started. Sure venues change, more schwagg is introduced, and technology continues to plow ahead, but at the heart, it’s really the same as it has ever been, and that’s a good thing.

The Sessions

There were a lot of great talks this year. Here is a list of sessions I had the opportunity to hit up:

  • Friday
    • JavaServer Faces: A Whirlwind Tour by David Geary
    • OSGi: A Well Kept Secret by Venkat Subramaniam
    • 10 Ways to Improve Your Code by Neal Ford
    • Keynote: No, I Won’t Tell You Which Web Framework to Use, or The Truth (with Jokes)
  • Saturday
    • Productive Programmer: Acceleration, Focus, and Indirection by Neal Ford
    • Productive Programmer: Automation and Canonicality by Neal Ford
    • The Busy Java Developer’s Guide to ClassLoaders by Ted Neward
    • Leveraging Annotations with AOP by Ramnivas Laddad
    • Birds of a Feather: Dynamic Languages with Neal Ford
  • Sunday
    • Software Development Risk Analysis Techniques by Mark Johnson
    • Adding Behavior to Java Annotations by John Heintz
    • Experts Panel with all speakers present
    • REST: The Basics and Not So Basic… by John Heintz
    • Refactoring Ant Builds with Ivy, Groovy, and Good Old Fashion Common Sense by Andrew Glover

If I can find public copies of any of these presentations, I’ll update this list with links.

Some future posts…

I found a few of the talks to be particularly fascinating, so I hope to follow up with several posts:

  • Productive Programmer
  • ClassLoaders
  • Annotations + AOP + Behavior
  • A summary of tips, resources, etc from everything

If you don’t see something about these in the next week or so, feel free to hassle me a little :)

Pseudo random thoughts, observations, and feelings

  • Things were pretty swagtastic this year
    • A pleather binder that zips close, came in extremely useful
    • A nice backpack, but I won’t likely use it…
    • A CD with all the presentations
  • The venue was the Framingham Sheraton
    • Great food
    • Great service and staff
    • Maybe a little overzealous on the AC in a few rooms
  • Being around smart and passionate people definitely rubs off
  • Definitely feeling
  • Each day felt much longer than it was, in a good way
    • Amazing amount of new material
    • Constantly experiencing paradigm shifts
  • All the speakers I spoke with were very approachable
  • A lot of people didn’t seem quite as engaged, as much as I was at least
    • Sitting leaning back during talks
    • Not taking notes
    • Not asking questions, or talking to the speaker afterwards
    • Not engaging in conversation with other attendees between sessions or at meals
  • Survey says…
    • Most people are on Java 1.5 now
    • Most of the people still on Java 1.4 are there because of WebSphere
    • WebSphere sucks
    • A majority of people are doing automated testing
    • More people are doing continuous integration
    • More people are using not struts, including JSF, Tapestry, and Spring MVC
    • Most people are pretty psyched about Groovy, JRuby, and Grails
    • Overwhelming majority of people are using Eclipse
    • Most of the speakers are now Mac users
    • Most of the speakers are using IntelliJ IDEA

Advice for potential attendees

The most significant piece of advice I can give is this: be engaged. You have an amazing opportunity to interact with experts in the fields. You are surrounded by feels geeks and hackers who take time off to go to these kinds of things. Talk to them! Take notes! Absorb!

Wrap it up, B

I really can enumerate enough how awesome of an experience it was. I’m feeling pretty pumped up to get back to development to put this new knowledge to use. If NFJS is coming to a city near you, take the plunge; you won’t regret it.

Here’s a roundup of the various Meetups happening in the next 30 days or so. Check out the meetup page for more details.

Tuesday, September 11th

Thursday, September 13th

Friday, September 21st

Monday, September 24th

Thursday, September 27th

Monday, October 1st

Thursday, October 4th

Monday, October 8th

Unscheduled thus far

Next Page »