Wednesday, September 30, 2009

Miniapp: Variance

Unfortunately my latest monthly miniapp is yet another tale of fail, yet another unfinished good idea. However, at least it looks cool.

In theory Variance was going to be a tool for tracking the difference between how long I think it'll take me to do something and how long it actually takes. I didn't finish it because I didn't realize how long it would take to do.

I present it not because it's any good but because I said I'd do a miniapp each month, so I might as well do a miniapp each month.

Friday, September 25, 2009

Thursday, September 24, 2009

One Reason Pair Programming Is Not For The Elite

I hate to do this, because I love pair programming, but I'm going to call bullshit on Obie's 10 Reasons Pair Programming Is Not For The Masses.

A piece on pair programming in the New York Times put Hashrocket in the public eye of Reddit and Hacker News, and it's pretty hard to keep your head clear when the Reddit monkeys swarm you. No doubt the unwashed masses came up with a whole bunch of reasons they didn't like pairing, or didn't respect it, and Obie wanted to answer them. That's why his blog post basically reads like an attempt to rephrase "you're just a bunch of fucking idiots" in very patient, reasonable terms.

I've been at the epicenter of that moron whirlwind many many times, and let me tell you, it's never worth the bother to pay it any mind. So let's skip this boring question, of why exactly all these idiots disagree with Hashrocket. Idiots are never very interesting. What about all the smart people who disagree with Hashrocket?

The interesting question here is: if pair programming is so fantastic, why doesn't every "elite" Rails company use it? It's huge at Hashrocket and Pivotal, but I've never heard DHH talking about it, for example. We didn't do it at all when I was building a very very successful Rails site which I'm not supposed to mention by name, for fear of tarnishing its otherwise pristine brand with the near-Tourette's-syndrome language of this blog.

I tried once or twice to tell people at ENTP to give pairing a shot, and I wasn't completely alone in that - there's an ex-Thoughtworker there, for instance - but I also got a lot of resistance. The main source of resistance: people were so tired of hearing Obie talk about how pairing made his company superior to every other company out there that they weren't even willing to take the idea seriously at all.

A lot of "elite" programmers don't see any point in Agile practices. But "Agile" is a buzzword today, and like any technology buzzword, most people using it don't even know what it means. This has always been a fundamental problem with the tech culture, but Obie's PR is not making things better.

Let's think about the bigger picture. It's not actually very mysterious why the Rails community has a bad reptuation compared to other programming communities. If we're not showing pr0n at our conferences, we're busy measuring our wieners.

Think how much nicer it would be to read a blog post like "10 Surprising Reasons You're Going To Love Pair Programming." And not just nicer - more useful. One very consistent feature of pair programming across organizations is that it really does surprise people who are new to it with just how productive it is, and how much fun.

Obviously the pot is calling the kettle black. For me to call somebody out for wasting time arguing with Reddit and/or Hacker News readers is hypocritical. I admit it. But let me just say it. Here's my open letter to Obie: the reason your first instinct is to write a blog post explaining to these people that they're just a bunch of fucking idiots is because they're just a bunch of fucking idiots.

And it's not even that. They're not only just a bunch of fucking idiots. They're also just a bunch of fucking idiots who are reading your blog because they're too lazy to work and too dumb to win at Desktop Tower Defense or the eyeballing game. I can't blame you for talking down to them. They suck. But the thing is, they're not the only people reading your blog.

There are a lot of other people reading your blog, people who are as smart as you or smarter, and as accomplished as you or more so. And when you tell that vast army of barely literate dipshits that the reason they don't pair program is because they're not as smart as you are, you are saying something true - but you are also telling these other people, these smart people, that the reason they don't pair program is because they are not as smart as you - and let me tell you something: they are. And they know it.

Speaking on behalf of everybody who has ever tried to sell pair programming to a highly skilled, highly intelligent developer who was reluctant or disinterested, I really wish you would shut the fuck up. You're only making good ideas harder to sell. (And that goes double for Haml.)

You're never going to get anywhere telling idiots that they're stupid. Trust me, I've tried it. I have to hope I'm not trying it now. But you can do a lot of damage by saying that anyone who disagrees with you is an idiot, and believe me, I speak from experience there as well. All it takes is one person in the crowd who everybody knows isn't an idiot, and your whole argument becomes bullshit.

