April 10th, 2015
If you enjoy this article, see the other most popular articles
If you enjoy this article, see the other most popular articles
If you enjoy this article, see the other most popular articles
(written by lawrence krubner, however indented passages are often quotes). You can contact lawrence at: firstname.lastname@example.org, or follow me on Twitter.
Once again, Zed Shaw preaches the truth.
The worst thing about the era of the Internet is how often I (and I think all of us) read something that effects my thinking forever, and then that thing vanishes, and no one can ever read it, and no one can ever hope to understand what shaped my thinking on a particular subject. 100 years ago, if I read a good book, there was a good chance some copy of the book would continue to exist, and people could still find it 50 years later, but now that is less and less likely, when it comes to online writing. So, for instance, Zed Shaw’s rant “Rails Is A Ghetto” effected my thinking, and I believe the thinking of others, but it only survives in the Wayback Machine. At some point, this will probably cease to exist:
Rails Is A Ghetto
I’ve more or less kept my mouth shut about some of the dumb and plain evil stuff that goes on in the Rails community. As things would happen though I’d take notes, collect logs, and started writing this little essay. As soon as I was stable and didn’t need Ruby on Rails to survive I told myself I’d revamp my blog and expose these fucks.
NOTE: This post is currently an open draft. Feel free to comment but it will have spelling and grammar errors and some paragraphs might not make sense. Check my blog and my atom feed to find out when I post the updates.
This is that rant. It is part of my grand exit strategy from the Ruby and Rails community. I don’t want to be a “Ruby guy” anymore, and will probably start getting into more Python, Factor, and Lua in the coming months. I’ve got about three or four more projects in the works that will use all of those and not much Ruby planned.
This rant is full of stories about companies and people who’ve either pissed in my cheerios somehow or screwed over friends. I can back all of them up from emails, IRC chat logs, or with witnesses. Nothing in here is a lie unless it’s really obviously a lie through exaggeration, and there’s a lot of my opinion as well.
The best part about ripping on these guys though is this:
If they have a blog, speak at conferences, publish papers,
or write books then they are public figures just like me.
This means that thanks to Larry Flynt I can stab them in the ear verbally, insult them, question their sexual orientation, and say anything that’s true and they just have to take it. Their only recourse is to write their pathetic little rebuttals in their stupid little blogs.
I’ll add one more thing to the people reading this: I mean business when I say I’ll take anyone on who wants to fight me. You think you can take me, I’ll pay to rent a boxing ring and beat your fucking ass legally. Remember that I’ve studied enough martial arts to be deadly even though I’m old, and I don’t give a fuck if I kick your mother fucking ass or you kick mine. You don’t like what I’ve said, then write something in reply but fuck you if you think you’re gonna talk to me like you can hurt me.
I’ll never be afraid of some pilsner fresh fat fuck who eats donut hamburgers and only gets exercise when he plays World of Warcraft on a DDR pad.
To prime the pump, let’s talk about Kevin Clark. Me and Kevin don’t get along because he once tried to demand some free tech support out of me for Mongrel. His dumb little company VaporSet had this stupid setup where the people deploying Rails didn’t have root access. I told Kevin that this was stupid and apparently it was Kevin’s idea because he told me “fuck you”. Ever since then Kevin’s been a mouthy little shit with nothing to back it up.
This particular discussion started with Kevin Clark deciding to tell me that my idea to restrict access to the main repository for Utu until it’s solid makes me a “dick”. But, read to the end of the chat for the punch line. It’s great.
02:18 < zedas> evan: http://utuprotocol.info/repos/
02:18 < kevinclark> evan: I thought so too, but it still seems to
happen (atleast on my system). And lightning has
a few that hang out
02:18 < zedas> evan: http://utuprotocol.info/repos/utu/changes.rss
is generated from an included xslt i hacked up
02:18 <@evan> zedas: and who can push code to that location?
02:18 < zedas> me
02:18 < MenTaLguY> large git clones can also get kind of bad
02:18 <@evan> see, thats the problem.
02:19 <@evan> kevinclark: hang out?
02:19 < zedas> not a problem at all. feature since i don’t trust
any you mofos :-)
02:19 <@evan> kevinclark: you mean missing files?
02:19 <@evan> zedas: then you’re set!
02:19 < kevinclark> evan: I mean generated files are sitting in svn
02:19 < zedas> evan: no, people can contribute by doing a darcs send
which packs it up and shoots it to my email.
Then kevin comes in:
02:21 <@evan> we’ve got very different ideas about how to deal with
contribution, i suspect.
02:21 < zedas> i also anticipate that there won’t be so many people
contributing directly on the main utu server, but
more contributing by writing clients or tools that
02:21 < kevinclark> evan: I’d say you’re polar opposites
02:22 < zedas> how’s that kevinclark?
02:22 < kevinclark> zedas: I thought you weren’t talking to me
02:22 < boyscout> kev *  /rubinius/trunk (8 files) add
02:24 < zedas> kevinclark: well i’m gonna talk to you if you’re
making passive aggressive little comments
02:24 < kevinclark> zedas: they aren’t passive aggressive. You don’t
want anyone to check in to your repo. Evan’s
repo is open to anyone who’s gotten a patch in.
02:24 < kevinclark> and you’re still a dick
02:25 < kevinclark> and I’m enjoying the vacation
02:25 < kevinclark> so, keep it up
02:27 < zedas> kevinclark: you just called me a dick?
02:27 < kevinclark> you can still read too
02:27 < kevinclark> awesome
02:27 < zedas> hmmm
02:27 < zedas> well, i’ll just leave this alone for now.
02:27 < zedas> sorry about that evan.
02:28 <@evan> no problem.
And then kevin demonstrates why I’m trying to limit people’s access to the main repository:
02:47 < brixen> evan: lighting is using autoconf?
02:47 < brixen> er lightning
02:48 <@evan> yeah
02:48 <@evan> well, crap.
02:48 <@evan> lightning is faulting on i386
02:48 < kevinclark> hmm?
02:48 < brixen> yeah r1003 deleted configure
02:48 < kevinclark> working on mine now
02:48 < kevinclark> oh, crap
02:48 < kevinclark> I thought configure was generated
02:48 < kevinclark> from autoconf
02:48 <@evan> really?
02:48 < kevinclark> all my build tools do it ;)
02:48 < kevinclark> sorry
02:48 < brixen> well, not from our .configure
02:48 <@evan> brixen: it should be there.
02:49 < brixen> I’ll restore from r1002
02:49 < kevinclark> brixen: cool. sorry about that.
02:49 < brixen> just wasn’t sure if the build steps had changed
02:49 < brixen> kevinclark: np
02:50 <@evan> brixen: wtf.
02:50 <@evan> why did it get deleted….
02:50 <@evan> kevinclark: did you delete it?
02:51 < kevinclark> evan: I did. Too much time with buildtools that
were generating configure for me, and I got
02:51 < kevinclark> evan: It got caught with the docs that got
02:51 < kevinclark> and I didn’t think twice about it
02:52 <@evan> yeah, just restore it plz, kthxomgwtfbbq
02:52 < kevinclark> evan: working on it ;)
02:52 < kevinclark> brixen: you’re doing the restore, yeah?
02:52 < brixen> yeah, one sec
02:52 < brixen> was just checking it would build
02:52 < brixen> and it’s building :)
02:53 < kevinclark> sweet
02:53 < boyscout> brixen * 
Wow, rails is a ghetto. The little prick calls me a dick (and in private chat said he’d find me at the next conference but of course never did), then he deletes the fucking configure file for the project! Remember he was working on GNU lightning when I started chatting, so this means that it took an hour for everyone to figure out that his dumb fuck ass deleted it.
Why is this ghetto? Any experienced developer knows that autoconf configure files are a PAIN IN THE ASS to recreate. They almost always require special reconfigure calls, special m4 macros, or just time. You usually get them right, generate them once, and then leave them in your repository for all to use. To make it worse, Kevin actually wrote a supposed alternative to autoconf, and yet he doesn’t know the most basic thing about autoconf.
Only a fucking tool bag piece of shit would:
spend 10-20 minutes calling me names over IRC,
not have the balls to say any of that to my face,
say I’m a dick for wanting to use a different (established) publish/review model,
and then demolish such an important file for a project,
keeping everyone stumped and pissed for an hour,
therefore proving me right.
This is exactly what makes Rails a ghetto. A bunch of half-trained former PHP morons who never bother to sit down and really learn the computer science they were too good to study in college. BTW, this is true about Kevin as he’s an English major or something stupid (and it shows).
Hats off to you Kevin, you fucking prick. I’m enjoying my vacation too.
After this, I started thinking, since it was the first realization that I picked the absolute last wrong community to make my living in. They were all pricks, morons, assholes, and arrogant fucks who didn’t care about the art or the craft.
They were all a bunch of little ghetto fabulous princesses trying to make it in this tiny little Rails world and not enough brains between them all to make it happen.
Tied To The Rails
I’ve been thinking this over ever since I realized that Mongrel and Rails more or less killed my career. During 2006 I was effectively homeless for about 4-6 months out of the year and made no money at all. During the rest of the year the little money I made was impossible to get, and many times I was simply not paid.
If it weren’t for the totally kick ass Obie Fernandez I’d probably be slogging away in some McD’s screaming, “you want fries with that?!” He got me a really good gig in Florida and I was able to get back on my feet. Obie rocks, and he’s also a good family man, treats his kids well, and is very smart. He’s one of the few gems of the Ruby world.
Before Mongrel I was building kick ass software for the NYC Dept. of Correction with a tiny team. We were doing innovative stuff like REST XML feeds of prisoner releases and RSS of prisoner transfers. It was fun, I was in charge, and things were pretty good.
Before that I built software for finger print readers, network protocols, designed business processes, lead software teams, created portals, and generally rocked as a consultant.
After Mongrel I couldn’t get a gang of monkeys to rape me, so forget any jobs. Sure people would contact me for their tiny little start-ups, but I’d eventually catch on that they just want to use me to implement their ideas. Their ideas were horrendously lame. I swear if someone says they’re starting a social network I’m gonna beat them with the heel of my shoe.
The Stories I Could (and Will) Tell
One company tried to get me to sign a contract that required me to list all of my inventions, software, cooking recipes, works of art, writings, poems, essays, thoughts, ideas, patentable or unpatentable, prior to taking a 2 hour per week gig mentoring someone. The list of shit they wanted went on and on, and after I refused and just ignored them they still kept asking me.
Another company told me they had a great job for me and that I’d be perfect for them. I knew these guys so I at first trusted them, but what a mistake. Turns out that it wasn’t a job they had, it was an RFP that they wanted to bid for and put my name on the bid so they’d have an advantage. Alright, that’s fine but that means they’re using my name and reputation (that I earned) in a business transaction without telling me. Fine, I better get some fat cash. They then build the team and dole out the positions: Software Architect to the shithead who can’t code; Project Manager to the MBA asshole who talks like a car salesman; Lead Engineer to the guy using my shit to run his company. What do they give me? Nothing. I’m just Zed. Nobody needs my skills.
Other companies would hire me to fix something simple, I’d quote them $500 or so to do it, and then they’d refuse to pay if it didn’t take me a week to do. In one case I did something in about 5 minutes, sent off my automated billing PDF and they just flat refused. I had to work for another hour and even then they didn’t want to pay.
A company in NYC flew me out, put me up, and I gave them a cut-throat deal on my rate if they’d pay me quick. I needed the money to pay rent, so it had to be right after the two weeks of work. About the middle of the week I hear that the CEO isn’t going to pay me right away but is instead going to do NET-30 (an evil practice reserved only for furniture sales). I tell the guys that I got to go and I’d like my money, but they refuse, I fly out, and I don’t get paid for 60 days. What’d I do for them? Oh only a custom Mongrel server, a clean deployment to Mongrel from fastcgi, and a ton of training for their main man.
Then there’s the social network idiots. They all have a social network plus something fucking stupid to sell, but of course no MBA can actually code so they come running to me. However, there’s a slight problem. You see, I have a business degree you cock suckers. If you tell me that your social network will take on facebook because it includes baby pictures then I’m going to laugh in your face. They are an established player with CIA backing. You won’t wipe them out.
Google was a total riot. They offered me a job twice. I went with it, and they never responded. Probably because the job they were offering me—someone who’s been coding for 21 years, 15 professionally—was as a junior system administrator. What the hell does a junior sysadmin do at google? That’s probably like mopping the floor at a glory hole in Queens. I told them to review my resume and offer me a real position.
Revenge Of The Zen Prick
In Vancouver it was even weirder. There was no Rails there, and the only Ruby on Rails work was at this shitty little company I once worked for name Raymond James. I worked for them on a small gig, not doing much coding, just getting a project they screwed up out the door. Later I got into it with their “Development Manager” Alex Bunardzic over e-mail where he says something strange:
I would think twice before doing something like that, if I were you. As a Development Manager at Raymond James, I am privy to the work details you did for us some time ago (it’s all here, meticulously classified by [MANAGER]), and I must say that your references from that job are far from being stellar. To put things extremely mildly, you’ve ended up on our ‘not to rehire’ black list.
You may be looking for work, and people will naturally start asking around. I have plenty of contacts in the industry, and you know how people are when hiring—looking for references and for some feedback.
I’m afraid that, after just reviewing the code you’ve delivered here, I won’t be in the position to say many encouraging things about the quality of your work, not to mention your personality traits.
We go at it for a bit, because I didn’t actually write much code for them and I sure as hell didn’t write bad code since, you know, the damn project actually ran after I got there. Hell, I reverse engineered a Java library they bought but lost the source to so we could patch it. They even asked me to come in a few times and help on short gigs after my initial work. How the hell was I on a blacklist, why did they have a blacklist, why didn’t I know, and why the hell was Alex telling people this shit?
As the exchange unfolds (where apparently my use of foul language is bad but his threatening my livelihood is all right), Alex the Zen Master confesses that he got things wrong:
Here I need to apologize—I went back and looked over the documentation, and was shocked to realize that I’ve confused you with another person! That person’s name is Shai, and because that name was on a quick glance so close to Shaw, I’ve made a blunder and jumped at the premature conclusions.
So please scratch all the things I wrote previously concerning your past performance—all of that applies to some person whose name is Shain.
That’s right, this moronic idiot basically told (or just threatened to tell) everybody I was a shitty coder, refused to hire me, threatened me with slander, and tried to destroy me because he confused me with a “Shai” or a “Shain” in his blacklist. He even later tried to tell me that there wasn’t a blacklist.
Here’s the guy who is a development manager for an entire company and he can’t even tell the difference between two completely different people in some weirdo black list. All the more reason to leave Vancouver and try again somewhere else with people who don’t pretend to be Zen masters while they’re treating you like shit with a perfect half smile on their face.
How’d This Happen?
Over and over again I’d run into these morons who would offer me tiny jobs, no jobs, insult my intelligence, treat me like all I can do is code, and when I didn’t fit that mold or wanted to charge them for the privilege they’d cheat me or laugh at me.
Here’s a bit of background on me: My education is in business. I have a BS in MIS and almost finished my MS but ran out of money. I’ve got more business education than most of the MBAs out there, and I have a nearly formal education in software development, modeling, statistical analysis, and sociology. I’ve done it all, but what does the slick talking shit head car sales MBA loser think I am?
Just a code monkey.
I have this rule that when life isn’t going well I have to look at myself very hard first, make the changes that might improve things, and then start looking at who’s stomping on my day.
After revitalizing myself, getting out of the Rails business (or trying), distancing myself from Mongrel, disconnecting from the Ruby community, and focusing on my business skills, I finally felt ready to figure out why the hell the Rails community is so completely and totally useless, stupid, and arrogant.
I believe, if I could point at one thing it’s the following statement on 2007-01-20 to me by David H. creator of Rails:
(15:11:12) DHH: before fastthread we had ~400 restarts/day
(15:11:22) DHH: now we have perhaps 10
(15:11:29) Zed S.: oh nice
(15:11:33) Zed S.: and that’s still fastcgi right?
Notice how it took me a few seconds to reply. This one single statement basically means that we all got duped. The main Rails application that DHH created required restarting ~400 times/day. That’s a production application that can’t stay up for more than 4 minutes on average.
Let me put this into perspective for you: I’ve ran servers that needed to be restarted once in a year. They were written in PHP, Python, Java, C, C++, you name it. Hell, I’ve got this blog on a server I’ve restarted maybe 10-20 times the whole year.
Now, DHH tells me that he’s got 400 restarts a mother fucking day. That’s 1 restart about ever 4 minutes bitches. These restarts went away after I exposed bugs in the GC and Threads which Mentalguy fixed with fastthread (like a Ninja, Mentalguy is awesome).
If anyone had known Rails was that unstable they would have laughed in his face. Think about it further, this means that the creator of Rails in his flagship products could not keep them running for longer than 4 minutes on average.
Repeat that to yourself. “He couldn’t keep his own servers running for longer than 4 minutes on average.”
Assuming his statements are true (which we may never know) he basically duped us all.
Now I’m glad he did since Rails is a pretty nice idea, and it demolished the Java world I hated so much. What bothers me though, is that while all of the Rails Core fuck tards would insult me, tell me I was wrong, laugh at me, marginalize me, tell me I was a waste of space, that I “jumed the shark”, they were quietly taking my work and using it to improve their festering shit pile deployments.
In fact, in chats with me and them where I started to identify the GC, Threads, and IO all I ever got was denial from guys like Dave Thomas, Michael Koziarski, and Chad Fowler. Remember that nasty cgi.rb bug that is fixed with a monkey patch in Mongrel? Did you guys know that Michael K. and Dave Thomas pretty much threatened me into not releasing a Mongrel fix for the problem for three months? They actually let it sit for three months before other people crafted the cgi_multipart_eof_fix which I could include.
In the beginning, was this huge lie, but after that…
Then The Idiots Came
My theory on why Rails is a ghetto is best summarized by an observation I made about Michael Koziarski. Here’s is fat fucking face just in case you don’t know who I’m talking about. See, here’s the thing about Koz: He’s got a big mouth he runs when he’s online, but in person he doesn’t say shit. He loves talking shit about me when I’m not around apparently, insults me when he wants, but the best thing about Michael Koziarski is this:
When he tells people I’m an asshole they go, “Zed’s such a prick I hate him.”
When I tell people Mike’s a fucktard loser, they say,
That’s right, dude works on Rails in some capacity, apparently writing tons of shitty fucking code with his butt buddy Nicholas Sekar. Yet, nobody knows him. He’s got more web sites than Elvis and Chuck Noris combined and nobody knows him. He’s written mountains more open source code than me and no-bo-dy knows him.
He’s a fucking loser, and man he used to bug me. Now however, I don’t give a shit about Rails so he’s a little fly. Rails is my money maker platform I don’t invest in at all. Rails could sink in the ocean for all I care and I’d roll on to my next big thing. I’ve done the right thing by giving Mongrel to a great team, and if Rails dies, then awesome because little useless pricks like MK will probably fall off the planet into that part of hell where shitty managers end up.
The best part about the whole thing is there’s potentially 10 new web frameworks that can take on Rails. Hell, Mongrel spawned or helped 5 of those. My favorite of those frameworks is Merb which is literally “Mongrel plus Erb” but now it uses Erubis mostly. What I love about Merb is that it proved you could make a fast thread safe Ruby web framework with all the same ideas as Rails and using most of the Rails gear at the same time. However, the joke is that before Merb the Rails Core morons would scream up and down you can’t make Rails thread safe. Ezra however proved them all wrong by just writing a better Rails than Rails and all thanks to Mongrel being so easy to hack and work with.
If the Rails guys had given me even an ounce of respect and listened to me I might have helped them, but instead I wanted to make sure that they didn’t rule the world because when I listened to them shit talk about the community that made them famous I wanted to scream.
Alright, but let’s say I’m totally wrong and Koz is really a great coder who’s just staying under the radar? Alright, remember the change to Rails to allow this?
That one little ’;’ was the cause of some serious pain for people since it’s actually not a proper request the way they interpret it. Requests with ’;’ in them are considered path parameters which are kind of like query parameters. Koz and DHH and crew added this, but I told them that’s not right, they should use something else like, uh, oh, maybe fucking ’/’. They ignored me. Did it anyway. Then when it was clearly obvious they were wrong (since Mongrel’s got a tight parser) who was out there defending this decision? Fucking Koz. Great programmers don’t defend stupid, they stamp it out and own up to their mistakes.
Fuck you Koz. You don’t speak.
Ruby on Rails has become full of people like Koz, with Koz the most senior of the wannabe smarties. Koz got lucky at best and injected his shitty coding into a good project, fucked it up, and then latched on to security as the way to get more control. Of course he doesn’t actually know anything about secure coding which is why his code seems to have lots of the bugs (go check out the date parsing shit. Clue: months don’t always have 30 days).
When I hang out with the Nitro, Factor, Django, Lua, Python, Lisp, or Mongrel crews I get to talk to super smart guys who have egos for sure, but have mutual respect. They craft nifty shit I love to play with, are fun to talk with even when I disagree, and don’t say mean shit when I’m not around.
With Rails I get scrawny cock suckers with carpal tunnel syndrome talking to me like they’re gonna eat my young. Their feeble PHP infected minds can’t grasp advanced shit like objects or closures. When you combine stupid businesses with stupid people using a stupid framework based on a big fat fucking lie on a shitty platform you get the perfect storm of dumbfuck where a man like me can’t find work.
There’s no work for a smart man in a town full of stupid.
The Hysteria Of Consultancy
Where I work the company is willing to blow huge amounts of money on a consulting firm or hardware, but ends up firing people when times get tight. It’s a universal mass hysteria that paying $100 – $200 per hour for a group of consultants is preferable to simply hiring good employees. At the rates companies pay these consultants they could hire 4 full time employees.
Consultancies used to provide a service by managing the entire project so you didn’t have to do much. Now with Agile and Pair Programming the consulting firms can dupe clients into helping them make the sausage, provide little to no services, yet still charge insane rates. What’s impressive is these consulting firms somehow charge rates that are 5 or 6 times what they pay their employees.
Think about that. How is it possible that your consulting firm has so much inefficiency they must charge 600% overhead? Are the services you get really that far above the base pay of that employee? Why the hell not just hire someone and have a long term learner who’ll be ready to work on anything?
Accounting, that’s why. When you hire a Full Time Employee (FTE) you need to account for it and budget them differently than if you pay a firm for a consultant. There’s several loop holes in the tax and accounting standards that make a consultant seem cheaper than a regular employee.
However, this is a mass hysteria. Eventually people will catch on that the quality they get for the price they pay isn’t there. A smart consultancy will figure out that they could undercut these idiot firms by simply using technology properly to cut costs and reduce overhead. Hell, you’ve got 600% overhead to work with. Should be easy to pull a Southwest Airlines on them.
Let’s take ThoughtWorks as a classic example of the hysteria. They decided to get into the Ruby on Rails game and went full bore. I was telling people right when Rails came out that doing it for internal projects at big companies would be a huge money maker. Nobody believed me, and now rather than all my smart friends working on cool applications for big money I have ThoughtWorks fucking up my party.
Before you continue this part of the rant ask yourself a question:
How did ThoughtWorks go from 0% Rails business to 60% Rails in just a few short months, but somehow didn’t hire that many top notch Ruby guys? Remember, if 60% of your business is Rails then 60% of your people need Rails training or else you have to hire more people. If they didn’t hire any more people than that means…the people they had were retrained. With two week training courses. Huh? How does that make them experts?
What happens if you do that is you have a group of former C# and Java guys running around writing shitty Ruby code and training on the client’s dime for huge fees.
Think for a second. ThoughtWorks charges its clients a premium price for expertise. They claim that their Agile methods and development expertise means they’ll produce a great result. This is why you pay them a premium. However, they reserve the right to control staffing, and you have very little say in the skills of the people they place.
Continue the logic further my friends with this little walk through consulting practices:
TW figures out it can make a mint doing RoR projects for dumb ass MBAs at dumbass companies.
TW goes for it and gets 60% of its business now all RoR.
TW realizes that they can’t hire enough Ruby people to do that. Actually, they didn’t really try too hard since that’d mean paying the new people a fair salary.
Yet, somehow they put 6-20 people on projects and claim that these people are Rails experts with a high standard of quality. These people actually had two weeks of training.
After each person has been on a project for a few months, they mysteriously get transitioned to another project, become “sick”, or generally leave.
They are then replaced with someone else who’s training is limited.
During their operations they seem to focus entirely on the process, but very little on the quality of the code. Sorry guys, but having a 1:4 code:test ratio is not focusing on code quality. It’s focusing on test quality.
Finally, when your project is in the dumps and it takes months to get simple things done you realize that you’ve been paying ThoughtWorks a premium for what is effectively a bunch of total newbies who are only there for a few months before they roll off.
You my friend got fucked in the ass. Congratulations because all the idiots who paid ThoughtWorks 6x times salary for junior ass wipes got taken and simply paid to train ThoughtWorks’ new crew.
How do I know this? Well, I’ve been a consultant for years and recently I’ve taken over two ThoughtWorks Ruby on Rails projects. BTW, they claim they don’t do “Ruby on Rails” projects, but actually do “Ruby” projects. They also claim they don’t do “eXtreme Programming” but do “Agile”. Doing this little semantics juggle means you can never hold them to any standard of quality.
In the two projects I’ve taken from ThoughtWorks I found mountains of horrible, horrible code. They of course try to pull the classic “there’s many ways to do everything in programming” but this time they kind of get caught because Ruby on Rails means stay on the Rails. There is an established best practice way to build web applications with Rails and that’s the entire point of the system. When ThoughtWorks fucked up these projects they did it in such a completely deviated way that it was impossible to defend.
Additionally, the people they placed on these projects were not well trained at all, had no idea about simple Ruby idioms let alone good design, and spent more of their time drinking and having fun than actually getting shit done. At the last project they actually had bottles of Pedialyte in the fridge to help with their hangovers after wild nights partying.
After ThoughtWorks left the most recent project we revamped the team. We got rid of pair programming, cut down the number of tests, started cleaning more and more code out, got rid of their shitty tools, and we all started leaving at 6pm. What happens?
We doubled our productivity with fewer people. Yes, that is a verifiable metrically validated claim I can back up. Just like the horrible quality of the code, their idiotic defense of it, and their very bad job at designing even the basics of the business model required. Remember, they are testing and svn whores so their failure on these two projects is very well documented.
However, what really ticks me off about ThoughtWorks isn’t the way they fucked up these two projects. I’d take ThoughtWorks over IBM, Accenture, or BearingPoint any day of the week. ThoughtWorks’ competitors are even worse, so I’ll take the lesser of ten evils any day. What pisses me off is that I know they’re responsible for turning Ruby on Rails into the next Visual Basic. Why? Because they wrote in a position paper that Ruby on Rails was like Visual Basic. Yes, they did that. They compared Ruby on Rails to probably the most technically vilified language in the history of computing.
Here’s my prediction about ThoughtWorks: They’ll continue to screw customers over by training their employees on their client’s dime and write tons of fucked up software. The bad results from ThoughtWorks will kill Ruby on Rails for companies as these companies are left with a bad taste from bad implementations.
From Industry to Corporate
ThoughtWorks is simply taking advantage of a pattern where new technology goes from fringe to corporate and then dies. A great example of this is Java Portals. They started out on the fringe at universities and non-profits, where they were mildly successful. Then they migrated into the corporate world where they were complete disasters, and finally the risk averse government picked them up for even less success.
How do I know this? I worked on portals for their entire life and followed them through this process. Go look. I did some of the first work on uPortal, then I worked on portals in companies, and then worked on them for the government.
Ruby on Rails is following the same trajectory I’m afraid, and ThoughtWorks is milking it while they can. First it started on the fringe in start-ups and a few lonely places where it’s having mixed success (mostly due to the poor performance of the Ruby platform). Now it’s getting adopted internally at companies where of course it’ll get fucked up again and die off. After that it’ll move to the government sector where it will languish along with it’s new found buddy COBOL.
Oh, did I mention ThoughtWorks compared Rails to COBOL as well? Awesome.
Fighting Consulting Firms
I have a few pieces of advice for people about to hire any company like ThoughtWorks. There’s just a few simple strategies you can follow to make sure you get the most out of them and get your money’s worth:
Make sure you have the right to see every resume and interview each consultant they place. Treat them like new hires and don’t let anyone who’s not worth the rate you’re paying on the team.
Demand a variable rate based on the position of the person and their experience.
Demand that no employees can leave the project to work on another project. These placements have to be for the life of the project or until the employee quits.
Require that you have the right to have someone replaced if they are not immediately capable. Part of what you’re paying is that a ThoughtWorker should be able to drop in commando style and just start working. The reality is they are usually totally lost anyway.
Seriously consider recruiting one full time employee as a team lead, another as a project manager, and then staff the rest of your team with independent consultants. You’ll find that you get more control and better quality at a lower price.
Finally, a company like ThoughtWorks uses bizarre socialization processes and weird shit like Neuro-Linguistic Programming to enslave their employees into working more hours than needed. That shit about “can’t leave with a broken build”, pair programming, hazing rituals, firing people who don’t conform, and other unprofessional behavior mostly exists to make employees pliable pawns.
Why? Because ThoughtWorks pays these people a salary that is fixed and considered a sunk cost. If they pay someone 60k/year and that person works 40 hours/week then they are paying them about $29/hour. If they convince this idiot to work 60 hours/week then they are basically paying the moron $19/hour. If they can push them to 80 hour/week then these idiots are actually making $14/hour. You can make $29/hour managing a fast food joint.
The further and harder ThoughtWorks (or any consulting firm) pushes its employees the more money they make because then they charge the client for each fucking hour. Get it? If they push an employee to 60/week they not only reduce the cost of that employee but also increase the billable hours. Hell, even if they don’t charge for those hours they still make more money just by reducing costs.
Now I’ll admit I didn’t see ThoughtWorks do this quite as much as I’ve seen IBM Global Services, Accenture, and BearingPoint do it, but they still do it. My observation about ThoughtWorks is they’re really really really fucking weird about it. I saw them pull passive aggressive shit like picking on a single employee high-school-nerd-vs-jock style until he conforms or quits.
What’s this got to do with your project? Well, if you have a mix of ThoughtWorks employees and your own then be careful that the ThoughtWorkers don’t warp your employees as well. I’ve seen it once already where a room full of ThoughtWorkers would thrash and trash on one poor employee simply because he disagreed with their approach to a problem. Or, having special boards on the wall with “How Many Times Frank Is Late”. Or, holding “dev lunches” (which I called “dev lynches“) where they thrash client employees with alternative opinions in order to maintain their stupid operations.
I’ve seen it, and they do it. Be careful of it as you’ll lose people who are smart and not susceptible to that crap, or you’ll have a bunch of brain washed idiots at the end of the project. It’s also a horrible way to treat a client so don’t put up with it.Source