Ideas are like rabbits

I’m not an advocate or follower of any particular productivity framework, or even that you should have one, but I’ve recently rediscovered a fragment of one that has been very significant. The short version is that writing down ideas makes room for more, the long version follows.

As hinted at in my previous post, I’ve been experiencing a bit of overwhelming intellectual stimulation lately. I credit this to my new freelancing ways. I can spend an hour, or a day following a thought, where before, I had to run it alongside my work responsibilities. Not to say I have no responsibilities to my clients, but I think I’ve set expectations to the point where I can balance things better.

Last week I was feeling a bit overwhelmed with tasks, and went back to a GTD technique which is to essentially write down everything you need to do. There is a cathartic aspect to this, as well as the feeling of “oh, well that’s no so bad” once you see the list. In the past, my list was 20, 30 maybe as many as 50 items. This time, I railed off over 200 in a row, and many more in the following couple of days. This did NOT instill a feeling of “oh, well that’s no so bad”.

Once my brain was sufficiently debriefed, I looked at the list. I noticed that most of the things were my own projects. Research this, test that, learn that, add feature X to library Y, and so on. It turns out that many of my todos were more idea-related than work-related. And almost everytime I looked at one, others would pop up. I guess this makes it more like mitosis than rabbits, but you get the idea, and rabbits are cuter anyways. Regardless, it was, and is, out of control, and it’s great.

This is not a new invention, it’s basically brainstorming, and there are other people doing it too. I think the part of it that’s new for me is that I’m not drawing any distinction between ideas and tasks, and I’m not seeing any value to doing so. I’m not getting overwhelmed by tasks I haven’t started because in fact, I have started them, by logging ideas related to them. For software at least, expressing ideas is not far removed from doing the actual work, so I’m almost tricking myself into being productive.

There are two problems, however. The first is that my list is scaling poorly, and there are no tools that work for me. I’ve tried mind-mapping in the past, and might try it here, but am not especially hopeful. The second problem is that I simply don’t have enough time to do it all, and I’m afraid no program will ever help there.

Freelancing vs. Contracting vs. Employment

I’ve been freelancing for a little over two months now, and already it has been an exciting, rewarding experience. I figured I would share a few observations.

What do I mean by “freelancing” as opposed to contracting. I admit there is no official differentiation of the two, this is strictly my own, and I apply it narrowly to software/knowledge work.

I see freelancing as the extreme end of transient employment. They may be hired on a per project basis, or a per day basis. There isn’t any implicit availability, they’re booked (and paid) or you’re not. They don’t go to meetings that aren’t very relevant, or get unwillingly reassigned. If there are no projects where you can offer expertise, you’re done. If a company tightens it’s belt, freelancers are the very first to go, with no notice, no severance.

I see contracting as provisional employees. They aren’t vested in the company, but they essentially perform like an employee. They probably go to company-wide meetings, fit into the normal reporting structure, etc. After the freelancers go, the contractors are next in line. Usually contractors are given time to “wrap things up” or have a planned end date.

Employees are, well, employees. They work for the company, and only for the company. Hopefully if the company makes a lot of money, the employees benefit, where the previous types don’t. Many people think employment offers job security, but short of official agreements like tenure or unions, I disagree. I define job security as the ability to get a job, not to keep one. I’m not cynical about fatcat CEOs laying people off for fun, I’m just realistic in terms of what employment actually provides.

The reason I choose freelancing is that I want to be intellectually promiscuous, at least for now, and I want that arrangement to be very clear to clients. I have a self-imposed 20 hour per client per week cap. This may sound silly to you, and it certainly hasn’t been popular with clients. It’s a tough sell, and it has cost me some otherwise good opportunities. I admit I haven’t really mastered it yet, but I think I’m getting better at it, and am grateful that my clients have been accommodating. On the other hand, I don’t think that I’d be nearly as stimulated as I am now, but that’s a topic for another post.

Why don’t websites have credits?

Engineers of any discipline are largely an anonymous bunch. You don’t know who designed the fuel pump in your car, I’d even wager it would be extremely difficult for you find out if you wanted to. You don’t know who wrote the code for the OS X Dock or Windows Start bar or who wrote the Like button on Facebook. These people made decisions that affect you deeply every day, and you have no idea who they are.

The most interesting part of this is that those people are OK with it. If you ask them (myself included) they will tell you that it doesn’t matter, that what really matters is the quality of the work and the enjoyment you had doing it. Unfortunately, I think we’re wrong.

