Robbie Allen > Notes from 37Signals Getting Real Workshop

Read about my overall impression of the workshop. My raw notes from the workshop are below.


This workshop is based on ideas they developed while creating 37Signals products such as Basecamp and Campfire, and writing the Getting Real book. There is a lot more in this session than in the book.

Presenters: Jason Fried (Product Manager), Ryan Singer (Designer), David Heinemeier Hansson (Programmer)

Getting Real is not a set of guidelines it is a set of principles that guide the decisions they make

Not about having a repeatable process, GR isn't about codifying process
If you repeat process, you aren't incorporating previous learnings
Use common sense
Give your intuition space to work

Don't worry about the future and don't hire for the future
If you hire 8 people then you are setting yourself up to build products that require 8 people
You will build products that match the people you have
Don't scale ahead of time
Focus your attention on now
Worry about handling a million customers when you have a million customers
Focus energy on getting a million customers, not having a million customers

Figure out how to make money now, not later

Web 2.0 has confused what is a good idea vs what is a good business

Building something and throwing ads on the side isn't that interesting

People are paralyzed by mistakeaphobia
Getting Real is about making small decisions so if you make a mistake you can change it quickly
It is harder to change big decisions

GR is about doing the interface first. Let the interface be the spec.

The interface is not a wireframe or a photoshop mockup
You do it in HTML so you can use it while you build it
Get something that works very soon
It is not about doing integration at the end. The Frankenstein approach will surely produce a monster

They try to build documents that don't die

People hold Flickr up as a poster child of Web 2.0, but Jason doesn't think it is a very good business. They had to sell to Yahoo to stay in business.
If you have hundreds of thousands of customers and you are barely at breakeven, you have a problem

Q: What about Basecamp free subscriptions? Isn't that like Flickr?
A: Vast majority of people use the free accounts, but the minority of paying customers more than pay for the free ones. Flickr has a lot of processing requirements, whereas Basecamp is not very compute intensive

Ignore imaginary problems. "Well what if this happens?"

The future drives the future

The longer you can push off decisions, the better.

Making mistakes is a good thing.

Change is expensive when you make it expensive
David: When you use Java.

Just wing it (tm). They don't know if they are right or wrong. Just do it.

They spend a maximum of 5 minutes thinking about consequences
If a decision could destroy the company, they'll do something else

Q: I'm confident this works on a small scale, but I don't believe it is scalable for large organizations.
A: David: Disagrees, thinks this will work in a large org. When you are successful in Getting Real environment, there is a tendency to remove all the previous restrictions (money, etc.) and add more people, time, which is what causes problems. Start.com is an example at MS that started with only 3 people. Google Maps started with 6 people. iPod started with 9 people. It can happen in large companies.

Q: Have any of you ever worked in a large company
A: No

Less Mass - larger moving objects are harder to change than small. Less software. less code. less features. more change.
Just in Time Thinking

Suggests you hire only multi-tasking team members. Don't hire a "data architect" (David: or worse an "enterprise architect")

Have made many last minute changes

It just doesn't matter
People tend to overcorrect problems. People want to create a procedure so the problem doesn't happen ever again. You make a lot of mistakes so you wrack up a lot of these procedures and effectively tax everyone forever.

David: There is a million simple problems to solve before you get to the complex ones
Jason: Don't open up, one down.

There is no feature ever that is worth a month of their time. They can develop a new product in a month.

Clever software is too freaking hard and it doesn't work.

Q: How do you handle conflicts?
A: Surprisingly, we don't have many because we have agreed at a cultural level (less software, etc.) You tend to diverge when you have different goals. We make smaller decisions. You tend to but heads when you have to make big decisions.

Q: How do you implement this when you are working with big companies that require a lot of process?
A: Don't work with those clients. Don't let your clients hire you. You hire the clients. Just try these things and see what happens. Start slowly. Take things out of your proposals. They used to write 12 page proposals. Then 6 pages. Then 1 page. Everything worked out really well.

David: a little corporate disobedience is a good thing. Corporate loyalty is about doing the right thing for the business.

How do you start
It is all about people.
Hire generalists. Hire curious people. Don't worry about where they went to school or their GPA or their long resume.
Hire happy people
- you want to hire people that will help the morale of the company
Hire great writers - A lot of work today is communicating through writing (email)
Great generalists can empathize with other fields. You don't want just a database expert that only thinks in his silo. Or a designer that only knows photoshop and not HTML

Hire less and hire later
They like to have three people work on version 1 of any new app. This restricts how much is done (which is a good thing). Only need 1 programmer to write a program. Only need 1 to design a product.

