BizConf 2010 Announcement - Save the Date

BizConf is back on August 4th to 6th, 2010 at the same fabulous venue, the Amelia Island Ritz-Carlton. If you weren't there, check out the video below to see what you missed in 2009, and why you want to make sure to attend next year.

 

BizConf 2009 from Hashrocket on Vimeo

A limited amount of registrations should open up for alumni and friends very soon, with general registration opening up in January. Jen and I are currently busy putting together the program for next year. We're expecting most of the instructors from last year to present again. Our friends from AYE will definitely be back, including Esther Derby, Johanna Rothman, Don Gray, plus new addition Steve Smith. BizConf 2010 will be more of a training event than a traditional conference, featuring even better interactive sessions and simulations to stretch your skills in the business management arena.

Note: Jerry Weinberg expressed interest in participating again, but in his frank words, only "if I'm still alive." Our love and prayers go to Jerry as he battles thymic cancer. You can follow his progress here.

March 02, 2010

2010 Conference and Event Calendar

Despite my honest intention to travel less this year, I still have a particularly long list of conferences and events that I'm attending, sponsoring or otherwise involved with. Will keep this blog entry as up to date as possible as changes occur.

SpeakerConf in Aruba (February 9-11)

Had an awesome time hanging with folks way smarter than me, learned a lot, drank way too much and came back with a tan. Please don't hate me.

Hashrocket Chicago Grand Opening Party (March 5)

Meet a bunch of Hashrocket folks and a good chunk of the local Ruby community for a cocktail party to celebrate the opening of our Chicago branch office. Details and RSVP

NoSQL Live in Boston (March 11)

In support of our growing reputation in MongoDB circles, we've decided to sponsor this promising event and are sending a couple of Rocketeers to present: Les Hill creator of MongoDoc and Durran Jordan creator of Mongoid. The conference is sold out, but you should be able to catch a live simulcast.

SXSW Interactive in Austin (March 11-16)

I've been attending SXSW for the last couple years and always learn a ton and enjoy the great networking opportunities. This year I'm excited to participate in the program as a panelist on the What Guys are Doing to Get More Girls Into Tech panel.

Together with our design team, I'll also be premiering our the results of our rebranding effort and the relaunch of hashrocket.com. Special limited-edition prints to honor the occasion will be available to select friends of Hashrocket in attendance at SXSW.

RubyConf India in Bangalore (March 17-21)

I'll finally put my Indian visa back to work when I travel back to Bangalore to speak at the inaugural RubyConf India, which we are sponsoring as Hashrocket. If you've been following my blog for awhile or know me personally, you know that in 2006 I lived in Bangalore for three months as a ThoughtWorks University trainer and loved it! I have a special fondness for my friends and associates in India, so this trip is particularly near and dear to my heart. I can't wait to reconnect with everyone and make new friends.

I still haven't decided what my talk will be, but I'm leaning towards an updated version of The Hashrocket Way. Let me know what you think about that via twitter.

Pune Visit (March 22-24)

Before leaving the subcontinent, I'm hoping to visit old friends at the ThoughtWorks India office in Pune, as well as meeting with other folks from the thriving Ruby on Rails scene in that city.

Scottish Ruby Conf (March 25-28)

On my way back from India, I'm spending a few days in Scotland for what's quickly becoming a yearly Hashrocket tradition. Jon Larkowski, Robert Pitts and Jim "Big Tiger" Remsik are representing us on the speaker list.

Palmetto Open Source Software Conference in Columbia, SC (April 15-17)

Speaking at this interesting conference catering to developers, educators and businesspeople involved in open source. Maybe I'll get to meet Cringely.

Hashrocket University in Baltimore (June 6)

Your very exclusive opportunity to study the tools and processes behind Hashrocket's success, hands-on and directly from actual Rocketeers, pairing on our equipment. Presented in partnership with the excellent folks at JumpstartLab. Plus, you're going to be in Baltimore for RailsConf 2010 already!

Ignite RailsConf in Baltimore (June 6)

Ignite events are lightning talks, where 16 speakers each get 5 minutes to talk about a subject they are passionate about, but with a twist: the speaker's slides are automatically advanced every 15 seconds. At Hashrocket, we think Ignite events are fucking awesome. That's why we're sponsoring this one, which promises to be an awesome pre-party kickoff for...

RailsConf 2010 in Baltimore (June 7-10)