Apart from anything else, there's a much simpler explanation. Maybe the big reason more people don't do pair programming is because they've never tried it.

For anyone reading this, if you're in that category, listen to me for a second. As far as Obie's argument that you can't do pair programming at a cubicle, I've done it at a cubicle. Fuck a cubicle, I've done it in a hotel shuttle van in a sleep-deprived delirium in the middle of a goddamn forest in Pennsylvania. He says you need fancy hardware, you don't need fancy hardware. He says it requires great programmers with great personalities, it's not true. I've done it with people I liked and people I didn't like and people I didn't even know. I've done it with brilliant programmers and clueless newbies. I've even done it with hardworking people and lazy people and it all turned out just fine.

Pair programming is for anybody who likes writing good code. Hashrocket didn't invent it, you don't have to pay them any licensing fees, and if you're not a Super Rock Star Ninja Samurai, you can still do it. It doesn't make you better than anybody. It's just a useful technique with beneficial side effects. All you have to do to get started is get started.

Likewise, if you're not pulling our legs, and you seriously think you can't do unit tests because you don't have time to slow down, you have no idea what unit tests are, and you are in for a very pleasant surprise when you finally find out.

Wednesday, September 23, 2009

Neurosonics Audiomedical Labs, Inc.

Monday, September 21, 2009

All-Time Most Entrails And Disembowelments In Music Videos Award

This was an easy win for the Yeah Yeah Yeahs.


Thank you Kanye.

Wednesday, September 16, 2009

Unit Tests: The Mainstream Will Never Catch Up

Many people who write blog posts about unit testing don't even know what it is; however, NASA used unit tests FIFTY YEARS AGO.

Rails Code Quality Checklist Here

I mentioned on Twitter using a Rails code quality checklist to screen companies, and have since gotten tons and tons of requests for the checklist, all of which I have answered. I don't get how so many people see the tweets about the checklist, yet so few see the tweets indicating where to find it.


Sometimes I miss the <blink> tag.

For the record, I'm not calling it perfect. I say this to stave off the inevitable minor disagreements with item number 7, section b, 12th paragraph. This is like that FizzBuzz whatnot - it's not perfect for inspecting your own code to see if Giles Bowkett likes it or not. It's not even good for that. What it is good for is asking questions about a company's development philosophy. It covers a lot of ground.

However, what it is not great for, or at least not as great as it could be, is getting companies to answer. I've used it on three companies so far. Only one has simply answered via e-mail as requested. Two out of three have dodged the question by asking if they could call me. Apparently, people think that if they call me, I'm not going to just bring the checklist up on my screen and read all the questions to them.

Update: I brought the checklist up on my screen and read all the questions to them. They were surprised.

We're Out To Get Them

Lots of smart people, including Reg Braithwaite, think Kanye's dick move was part of some conspiracy. Nobody seems to notice that this violates Occam's Razor and YAGNI.

If you stick to strict rules of logic, you have to throw out anything which violates Occam's Razor. If you want good code, you have to throw out anything which violates YAGNI. Occam's Razor and YAGNI are basically the same thing viewed from different angles. Why are so many smart people disregarding these important rules?

One thing that's important to realize is that it's not a generic group of smart people. It's programmers, and it's only programmers. I know smart people in entertainment. None of them are crying conspiracy. Is it possible Kanye wanted attention? Duh, of course it's possible. But anything beyond that is just silly.

Conspiracy theories fall into two categories: theories with evidence and pure mythology. Mythologies exist to share important stories between generations of a culture. But what's important about this story? The "staged" idea is implausible to me - but given that I think Occam's Razor / YAGNI are pretty important, I wouldn't believe it even if was plausible.

Reg even went further and hinted at a dark, shadowy Nipple Conspiracy (which presumably includes dark, shadowy Nipple Overlords). Paris Hilton's allegedly unintentional ascension to infrared porn stardom also came into the discussion. Here's what I don't get. If we can presume conspiratorial motives in all these cases, absent evidence, why aren't there rumors of a Batshit Britney Conspiracy? Why doesn't anyone suggest that she was faking it too?

If you're going to believe in a conspiracy theory, at least choose a cool one. I only heard one conspiracy theory cool enough to consider at all: Obama put Kanye up to it, so that Obama could call him a jackass, and thereby imply that Joe Wilson is a jackass too, without having to actually say so in public.