It is about growing organically. Not trying to give birth to a 20 year old. You want to give birth to an infant.
Because you only have 3 people working on a project, you necessarily reduce the scope so you have to focus on the important stuff.

Staying away from one another is a good thing. You can have too much collaboration.
Just like REM sleep, there is REM programming and designing which is very hard to get into if you are constantly interrupting.
Very easy to bullshit when you are sitting beside each other and have too many meetings.

You don't want to make meetings the way to solve problems. They should be the exception, not the rule.

It is hard to figure out if a programmer is good by just talking with him for an hour. You need to work with him a sustained period of time to understand what they are about. This is a great reason to work with open source because you can look at a programmer's work over a period of time. Open source programmers love to program because they are doing it for free.

When they hired Ryan, they went out and found 5 people they like then gave them a task to redesign Verizon's home page in 5 days. Didn't give them any guidelines.

All of their new hires have been cherry picked.

Define your mantras
- Less software
- attack the requirements and chop off the complex stuff
- Say no by default - but you need an environment where new ideas are encouraged even though they may not be accepted. Don't get so wrapped up in your ideas where a "No" will ruin your day. It is not that you can't do everything is that you shouldn't do everything. You can add equalizers and audio recording capabilities, but then you wouldn't have iPod. You should never cater to a few high powered clients because they have too much control over the product. You become a consulting firm but in a weird way because the client is telling you what to do. Better to say no to a few high paying customers and yes to a lot of low paying customers.
- It doesn't matter - many situations where they are debating certain features for a while and someone will say it doesn't matter. It takes a little bit of froth off your ego by realizing it just doesn't matter. David: The bigger companies get the more unique they think they are, but really they are more mundane and just like everyone else.
- Done - Be hungry for decisions. A group of people can decide where to go to lunch but are afraid to make a decision about software
- Half, Not Half Ass - Work on fewer things better

Define your vision
e.g., "Project management is communication" (Basecamp), "Word is overkill" (Writeboard), "Competing with a post-id note" (Ta-da list), "Chat is a destination" (Campfire)
Q: Couldn't you have used a Wiki with Writeboard?
A: David: Wikis are not for humans. Writeboard is not about teaching someone how to use a collaboration system. It is about writing small pieces of text.

No functional specs
They are political specs
They are "cover your ass" documents
They are "blame deflection" documents
Functional specs are all about "yes" - there are no "no's" in a functional spec
They give the illusion of agreement because there is a lot of room for interpretation
It is more important on having agreement 3 months ago than building a great product now
Not humanly possible to make 100 decisions within 2 weeks - the first 10 pages are typically good but the next 50 are horrible
When you've made 10 decisions in a day you've depleted your decision making power for the day
It is a lot easier to put a lot of stuff on a piece of paper than put it on a screen

Q: But functional specs are good as a communication tool
A: David: they are good for communicating things people don't care about

David: Functional specs suck because people don't know what they want before they see it.

How they do it: ideas, paper sketches, html screens, then a prototype
Prototypes should not be thrown away.

Their designers and programmers use the software from day one, so they don't have a QA team.
QA is a big deal in big software but they have bugs too. With web-based software you can change things much quicker.

Basecamp was 4000 lines of code when it was first released. Now it is around 9000 lines. You shouldn't look to the big software firms like MS for guidance on testing because they are writing millions of lines of code.

If you aren't using the software every day then you need the customers that will very close to you from the beginning.

Until you see something you real, you can't decide whether it is the right thing or not
Get as close to the real thing as quickly as possible

Architect Christopher Alexander (Father of Pattern Language) used to mock up his building designs in real and make changes based on that

First step: Brainstorm ideas
Second step: Make paper sketches - fast, easy, cheap. Nothing you wouldn't mind throwing away after 20 minutes.
Third step: Design screens in HTML. Using real data is real important.
Last: Get the Prototype working. Use it while you build it. You'll find mistakes earlier. You'll discover what's missing.

They start an app off with more than they end up with

Don't spend time on stuff that doesn't matter. They took out a search feature because no one has any data on day 1. Build it later when people actually need it.
They didn't have a billing system on day 1. They had 30 days to write it so they wrote it on day 23.

David rant: high level components are evil
He tried to abstract to-do list for ta-da list because to-do lists are in several products
They are pretty much roughly the same and abstraction doesn't work
Abstraction works when things are exactly the same
Reuse is way over-rated
It works well for infrastructure, but not business logic or app functionality
You need to work in an environment where the act of programming isn't so hideous so that you want to reuse everything
Context is more important than consistency - it is more important to tailor for the context than using the same underlying code

Don't confuse enthusiasm with priority