Should they?

I can’t seem to come up with a good framework for who figuring out who wants credit, never mind who deserves it. If you so much as make a photocopy during the production of a movie, you’re probably in the credits with some high-faluten title like “First deputy assistant duplication specialist”. Music credits are tied to royalties and managed very closely. Most authors wouldn’t think about publishing something anonymously, nor would artists or sculptors. Artists always sign their work.

This is not even strictly a software issue. Video games list credits, often in the box and at the end of the game, and they even have a IMDB-like site. Nor is it an “arts & entertainment” issue, any credible scientific paper will cite other works and acknowledge contributions. Patents have names on them, even when assigned to a company.

A few software packages have listed credits. If I remember correctly, Microsoft did it on old versions of Word and Excel, and Adobe had it on old versions of Photoshop and Illustrator. I’m curious why those were removed, or at least hidden. “The Social Network” had something about Saverin being removed and re-added to “masthead” of Facebook (although I don’t know what or where that is).

So it would seem that we might be in the minority here, perhaps due to convention rather than any specific reason. And if there’s one thing that bugs an engineer, it’s deviating from standards with no good reason.

So let’s do it.

Why do it?

  • Pride in your work – Sure there is some pride in doing a good job anonymously, but wouldn’t be just a little more motivated or happy now that your name is on it?
  • Being a stakeholder – We’ve all done projects we didn’t believe in, and consoled ourselves with the fact that “it’s not my project”. Well, now it is.
  • Reputation – We’ve got our resumes, but credits will verify them.
  • Honesty/Transparency – There is no good reason to withhold this information, so it should be out there.
  • All that money they spent on school – Show your parents your name on a website and watch them smile.

So who’s get listed?

I think the short answer here is, everyone. Movies do it, why not websites? It could be just a big list of names, or something more detailed with contributions, dates, whatever makes sense. Let’s just start throwing some names up there, and let the de facto standards evolve on their own.

If you know of any major sites that do this well, put it in the comments. Similarly, if you can think of a good reason why this shouldn’t happen, I’d love hear about it.

Earlier to Bed, Earlier to Rise

About 6 months ago I shifted my schedule by 4 hours, literally overnight. Whatever I was up against, whether it was insomnia, sleep addiction, Delayed Sleep Phase Syndrome, or just being a night-owl, it was getting worse. Also, the summer was coming, I had a shiny new grill, and I wanted to get home early enough that I wasn’t using it in the dark. Much to my surprise, it actually wasn’t very difficult. Here’s how I did it:

  • Consistency – Probably the most important part. Go to bed at the same time every night, no matter how tired or wired you are. Lay there for hours if need be, in a few days you’ll be asleep earlier. Get up at the same time, no matter what, even on weekends. I had a few nights where I got 3 or 4 hours of sleep and needed energy drinks to get me through the day, but that changed fairly quickly. I was able to ease up on the schedule after a while, but I try not to deviate by more than an hour or two.
  • Don’t do it alone – I’m not sure I could have pulled this off by myself. Reeny didn’t even really have to do much, other than some encouragement and being an early-riser herself.
  • Get up first – I try to get out of bed first. Some mornings this aspect is what gets me moving. If she can get up, why can’t I?
  • Measure success daily – The point of this is to get up early, not to become an early riser. Even after 6 solid months, I know that I’d slip back to my old schedule within a matter of days on my own if I allowed it. But that’s OK.

Also, I changed my schedule a month or so before I changed my work schedule. I think this helped alot, because I didn’t have that additional stress.

The 3 Ingredients Necessary to Make a Really Good Developer

I’ve been doing development long enough that I can now look back and have some perspective on the art/craft/profession. I’ve been asked many times “how do you become a developer?” and I now have a decent partial answer. They are not being “super smart” or “good with computers” or things like that. I think those are artifacts of these other attributes. I’d also guess that these apply to engineering in general, but I’ll limit myself to my own turf.

Curiosity

Good developers have a compulsion to understand how things work. they open files with text editors to see if its just xml or a zip file with a different extension. They run benchmarks against things that don’t seem to matter. They add query parameters like debug=true to websites. They try to break stuff. And not just software, they probably know how an internal combustion engine or an air conditioner works. They probably can tell you a bit about how the minimum wage affects inflation. My grandmother used to give me old radios and gadgets strictly so I could disassemble them.

This attribute is probably the one that separates the wheat from the chaff the most. There are lots of people who can code, or manage a system, but the ones that excel will need to understand how things work, and know that every juicy answer yields even more delicious questions.