That is a conspiracy theory I can buy into. If we're going to throw logic out the window and build a new mythological worldview on magical thinking, let's start by declaring ourselves the winners. Because if I can't have a world where Obama uses his magic puppet powers to manipulate MTV behind the scenes, all just to give an ignorant douchebag the metaphorical finger, then I'd rather just live in reality and be governed by logic.

Tuesday, September 15, 2009

There's No Such Thing As A Good Client

I did a little e-mail interview thing recently with a Ukranian Rubyist named Dmitry Belitsky. I didn't realize it would go on his blog and so I used my customary level of caution while speaking, which is to say none at all. The most embarassing part is that Dmitry also interviewed Jamis Buck and Yehuda Katz, apparently aiming to collect the three Ruby developers in America with the most unusual first names. That in itself is not embarassing, it's very flattering to find myself in that group somehow, but the embarassing part comes when you compare our answers side by side:

How much time a week you work and how you keep yourself productive and focused?

Yehuda: I work 40-50 hours a week at Engine Yard and probably another 40 hours a week at home.

Jamis: I try pretty hard to stick to a 40 hour work-week, and sometimes it's even less than that.

Giles: I work like 10 hours a week and I have no cash at all.

I go onto justify myself:

This is kind of unusual, though. Usually I work 40 hours.

However, the reality is, it's "unusual" in the sense in that it's been this way consistently for only one year so far. And whenever I have a full-time job, I usually end up working 35 hours a week, not 40. I'm happy to bust ass on personal goals - I wouldn't be surprised if stress from all the conference travel I did in 2008 contributed to my hospital visits in 2009 - but I've always been greedy about my own time, and for the past year, I've been working part-time to free up time for my own projects.

I've discovered a number of things in the course of this year, the most obvious being that you should be careful what you wish for, and another one which I feel I kinda should have seen coming, which is that if you're determined to do your own thing, it's a good idea to understand business. Because of this, a lot of my recent reading has revolved around business, and what I've discovered leads me to the second thing I said in Dmitry's interview that might be a bit controversial:

What you want tell to past yourself from present moment about working with Ruby, clients, how to find good clients etc.?

I would say that there really is no such thing as a good client. Consulting is actually not a great business model.

It's true. Of course some clients are better than others - some are nicer people, some invite you to nicer parties, some pay better than others, some have cooler projects - but if you were to compare a bunch of options that all suck, fringe benefits don't change the suck, and when it comes to consulting, the suck is off the charts.

Consulting can be a fantastic way to learn. You get to work on a wide range of projects for a wide range of people, you see a lot of different examples of what works and what doesn't, and when you think about how you should approach projects, the question instantly becomes how to approach any and all projects, because you see so much variety in your work that you need a good general-purpose solution. This is why so many prominent consulting firms are leaders in things like Agile practices and testing frameworks. Consulting is a great way to focus on the fundamentals of your industry.

Consulting is also a great way to get income while you figure out a good business model, but it's a terrible business model, because a business model isn't about income. A business model is about equity. You set up a business because you realize it's better than having a job. You don't want to be in the position of having an idiot boss, quitting your job, working for yourself, and discovering that your new boss is an even bigger idiot.

I've been there and done that, and I can tell you, it stings your pride. But there's a much bigger flaw with it. The whole point of owning a business is that it makes money for you while you're doing other things. If you've got a business and you make less money while working harder, you don't own your business, your business owns you.

Anyway, a business model is about equity, and consulting is only useful for income. This is why consulting is a terrible business model. It's like going to a vegetarian restaurant for a hamburger. What you need is not on the menu.

I went to an interesting conference this summer. It was a conference of artists and art students interested in the entertainment industry. The speakers were concept artists from Transformers 2, prop and set designers from the latest Indiana Jones, and people like that. A veteran storyboard artist there said something that crosses the boundaries of industries. It fits the programming world just as well as it fits artists in the entertainment industry:

"You have two budgets, money and time."

Anyone who's ever had any kind of role in making a project succeed can see the truth in this. But ask yourself what it must mean, if this is true. It implies that both money and time are forms of wealth. And if that's true, then maybe my answer about how many hours I work isn't that embarassing after all. Maybe I've traded one kind of wealth for another (although maybe I would be smarter to get both). But if all these things are true, then you have to ask yourself, what are consulting firms doing, when they build income without building equity?