Beware feature loops….features lead to features lead to features
e.g., adding a "meetings" tab to Basecamp
Requires a lot of features you wouldn't think about initially

Hidden costs of features (the cheapest part of a software business might be writing the software)
-support, docs, tour, terms of service, clutter, more software, localization

The technical aspects is just a tiny part of what makes localization hard

Make opinionated software (software that isn't right for everybody)
Avoid preferences
False idea that you are empowering users by giving them a lot of options but you are penalizing them
As a site designer, you'll never see all the permutations of options that user can select if you have tons of prefs
Made a lot of preference decisions in their apps (e.g., number of things displayed on the screen, how things are sorted, etc.)
For v1 you don't need permissions

Selecting good "Non-preferences"
Everyone benefits from having a good defaults.

When you go to a restaurant, you are paying for the chef's expertise to make the meal the right way. Software should be the same way. You are paying for them to make the right decisions. When you buy a CD you are paying for the music the band made, not what you want them to make.

Talked about Kathy Sierra: you can develop some boring and bland product that won't offend anyone or you can create something users can get passionate about and some people won't like it.

Focus on the Epicenter of the app, not the outer framework
Design centers of activity, not wireframes
Don't waste your time on wireframes - it’s a dead document, too many states
There are at least three states for any page: Working page, blank slate, error
Showing a potential customer the blank slate with nothing on it is a mistake - should show example data to get them excited

Take the stuff that matters and make it pop
Strong
Normal
Weak

Header
Some normal text (and some details)

Don't stay in the 256 web color palette

Try to leave the "interface out of the app" and "let the content shine"

Don't use many graphics, just a few icons

Emphasize (make bigger) the most important elements

The CSS, code, markup, and presentation should have similar relationships between elements

Use the "smallest effective difference" (from Tufte)

Yellow fade technique to make clear something was updated

Use the same interface for admins and clients
When you have a separate screen, it often looks much worse than what users get

When a problem is too hard, change the problem

Don't dictate what tools people use

Jason: they only hire people that use Mac as their primary OS.
Q: What about Linux?
A: David, if you have enough time to sit around and configure Linux, you probably need more hobbies

Q: But you don't use Mac for your servers?
A: David: Use FreeBSD. FreeBSD and Linux are great for servers

From screens to programming:
Motivation is the key to programming
Create a programming environment that promotes happiness
"Happiness-driven programming"
Optimize for happiness before anything

Beautiful code is the key to programming happiness
beautiful code is readable, short, easy to maintain, fast

One of the more controversial things with Rails is they don't put logic in the DB, no stored procedures, no triggers, constraints, foreign keys, etc. They can get away with this because they have a single interface into the DB
Q: What about indexes?
A: They use indexes to make the apps fast

Stored procedures are not necessary to make apps fast

Knowledge on performance optimization is some of the most perishable

They optimize when they need to, not ahead of time

They handwrite some SQL when necessary for edge cases

Be careful when you hear:
That should be easy
Quick fixes are the most dangerous
"Just" and "only" sedates you
It is never that easy.

Be wary of science projects - trying to be too clever when it just doesn't matter
The answer: cheat. If it looks clever, no one will know if it actually is or not

But will it scale?
Nothing ever scales on the first try
Look forward to the day people care

Work in iterations, preferably weekly
Stop treating bugs special
Treat the software like a person, listen to suggestions, mind long term health (don't pile on the hacks)
Trade concessions - do less
Start testing today - reduces stress, build confidence, enable courage. You don't want to be afraid of your code base

They don't do user tests, beta users, etc. They are using the apps from day 1.
They go from development to production. Deployment is real cheap
Sometimes they update once a week and sometimes 5 times per day
They don't care if a user hits the app at the 1 second the app is being updated

On to promo and launch
Don't get hung up on domain names - they couldn't get backpack.com, basecamp.com, etc so they chose alternatives
Memorable is better than descriptive
Don't issue Press Releases - blah blah blah
Tell a story instead
Best promotional tool is a good product. Let people try, use, and feel it.
Use your Marketing $ for something else. Free shipping with Amazon came from through their Marketing budget
Some level of advertising is ok, but down the road
Emulate drug dealers - give them a little taste, then hook them
Bulk of their paying accounts started off as free accounts
Campfire you have to sign up for a free account first then you can pay
Let people start using the product as soon as possible
Only have 5 fields on the sign up form
Don't forget common sense - don't hide the sign-up button. State costs prominently. Explain refund policy up front. Offer mailing list signup. Blog the product (let's you tell a story about the product).
Build buzz - tell mavens and insiders, buddy up to like minded journalists, offer a mailing list sign up
Monitor buzz: technorati, blogdex, feedster, del.icio.us, daypop
Feature food: Rails, RSS, iCal (got thousands of visits from the Mac community because they supported iCal)
Promote through education: you can either out-spend or out-reach (e.g., the yellow-fade technique)
Don't worry about giving away secrets because you don't have any
Don't go into stealth mode
Promote from the inside - do a good job of calling out upgrades within the product (inline ads that aren't obnoxious)
Describe benefits not features. Lightly prod people.

They don't worry about trademarks until the product is going to pan out

Things are simple until you make them difficult

They don't really know how they price things. How much would they pay for something? Think they got Basecamp pricing wrong to start. Started off too low. Didn't have any complaints from high end after raising the prices, but did get some complaints on the low end. Make a case as to why you are increasing the prices.

Launch is just the beginning
Betas are bullshit - shift responsibility from you to the customer. Not encouraging confidence in the product. Just launch it. Take responsibility.
You are going to be getting feedback and making changes regardless of whether you are in beta or not.
Betas made sense with CD-ROM software, but not now with the web
Release and iterate in the wild
Special betas won't be used
Nothing is ever perfect - betas set the wrong expectations
Release a major update 30 days post launch - demonstrates momentum, shows you are listening and adjusting, flights fatigue, hold back some features, and spread the good news
Always have something good to say every few weeks

Tech Support
Sucks. Decreases your faith in humanity. Raises your blood pressure.
But it is good pain to feel. Their pain should be your pain.
When you have a call center in India, you don't feel that pain
Builders should support it
It is like the Chefs becoming the waiters
Jason gets 60-70 emails a day for support
Preempt support with design ("Tell me more" links)
A common problem in tech support is the Us vs Them mentality
- Low expectations of who you are (told us of all the threats they received)
- High expectations with you solving their problems
Disarming techniques - people appreciate quick responses, be as honest and direct as you can, cut your losses with wackos, the more you write the more they can respond on
Only provide support via email - use gmail. Don't keep stats and don't have a ticket system.
Say they try to get back to users from 1-4 hours during business day
It is amazing how people think you are out to get them.
"ASAP" goes to "take your time" when you get back to customers quickly
Have canned responses at the ready: How do I cancel? How do I export? Where do I log in? I forgot my password. Feature requests. RSS/iCal
Uses TextPander to auto-generate canned responses
Get users feedback, we read, then we throw it out. They don't keep a long list. If the feature is important enough, customers will keep asking for it. The important stuff will keep bubbling up.
You don't want to offer phone support. It will destroy you.
Hard to scale with 500,000 users and only 7 employees
They don't offer support for free accounts (but they don't check when a support request comes in)

They use Campfire more than any other app. They use it constantly to communicate with others on the team. Their culture is in Campfire. They've only met Jamis (lives in Provo) in person 3 times

Mistakes they may be making
App-less app (e.g., Writeboard) - you don't have to sign up to use it. It is document-centric, not app-centric. You don't have to logon to use it.
Over-thinking affiliates program - eventually decided to credit a user's account instead of paying out cash (you get 50% of the user's first monthly payment)
Iteration fatigue - hard to keep doing weekly iterations when you aren't actively building the product
Acclimating hires - haven't done a great job so far acclimating new hires, pros and cons of remote workers. Campfire helps them. Voice if their last resort. Use skype as last resort. Considering adding a "push to talk" feature to Campfire.
Single sign-on - doesn't think it is a huge problem. Thinks techies are enamored on this problem and wasting a lot of time and money. Big science project.
Rotate chores - so people don't get sick of what they are doing like bug fixes
Backpack debt - Old stuff that they are afraid of touching

They use managed hosting for their infrastructure. They are switching to Rackspace.
You shouldn't spend money on servers until you really need it.

They don't see Matt and Jamis very often, but see everyone else a couple times per week.
Helps that the culture is to avoid the phone and meetings.

Q: Have you thought about bundling?
A: Have done some cross promotion, but they don't have integrated billing

Sometimes when they cross promote, they get some users that are really mad because they see it as advertisements

Has a problem with people that block ads because this stuff isn't free. Yahoo isn't free, ads cover the costs.

Programmers have their own installations, designers work on the dev box in their own sandbox

The use Ruby, MySQL, Apache, FreeBSD
Have only used custom C code one time (for Campfire)

Test on Safari, Firefox, and IE6.
IE6 is a big morale killer. They cringe every time they have to test their app in IE6.
Had to stop supporting IE5 because it was so bad.

Going to email discount to all attendees for 37signals products

They are ok with people posting notes on the web.

top


Last Updated:  Saturday, April 01, 2006