I'll be part of a contingent of at least 10-15 people from Hashrocket, many of us speaking (hopefully). I've proposed several talks including a great new experience report called "Million Dollar Mongo" about our work on a large and successful production deployment of a MongoDB/Mongoid/Rails app.

July

Planning to spend most of middle and late July working out of our Chile office.

BizConf 2010  in Amelia Island (August 4-6)

My own conference promises to be one of the greatest learning events of 2010 for people that run software operations. Registration is now open and seats will go fast due to limited capacity. Seriously, what are you waiting for? (Okay, maybe you're waiting for me to post the program - I promise to do it soon.)

Burning Man in Black Rock City (September 1-5)

Oh man, I can't wait for this. Been trying to go for at least 5 years and I lost count. I think I'll be able to go this year, in fact have promised special friends that I will do so.

GoGaRuCo 2010 in San Francisco (September 10-11)

Probably moderating a panel discussion. More details as they become available.

AYE Conference in Phoenix (November 7-11)

Haven't bought tickets yet, but learned so much at last year's event and enjoyed it so much that I doubt I'll be able to resist this year. A conference of legendary reputation, which you should really check out and consider. If I could only attend one learning event this year, it would probably be this one.

Rails Summit 2010 in Sao Paolo (October ?)

More details as they become available.

Conferencia Rails 2010 in Madrid (November ?)

More details as they become available.

YOW! 2010 in Melbourne (December 2-3) and Brisbane (December 6-7)

Presenting on Rails 3. More details as they become available.

February 26, 2010

Great CS Program for Girls Needs Funding

Started in 1996, Artemis is a nationally recognized outreach program to encourage girls from local public schools to pursue careers in Computer Science, and more broadly in science and engineering.

From their website description:

The Artemis Project is a free, five-week summer day camp for rising 9th grade girls in the Providence area who are interested in learning about science and technology. Traditionally, it has been run by four undergraduate women from Brown University in connection with Brown's Computer Science Department. This year, Artemis is pleased to announce that we will additionally have a coordinator from Boston University.

By teaching students computer skills, programming, and computer science concepts through engaging activities, the Artemis Project encourages young women to join the field of computer science. According to my friends in DevChix, early experience in computer programming is essential to stemming attrition rates among women in CS programs at the university level.

So here's a great opportunity to help sustain a program that has been getting girls excited about CS for 15 years. Artemis needs to raise $25,000 to keep the program going this year. My company, Hashrocket, will be making a sizable donation. If you or your company also is able to donate, you can do one of the following things...

1. Send a check made out to "Department of Computer Science, Brown University, Artemis Program" to:

Amy Tarbox
Department of Computer Science, Brown University
Box 1910, 115 Waterman St.
Providence, RI 02912


2. Donate online by going to https://gifts.development.brown.edu/Brown/ChooseGifts.aspx and under the "Other Current-Use Priorities" section, fill in "Artemis Program"

For more information on potential sponsorship arrangements, contact Amy Tarbox: abt@cs.brown.edu

December 13, 2009

What does Quality mean to you?

Quality-tag-map 

The tag map above is an artifact of a discussion about quality that we had internally at Hashrocket last Friday. The question was: "How do we measure Quality on our projects?"

Many of us felt that money (budget) or rather, adherence to the client's budget was the best way to judge quality. I took that to indicate awareness and constant refinement of the quality/speed ratio.

Interestingly, lifestyle (pace) ranked highly, which I think is a reflection of our core values. A comfortable, stress-free environment and sustainable pace is an essential factor in production of quality software. However, I don't know if you can use lifestyle indicators as a quality measurement.

Customer satisfaction ranked highly as well, but perhaps not as high as the others because customers are not always clued in to the real level of quality in their application? Hopefully some of my rocketeers will chime in with their opinions about that.

The answer with the most votes by far was craftmanship, which itself needs further discussion to define well and understand. As a group, we brainstormed ways to measure craftsmanship and ended up with the following ideas, not weighted:

What-is-craftsmanship 

How do you define quality and craftsmanship? Tell me in the comments.

By the way...

I absolutely have to tell you about a great consultant that we retained at Hashrocket to spend a couple days with us discussing quality and helping our management team to figure out growth plans for 2010. His name is Steven M. Smith and I met him at the AYE Conference in Phoenix last month. Besides being a great management consultant, Steve specializes in experiential workshops. You should definitely consider hiring Steve to help you with your software development company or department.

November 24, 2009

Professional Ruby Series Rough Cuts Available

My series has three exciting titles coming in 2010 that I wanted to share with you, since they're now available in preview form.

The Rough Cuts service from Safari Books Online gives you exclusive access to an evolving manuscript that you can read online or download as a PDF and print. A Rough Cuts book is not fully edited or completely formatted, but you'll get access to new versions as they are created.

Service-Oriented Design with Ruby and Rails
By Paul Dix
Published August 28, 2009
Read a free sample chapter: Chapter 2: An Introduction to Service Oriented Design; Overview
Buy Now

This book covers the tools and techniques for building service architectures in Ruby that are designed to scale and operate in the cloud or with legacy enterprise systems.

Rails AntiPatterns
By Chad Pytel, Tammer Saleh
Published Jan 5, 2009
Read a free sample chapter: Chapter 3: Excess Ruby in the Views: Learn the View Helpers That Come With Rails
Buy Now

In Rails AntiPatterns, the authors provide many real world antipatterns examples along with practical advice for how to avoid them in the first place. Each AntiPattern is demonstrated with real world code, and solutions for refactoring are presented that are based on sound Object Oriented principles and established Ruby on Rails best practices.

Reporting and Dimensional Modeling with Ruby
By Matthew Bauer
Published Jan 5, 2009
Buy Now

Both a reference and tutorial, this book shows how to implement the reporting and dimensional modeling concepts using a variety of tools in Ruby.

November 22, 2009

(MSA Series #4) Warranties

This is the fourth entry in a long-running series of blog posts about the Hashrocket Master Services Agreement (MSA). Parts onetwo and three are also available. When the series is finished, you might be able to piece together a valid MSA document from the examples presented here. However, keep in mind that I am not a lawyer, and that the context of your business may be different than mine. Also, remember that laws vary wildly from country to country and what is presented here might be useless outside of the USA.

Section 5, Warranties

This section of the MSA establishes what warranty, if any, you are guaranteeing on the work performed under the scope of your contract with your client.

The first clause is a bit of legalese stating that each party is authorized to enter the agreement:

5.1 Warranty of Authority; No Conflict
Each party warrants that it is authorized to enter into this Agreement and to perform its obligations hereunder, and that its performance hereunder shall not conflict with, limit or be contrary to any other agreement. 

The second clause of section 5 establishes a warranty on the nature of the work provided, that it will be performed in a professional manner and by qualified personnel.

5.2.1 Professional Manner Hashrocket warrants that all services will be performed in a professional manner using qualified professional personnel. 

Of course, the words professional and qualified are subjective, which means they could be the basis of dispute later on, if problems were to arise. I've been involved in arbitration hearings as an expert witness, testifying on whether work performed lived up to generally-accepted best practices and industry standards. Some of the big factors that affect whether I consider a Rails project to be professional have to do with the quality of testing on the project, and adherence to the Rails conventions and best-practices.
This paragraph edited on 9/23, because the original wording made it sound like I was casting judgment based on my book The Rails Way.

The following paragraphs are of terrific importance in terms of protecting the vendor from unreasonable liability, which is why they are printed in prominent all-caps:

THE WARRANTIES SET FORTH IN THIS AGREEMENT ARE EXCLUSIVE AND ARE IN LIEU OF ALL OTHER WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. EXCEPT WHEN OTHERWISE STATED IN WRITING THE MATERIALS PRODUCED UNDER THE TERMS OF THIS AGREEMENT ARE PROVIDED TO CLIENT "AS IS," THAT IS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE AND/OR SERVICES PROVIDED UNDER THIS AGREEMENT RESTS SOLELY WITH THE CLIENT.  SHOULD THE SOFTWARE OR PROGRAM PROVE DEFECTIVE, CLIENT SOLELY ASSUMES THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION, INCLUDING WITHOUT LIMITATION ANY "DEBUGGING."

Significant in this paragraph is the stipulation that work is provided as is, that is, the client cannot force you to continue working on the project if you don't want to do so, or for free. The fact that you are not providing a warranty decidedly does not mean that you are planning to give your client junk. In fact, unless you have a great reputation and client testimonials to back it up, you're probably going to have trouble getting clients to agree to this clause.

There's more to this clause, specifically the stipulation that the client is solely responsible for the "risk as to the quality and performance of the software." The only effective (and moral) way that I know to put that risk on your client is to establish small feedback loops via a well thought-out acceptance process. At Hashrocket, we use the features of Pivotal Tracker to facilitate constant, ongoing acceptance of story functionality and tracking of defects. Delivery of new features and bugfixes happens on a daily basis and so does client acceptance.

The following graph, generated by Pivotal Tracker as part of its Project Points Breakdown report, visually shows progress of a project along the stages of our workflow. The overall height of the bars gives an indication of scope. As the black bars (unstarted work) shrinks, you can see the project headed towards completion.

Picture 4
The vertical axis denotes the number of story points in the project. Note how narrow the bands of green (Delivered) are during the progress of this project. The graph tracks the state of stories on a daily basis. Green bars represent functionality that has been delivered to the staging server for the client to test, but not accepted yet. Occasionally the circumstances cause the client to fall behind for a day or two, but gentle pressure and assistance brings them back in line.

I won't try to explain the legalese of the second all-caps paragraph, simply because I don't necessarily understand it fully myself. This text is in there under the strong advise of our lawyer.

EXCEPT AS OTHERWISE STATED ABOVE, NEITHER PARTY MAKES ANY WARRANTIES OF ANY KIND OR NATURE, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES RELATED TO INFORMATION OR BUSINESS ADVICE PROVIDED, WARRANTIES RELATED TO OUTCOMES BASED ON INFORMATION OR ADVICE PROVIDED, WARRANTIES OF MERCHANTABILITY OR MERCANTILE QUALITY, WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE OR USE, WARRANTIES OR CONDITIONS ARISING BY STATUTE OR OTHERWISE IN LAW, OR WARRANTIES OF ANY PRODUCTS OR SERVICES PROVIDED BY THIRD PARTY VENDORS.

What I will say is that the wording of this paragraph, and indeed all of the all-caps paragraphs are of supreme importance. There is established case-law about these kinds of warranties, and mucking with the wording is a good way to have the entire clause invalidated.

Finally, the supremely-important liability disclaimer, which helps ensure an angry client doesn't put you out of business.

THE PARTIES AGREE THAT NEITHER PARTY’S LIABILITY FOR DAMAGES FROM ANY CAUSE OF ACTION WHATSOEVER, REGARDLESS OF THE FORM OF ACTION, WILL EXCEED THE FEES PAID OR TO BE PAID BY CLIENT PURSUANT TO AN APPLICABLE STATEMENT OF WORK UNDER THIS AGREEMENT. IN NO EVENT SHALL EITHER PARTY BE LIABLE FOR LOST PROFITS OR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES OF ANY NATURE WHATSOEVER, INCLUDING, WITHOUT LIMITATION, DAMAGES ARISING FROM LOSS OF USE OF ANY SOFTWARE OR HARDWARE, COSTS OF PROCUREMENT OF SUBSTITUTE PRODUCTS OR SERVICES, LOST DATA, LOST PROFITS OR REVENUE, OR FOR ANY CLAIM OR DEMAND BY ANY THIRD PERSON, ARISING OUT OF OR RELATED TO THE AGREEMENT OR THE PERFORMANCE OR BREACH THEREOF, EVEN IF ADVISED OF THIS POSSIBILITY.

If things go completely wrong and lawsuits are filed, you agree beforehand that the maximum liability incurred will not exceed the amount of money that has changed hands. In other words, if you completely fuck up the project, no matter how hurt the client is the most he can do is to get his money back. Absent this stipulation, you could face lawsuit claims in the millions of dollars to account for all sorts of opportunity costs and damages asserted by the client. Luckily this language is fairly common in service contracts.

5.2.2 No Infringement The parties represent and warrant that their disclosure and delivery of any information, documents, software and other materials, and use thereof, as contemplated by this Agreement, will not knowingly infringe or violate any proprietary right of any third party, including, without limitation, any copyright, known patent or trade secret right.

This clause is entirely for the protection of your client. It binds you to a promise not to deliver intellectual property to them that belongs to someone else. In practice this prevents you from taking code that you've written for Client A and selling it again to Client B, without the express knowledge and permission of Client A. Since it's common for software consultancies to produce non-domain-specific code with potential for profitable reuse across clients, a different clause in the MSA establishes a method of differentiating intellectual property produced under billable time, and how the rights to such vary.

5.3 Noninterference with Business
During the term of this Agreement and for all periods thereafter, Hashrocket agrees not to directly or indirectly compete or interfere with Client’s Business in any manner.  Additionally, and without limiting the foregoing, during the term of this Agreement and for a period of two years thereafter, Hashrocket agrees not to, directly or indirectly solicit or induce or attempt to persuade any employee, independent contractor, vendor, supplier, outsourced third-party, director or other participant of Client to terminate an employment, contractual or other relationship with Client, or to enter into a relationship with Hashrocket or into any business organization in which Hashrocket may be directly or indirectly involved.  The term “enter into a relationship” shall include, but not be limited to, acting as a paid or unpaid director, officer, agent, employee of, or consultant to, or acting or participating as owner, partner, manager, member, or shareholder.  During and for a period of two years immediately following termination of this Agreement, Hashrocket further agrees not to (a) directly or indirectly contact any person or entity disclosed by Client for the purpose of taking advantage of a business opportunity, (b) otherwise circumvent a relationship with the Client  or establish a relationship with a party with whom Client already has a relationship or foreseeable relationship with whom Hashrocket has never had a relationship, or (c) seek to establish any rights, including but not limited to intellectual property rights, anywhere in the world in conflict with Client’s pre-existing, herein established, or hereafter established intellectual or other property or proprietary rights.

Interestingly, as I was reading this clause for inclusion in the article, it struck me that its limitations are not mutual. (I'll be fixing that soon.)

All this final paragraph of the section does is to limit you as the vendor from screwing your client in various ways, such as poaching their business model or employees, behavior that would harm your reputation and future business anyway. It's smart to make your clients feel comfortable that you won't engage in nasty behavior as described above. You should keep aware of this clause, particularly as it applies to hiring people that work (or used to work) with your clients.

The next article in the series will cover Fees, Invoices and Payments.

September 30, 2009

New Hashrocket Client Video: Todd Siegel

One of the coolest things about shooting a lot of video around the office is that every so often we catch one of our clients on film (and they let us publish them.) In this episode, of what I hope to turn into a recurring season, meet Todd Siegel, who has proven to be one of our favorite clients.

We've done this type of interview before with Dave Cohn of Spot.us.

September 23, 2009

I'm Cuckoo for Chrome Frame

Don't know what Google Chrome Frame is yet? Watch the following short video first...


This is such awesome news that I'm practically besides myself with joy. I think web app developers should make a concerted effort to push adoption of the Chrome Frame plugin, just like Adobe's flash player plugin.

I tried it today on an app that I'm working on which looks like hell on even modern versions of IE. Worked seamlessly.

I can see developers of wide-audience consumer facing sites still facing real resistance towards dropping support for IE6. However, corporate IT and web apps written for the "enterprise" should have little trouble getting this plugin adopted.

Put the following meta tag in your app to activate Chrome rendering on IE:
<meta http-equiv="X-UA-Compatible" content="chrome=1">

September 22, 2009

10 Reasons Pair Programming Is Not For the Masses

Nytarticle

Hashrocket, or more specifically our beloved "Big Tiger" Jim Remsik, was recently profiled in the New York Times in an article about pair programming. They titled it For Writing Software, a Buddy System and it's gotten a fair amount of attention on Twitter, Hacker News and Reddit. (If there are other big discussions going on about it, please let me know in the comments. Thanks.)

I think pair programming is one of our most important competitive advantages at Hashrocket. My teams produce some of the highest-quality code I've ever seen in 15 years in the biz. We are able to effectively leverage XP-style client acceptance in our process because our code is so defect-free.

I'm damn proud of what we do at Hashrocket and talk about it often, but usually while trying to stress the supreme importance of context and talent in making it work. My homepage still says "Helping to evolve the world of software into a more fun and productive place to live, work and play", but pair programming, especially all the time, is one of those things where increasingly I have to advise most Agile idealists that it probably won't work for them, and here are ten reasons why:

10. Most software managers don't want to invest in the necessary hardware

Either they don't want to invest in the appropriate equipment (for personal or political reasons), or they are not allowed to do so.

Our pairing workstations are fully-outfitted Mac Minis ($1049) with a $99 Dual-link DVI adapter connecting them to an Apple's 30" Cinema Display ($1800). Each pairing workstation also requires a pair of mice ($98), keyboards ($98) and elevators notebook stands ($80). Finally, we also buy a pair of MagSafe power adapters ($159) for developer's notebooks. Mind you, we don't invest in all this fancy Apple gear because it's cool. We do it because we care about having the best tools available, a sentiment that the masses usually have to live without.

Incidentally, each of Hashrocket's developers has their own MacBook Pro, that they are required to own and maintain, based partly on the philosophy that a craftsman has his own tools.  That is a hard policy to pull off in mainstream software shops, because it can be seen as a turn-off for potential recruits, not to mention that most corporate IT shops suffer conniptions about not having control over machines that are connected to their networks. C'est la vie.

9. Most software shops are not configured for pair programming

Cubicles do not work for pair programming. Period.

Most office environments have cubicles and most software managers are stuck with the environment they have and lack the political or budgetary capital to do anything about it.

In order to effectively pair program all the time, you have to have the right furniture and workspace. Comfort is key. Big wide desks, comfortable chairs and elbow room. Our desks are 2 m x 1 m, cost about $600 each and are height-adjustable. There is enough room for the pairing workstation in the middle of the desk, plus dual notebook computers to each side.

There are no cubicles or private spaces available, because developers are not expected to work in private, nor are they supposed to be doing non-work tasks in the office. However, our office is partitioned into a number of "war rooms" and casual seating areas that can be appropriated depending on needs of the team. In particular, client calls are sometimes conducted in quieter areas.

8. Most software shops use traditional hiring practices

Relying on recruiters to source candidates and then hiring someone after a few phone calls and a day of interviews, you know, the way that most places do it, is one of the worst ways to bring on talent. You really don't know what you're getting. The savvy mainstream software manager might swing a contract-to-perm policy, but still has to recruit the contractor in traditional ways.

The best way to hire talent is to drop them in actual work situations for at least a week and see what happens. And that's the catch. Since most shops don't pair all the time, they don't have a built-in infrastructure to accommodate just "dropping someone into a real work situation". The poor candidate would be in over their head. Our candidates spend their interview week rotating on actual production code, pairing with the same people they'll be working with if they're hired. Everyone gets a say in whether to hire a new recruit, and hesitance from a developer that actually paired with them means they do not get hired.

7. Most software shops tolerate anti-social behavior (halitosis included)

At your average software shop, someone can be considered a "good programmer" even if they are a complete asshole. Nobody wants to pair all the time with assholes, even other assholes. Same thing goes for prima-donnas, chronic farters, people who don't bathe enough, people with halitosis, jerks, idiots, lazy bums. There are myriad conditions that could make pair programming a gruesome experience and it is absolutely management's job to make sure that those problems are kept under control or eliminated. As in censored. Or fired.

Face it, most software managers are under-staffed (see below), overworked and/or under-qualified. They would rather let the group deal with Asshole Architect, Mr. Stinky or Jimmy the office jerk than to go around provoking difficult conversations and making more work themselves. Besides, Stinky's code is pretty good, isn't it? Right... I've had to dismiss otherwise-qualified people for being assholes. People that I otherwise-needed. It wasn't easy, but it is crucial to do it anyway.

Full-time pairing requires strict implementation of the No-Asshole Rule. In the words of Robert Sutton, "enforcing the no-asshole rule isn't just management's job". The entire team has to feel empowered to call out and reject anti-social behavior. That kind of empowerment is extremely rare in corporate America. It's easier to take it during the day, rush out of the office at 5 pm on the dot and vent your frustration at happy hour.

6. Most software people don't understand pair productivity

Those of us that have seen it in action know that good full-time pair programmers consistently produce higher-quality code faster than individuals working alone.

To the average manager, with his average mindset, two people working on the same thing equals half the work done. To the average programmer, having to pair full-time means they won't get to waste time during the day on Reddit or Hacker News.

Full-time pair programming keeps developers focused and coding, all day, every day, week-in, week-out. The average developer spends maybe a few hours a day actually coding and finds all sorts of other activities to fill in the rest of his day. The difference in experience gained towards mastery of the craft adds up quickly.

I see pairing work so well every day that I consider my career prior to my current job to have consisted mostly of wasting time. When I think back to all the code I’ve written for a job, I’m annoyed at how much less efficient I was then since I wasn’t pairing, and how much better my code and my products would have been if I had paired on them full time.

When you have a second person working with you, you find that you try harder to code well. You’re far, far less likely to be willing to apply duct tape to a problem, because someone else is working with you and he or she is more likely to object to the duct tape. If two people approve a hack and implement it, it’s almost certainly because it’s the right approach given the time constraints. If one person sitting alone decides to pursue a hack, it’s more likely to be a situation where there is a better approach.

Two people attacking a design problem together is easier than one person doing it. Your partner will think of things you don’t, and vice versa. In a non-pairing environment, you can always call someone to a whiteboard to help you work through a design issue, but when you do that you’re only calling for help when you know you need it. The times when you need help and don’t know it go unaddressed – and yet despite the fact that you need help, I guarantee that you’re coding SOMETHING and checking it in. It’s almost certain to be shitty code. The amount of time you spend trying to figure out “what’s going on here” or “why isn’t this working the way I expect” is severely reduced. I’m talking hours of debugging that literally turn into seconds.

Rod Hilton in I Love Pair Programming

5. Most software shops employ under-qualified developers

Hashrocket is a boutique shop, so we can be very picky about who we hire. Candidates have to pair with us onsite for at least a week before the team decides whether to hire. We've hired qualified interns, but we don't hire apprentice or junior-level folks. Occasionally we do extended pairing matchups with client developers in our office, but they have to fit in culturally for it to work.

The bar for success in this industry is set very low. Most software shops have one or two great, productive hackers, offset by a boatload of net-negative producers:

"When doctors screw up (massively) they get sued. When (permanently employed) programmers screw up they get let-go, and they go find a new job, usually with more responsibility and a pay raise. There are no ramifications for software malpractice." 

Jay Fields in The Cost of Net Negative Producing Programmers

Hiring only great people and compensating them very well is expensive. Most software managers don't even buy into the advantages of only hiring great people, thinking that a mix of talent levels is more advantageous.

4. Most software shops are overworked and under-staffed

This reason is related to #5 in the sense that most software shops don't have enough good people to take responsibility for the truckloads of work that they're expected to do. You can't put idiots in charge of important projects, therefore pair programming requires double the amount of "good" people as not pair programming.

Promiscuous pair programming, where there is a weekly, or even daily, rotation of pair partners, requires more people than discrete workstreams, so that pairs can switch without incurring big ramp-up penalties.

3. Most software developers don't like everyone they work with

Good luck putting together more than 15 people in any type of group without some of them hating each other's guts. Now limit your pool of resources to average programming geeks with anti-social tendencies and making your group get along just got a lot harder.

Lots of teams out there are simply too big for a happy group to even be possible. There is research on ideal group sizes for teams, with the consensus falling in the 8 to 14 member range. Unless you're committed to small teams of sociable people, you won't be able to get everyone working together happily

Most software managers would rather pay 20 mediocre and/or anti-social developers $75k/year instead of hiring 10 great developers at $150k/year. (Why? I'd bet on they don't want to pay their developers more than what they make.)

2. Most software developers just don't want to work that hard

Laziness is a virtue for programmers, isn't it?

Laziness - The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer.

Larry Wall in Programming Perl

Unfortunately, it seems like over the years as an industry we've simply reduced that advice to "go to great effort to reduce overall energy expenditure" and forgotten about the rest.

Pair programming makes developers work harder than they've ever worked before in their lives. You constantly have someone making sure that you're not distracted or wasting time running down dead ends. Unless you're an asshole who just doesn't care (see #7) you're not going to abandon your pair while you endlessly do non-work-related stuff. Pairing keeps you honest. Being honestly hard-working is still one of the best ways to earn accolades and raises. Accolades and raises usually bring some measure of added happiness.

All that hard work really pays off in terms of success for everyone involved as well as personal growth, but why bother trying? Most software developers are happy to skate along doing the least amount of real work possible without getting in trouble. In other words, they're lazy.

1. Most software shops don't really care about excellence

There are so many things to worry about at your average shop that have nothing to do with excellence. Corporate America cares about lines of code, the bottom line, toeing the line, and whether Joe in Accounting is doing lines in the bathroom during his breaks.

Truly caring about excellence means considering your work to be more than just a job or a paycheck. You have to treat is as a craft. You have to have passion for the success of your clients, company and co-workers. You have to be justly rewarded for that passion and encouraged. You have to care. And frankly, that is just way too much to ask of most people.

July 31, 2009

BizConf Update

Logo

BizConf is an exclusive conference focusing on the business of software development in a Web 2.0 world. I originally conceived it to be a gathering of owners and managers of Rails shops from around the world, but once the idea started taking shape, our target audience got a little wider.

As I'm writing this, we have 3 weeks left before the conference and just hit an important milestone. From the beginning, my budget has called for a minimum of 50 attendees and a maximum of 75. Well, we hit 52 registrations today! The event is definitely on and we're ramping up our outreach to individuals that we think should attend in an effort to sell out.

Money Matters

I realize the economy is putting a damper on registration, which is why I've tweeted that people who want to attend but are having trouble affording the trip to get in contact with me for special consideration. In future years, we are definitely going to try budgeting the conference around a lower registration price.

I have to mention that BizConf would not be possible without the generous support of Hashrocket and 11 other awesome sponsors including, nGenWorksNew Relic and Engine Yard. Half of the sponsors are providing attendees with awesome free packages of their services.

Presenter News

We added a couple of internet celebrities to the program recently: Andrew Warner and Alex De Carvalho.

Andrew-warner-founder-mixergy-croppedIn his twenties and with no outside funding, Andrew co-founded a business that reached $30+ mil in annual sales. He is now the host of Mixergy.com, a video podcast that interviews "doers and thinkers whose ideas and stories are so powerful that just hearing them will change you."

Andrew will present Bootstrap Like a Missionary, based on his true life experiences doing just that.

Alexdc_up_rgb_1 Alex is a co-founder of StartPR, an online tracking service for reputation management, blogger relations, and brand monitoring. He's an advisor to businesses and organizations on their use of social networks and social media to build community relationships and brand. He also designs and manages social networks, including business planning, technology selection, wireframing, development, and community management.

Alex's presentation topic will be announced soon.


Blog Highlights

We just posted an informative interview with noted author and consultant Esther Derby, who is presenting three talks at BizConf!

  • Good Idea, But How Do We Do It? Finding and Using Your Sources of Power
  • What Does Your Customer Want? 
  • Beyond the Organization Chart: What Really Drives Behavior at Work 

We also have quite a few video interviews with presenters. I think my favorite might be the one with Jessie Shternshus of the Improv Effect talking about her session at Bizconf.

June 02, 2009

Agile Design, O RLY?

We had a great Hashrocket Book Club discussion today about a Cennydd Bowles article on A List Apart: Getting Real About Agile Design. Our discussion revolved around the integration of our very XP-like process with traditional and so-called "Agile Design", the evolution of design activities that traditionally have been very waterfall-like and involving heavy research phases.

Les made a pretty bold statement that design people are stuck where developers were 10 years ago, prior to wide adoption of Agile.

Here are the rest of my rough bullet point notes, in the hopes of getting a discussion started about this important topic.

  • There is a trichotomy* when discussing "design": Experience, Application and Graphic. Or sometimes you say "design" and you mean all three. That makes it difficult for everyone I know to talk about "design" without getting really confused.
  • User experience design involves the entire interaction of a user with a business and its technology, which makes it different than application and interaction design, which has more to do with the design of screen interactions and forms and pages.
  • Projects should have mini-milestones that represent "user journeys" as described in the article -- stories chained together to represent a path through the application -- and different than the concept of an "epic story".
  • The meaning of iterations still presents issues (even to us) in terms of thinking that they constitute weekly milestones. I say that iterations are nothing except dumb timeslices that enable tracking of velocity, but I realize that is far from a universal view in Agile circles. See The Story is The Iteration as practiced by Hashrocket, Pivotal Labs and others.
  • It's hard to envision experience and application design as happening after storycarding, since the storycarding process is dependent on having that design already done.
  • There are ways to start intertwining design with Agile the way that we're practicing it, but not like in the Bowles blog post, because Hashrocket usually acquires clients that have their application design done. Except that's not actually the case now, because since Andrew came on board we're participating in the earlier stages of the project, even starting at the concept phase.
  • There is value in developers championing the user experience throughout the project, being more than just programming robots. This implies that our developers have design savvy.
  • Customers are not experts in experience and application design and they cannot replace designers on XP projects.
  • The comparison in the Bowles blog post between software and the movie industry is flawed, because movie projects don't do small or often releases.

* Yes, I know that trichotomy is not really a word. But "dichotomy" implies two things, not three. Update: As pointed out by Thufir in the comments, it is a word. (I originally checked and didn't find it in my dashboard dictionary.)

My Company

My Conference

Bizconf is the only training event specifically crafted for owners and managers of small to mid-sized web design and development firms.

August 4-6, 2010 at the Ritz-Carlton Amelia Island Resort in Florida

My Book Series
Click here to view all titles in my series.