Focus

The ability/requirement to focus is the subject of many other blog posts, but I view focus in a slightly different way. Focus is not eliminating distractions or even maintaining “flow”, focus is the ability to keep a problem in your head until you’ve solved it. Distractions can hamper this, so can multitasking or other external factors, but good developers can work on something, go to lunch, or go home for the evening, and pick up right where they left off.

Hard Work/Genuine Interest

I think there is a certain amount of innate aptitude, but I don’t think development is an exception to the 10,000 hour rule Malcolm Gladwell popularized. Luckily, its a trade where we can log those thousands of hours at an early age and make it look like we’re goofing off. I started with LOGO in the second or third grade, moving onto translating my piano music into BASIC, learning that a coda is just like a GOTO. On to writing databases to track fantasy baseball status with MS Works, and so on. Sure, we spent many college nights taking over IRC channels with bots, and crashing MUDs with scripts and floods, and that may have looked like simple nerd mayhem, but those experiences have tremendous value in the “real world”.

You can know all the buzzwords and put on a good show, but you can’t really fake the level of interest that side projects demonstrate. There are plenty of good-enough developers out there who punch in and out, and there are even jobs where you do cool enough stuff that you don’t feel compelled to break out of the rut (we try to be this way), but if you still need to hack on your own, you’ve got potential.

Fortune smiles on those who smile back

I’ve always considered myself a pretty lucky person, whether it’s spotting opportunities, avoiding bad ones, getting good jobs, etc. This article claims that you actually do make your own luck, and the way that happens jives with how I go about things. Some snippets:

  • Lucky people tend to respect hunches
  • Lucky people try to introduce variety into their lives
  • Lucky people tend to see the positive side of their ill fortune

So, if you’re feeling unlucky, take a deep breath and try something new.

Buying a car

I won’t say I’m some kind of genius buyer or that I have a bulletproof system, but I think I’ve done pretty well when I’ve gone shopping for a car, and this article backs up some of my ideas. I don’t think any tricks or deceptions are really going to help you, your opponent in this game is likely to be much more experienced than you. My rules:

  1. Make it clear to the dealer that under no circumstances, no matter what, will you be making any decision today, and that you need real numbers, in writing. This is not a trick, you really do need to walk away and sleep on it. The pressure will mount when he realizes you’re serious, and it’s hard to resist, but it’s well worth it. You’ll have real numbers to review, show someone else, fit in your budget. If you get the “I can’t hold this car for you for any longer” line, ignore it. Either he’s bluffing or he’s going to sell the car to someone else. Either way it’s no big loss for you, there are always other ones out there.
  2. Say as little as possible (not difficult for me). The article mentions not talking about credit or how you’re going to pay for your car, which seems obvious to me. Don’t talk about trade-in (if pressed, be indecisive, “my sister might buy it off me”) or how long you’ve waited for this model to come out, or anything like that, until you get the numbers from #1. Do your research, but don’t go in with a bunch of stuff you found online about invoice cost and think you’re going to get the guy to sell the car and not make a profit, you’re not.

Other tips: If you’re leasing, buy early in the model year. If you’re buying, buy later. And try to take something off the lot, you lose alot of wiggle room when you need to order it.

Idea: DropSteam

Valve Software has a distribution platform called Steam. It’s very simple, and very nice. You buy a game through Steam, and download and install it. When you get a new computer, you sign into steam, and re-install all your games. Don’t play a game much anymore? Delete it, you can always go back and get it. No CDs, no need to back stuff up, etc.

Dropbox is a relative new service that let’s me have a folder on my computer at work, and at home. I can put a PDF I want to read later in the folder from work, and it automatically uploads it, and my home computer automatically downloads it. Dropbox also lets me share folders and is starting to integrate with other services.

Both of these services have other features that are nice, but what I’d like to see is something that would basically let me buy a new computer (or reformat my current one in the wake of a virus or spyware or disk failure), and just go through and download the things I want on it. It would also keep things in sync, maintain checkpoints and versions. So my photos are in a folder, but they’re also on Flickr. Changing it in one place changes it in another. My music is there, and can be streamed when I’m at a friends house. The possibilities are pretty open.

It’s basically the benefits of an X-windows remote environment I guess, though that could even be integrated if it had a thin client into a virtualized box you paid by the hour for… I’ve seen lots of pieces of this out there, but nobody that’s really working on the basic central component.