A consulting firm, any and all consulting firms, burns their time budget to pad their money budget. That's just another of saying that consulting is good for income and bad for equity. Things which make money for you not only give you money, they also give you time. But if you're only getting income, and you're not getting equity, your books only balance if you pretend the time budget isn't there.

I think every Rails consulting firm I know of is aware of this to some extent. Many have their own Web apps or are planning to. The 37 Signals idea of building something on the side is not exactly a new meme, and there's better writing on that topic out there already. People don't usually put Heroku in that category, but the founders of Heroku had a consulting firm before Heroku, called Bitscribe - I worked for them there - and one of the major wins for Heroku is that if you're a consulting firm, hosting and deployment can murder your profit margins. Working on an income-only business, the Heroku founders spotted an equity opportunity. That's the core of what 37 Signals did as well.

If you're a consultant and you relish your independence, I'm not trying to harsh your buzz. Setting your own hours is a wonderful thing, and defining your own work process won't just teach you about your industry, it'll teach you more about who you are. But I can't call it a good business model. A good business model brings you both equity and income, and makes sense not only in terms of money but also in terms of time.

Sunday, September 13, 2009

Gentlemen, We Have The Technology

Friday, September 11, 2009

Contact Me: Experiences With Joel-Style Scheduling?

Let me know if you've used this. I like the idea but I've noticed a possible flaw. The same task can take much, much longer if you're working with a severely fucked legacy code base. Say you work at a company with multiple projects; some code bases are great, some OK, some fucked, and some severely fucked. It appears that doing Joel's Monte Carlo analysis with company-wide data will give you less accurate info than doing that same analysis with project-specific data.

Monday, September 7, 2009

Why I Moved To Austria In 2143

They gilded the envelope with gold. Not just the letter, the envelope. And the gold envelope laid on purple velvet inside a hand-delivered teak box with hinges made of gold. After you hit a hundred years old, and you've got skills in a hot field, with successful businesses launched single-handedly, you attract a lot of attention. A lot of businesses had recruited me before in many of my careers, but this was new.

The recruiter knew my thoughts on business, my attitude, my philosophy. She hadn't just watched my lectures and my interviews, and read my books; she had dug deep, going so far as to read my student thesis in poli sci. She impressed me with that. Then she told me she was going to lay out some ideas and get my response. I said OK.

She tells me how in the 1940s Mercedes, BMW, and Volkswagen used Jewish slave labor, along with gold pulled straight out of Jewish teeth, to get their companies off the ground. She tells me how in the early 2000s, only one of those companies had to pay reparations, and the reparations priced those dead people at $700 a head. Then she asks me if it would be a good idea, financially, for a corporation to invest in a country likely to experience a Holocaust; if the slave labor would turn out to be a good investment.

Of course the whole thing's a setup. The answer is no, because if you're going to do something that unethical, we have the ability to clone humans in places where law enforcement will never see them. You just breed your slave labor and no government ever needs to know. For that matter, we also have robots. Who needs slaves?

But that's all beside the point. She's not asking me because I used to be an economist, in my fifties and sixties. She's asking me because I'm Palestinian.

Here's the thing. I might be the best geneticist in the world. You don't put all this effort into getting my attention and recruiting me just to race-bait me unless you have something pretty unusual in mind. I don't appreciate people provoking me to hatred. I don't believe in the social Darwinism that I wrote about so much fifty years ago, either. But I love this geneticist gig. It's a thrill, creating life. I think after a hundred years on this planet I've finally found what I was put on this earth to do. And the sheer amount of effort this recruiter is going through, I'm just dying to find out who her client is and want they want me to bring to life.

So I swallow the bait. I rant a little about Israeli oppression and what they did to my people and that sort of thing. I can't really remember very much of it, but I can remember the way my dad used to get mad about politics, so I just go through the motions and pretend to be him. And the recruiter smiles this wolfish grin which I'm sure she imagines to be both sympathetic and conspiratorial, and she says she can tell me a very interesting secret if I just sign an NDA.

And that's how I took on one of the most interesting projects of my entire life.

The rest, of course, was history.