37 Signals "Getting Real" Workshop Notes

Steph Mineart

wedge1 Introductions
*1.1 Jason Fried - product manager
*1.2 Ryan Singer - interface design
*1.3 David Heinemeier Hansson - program, ruby on rails
*1.4 Matt Linderman
*1.5 Sam Stephenson - programming, javascrip framework, ajax
*1.6 Marcel Molina - programmer - rails developer
*1.7 Jamis Buck
wedge2 What is Getting Real?
wedge2.1 principles rather than rules
*2.1.1 less procedures and writing stuff down, more thinking and using common sense
*2.2 intuition has space to work -- room for flexibility and changes
wedge2.3 What Getting Real Is Not
*2.3.1 NOT - staffing up for six months from now
*2.3.2 NOT - long term plans and fortune telling
*2.3.3 NOT - scaling ahead of time - you may never have a million customers. Don't worry about planning for them until you build a customer base.
*2.3.4 NOT - making money later -- make money now. Don't rely on the "Lottery Ball" - bad odds of being bought by google or yahoo, make the business to stand alone. Ads are not a real business.
*2.3.5 NOT - Mistakeaphobia. Make lots of small mistakes to fix them. Change should be easy. Don't be paralyzed by the possibility of mistakes. Fail early, fail often.
*2.3.6 NOT - documents that die - capture everything in real wireframes that morph into the html
wedge2.4 What Getting Real Is
*2.4.1 YES - interface drives the product (user - centered design). Let the wireframes explain what the product does.
*2.4.2 YES - Using the product while you build it (in HTML & code -- not walkthroughs!)
*2.4.3 YES - making sure the business scales - Flickr is expensive processing to be a "for free" product. Should start with smaller apps.
*2.4.4 YES - ignore imaginary problems - don't worry about what ifs?
*2.4.5 YES - the future drives the future. Writing specs is letting the past drive the future. Push tough decisions out into the future. Putting off making the decisions will let you find more information to solve the problem, or more resources.
*2.4.6 YES - mistakes are good things. Lower the tolerance for mistakes. There is never a finished piece of software.
*2.4.7 YES - lowering the cost of change - change is expensive when you have too many people on your team, when you write documents that are too complex, when you try to include too many features, when you iterate too slowly, when you apps are too complicated.
*2.4.8 YES - just wing it and figure out what works.
*2.5 SKUNKWORKS PROJECTS - ways for large companies to create "small team" workability inside the company.
*2.6 Large companies - this can work with small teams inside them working on small projects
wedge3 Where do you start?
wedge3.1 Build Your Team
*3.1.1 hire generalists - people who can do more than one thing, or at least have a good understanding and appreciation of other's specialties. Design is not separate from code or scripting. i.e. -- CSS decisions affect ajax.
*3.1.2 hire happy people - morale is everything!!! Don't hire negative people.
*3.1.3 hire great writers - people who can communicate well with other people.
*3.1.4 Hire less, and hire later. - three people for version one projects. programmer, designer, sweeper (between both worlds). Not trying to give birth to a twenty-year old - reduce the scope to a smaller feature set. Smaller teams give you a fighting chance of getting a culture built. "Any time you decrease the scope, you necessarily increase the sensitivity to what's important"
*3.1.5 Build it, and see if it's what people think is important.
*3.1.6 People in different timezones - too much talking, not enough time to focus on the work. Meetings are not the way to do problem solving.
*3.1.7 Hire from open source for the right programmers - can see what people do and how they do it, what their culture and philosophy is, finishing work. People who love programming do open source work. Designers were given the task of redesigning the Verizon home page -- without guidelines.
wedge3.2 Define your Mantras (develop your philosophy; things you say several times a day)
*3.2.1 less software - don't accept requirements at face value - chop off the features that are too expensive to create, especially in initial phases.
*3.2.2 Say no by default to features - because there are always more ideas than you can handle at first. If they come up repeatedly, say maybe. If they're requested over and over, then say yes. Steve Jobs - most proud of the things he said no to.
*3.2.3 "It doesn't matter" - don't spend time on small features that don't matter to the big picture. It's an ego-buster to embrace this. You are not a unique snowflake; you're not creating something that no one has ever thought of.
*3.2.4 Done -- a decision has been made and we can move on. Make the change later if the decision wasn't right. The done-o-meter -- similar to getting up from a restaurant meal; you all get up at the same time.
*3.2.5 Decisions - should be like choosing where to go to eat. Only make the decision when you'r really hungry for it, otherwise put it off. If you're not happy with the restaurant you chose, that's okay, just go somewhere different tomorrow.
*3.2.6 Make your project half, not half-ass (less features, done better.)
wedge3.3 Define Your Vision - what's the big idea behind the project. What is the project about, (and what is it not about)
*3.3.1 Basecamp : "project management is communication (not about control)"
*3.3.2 Backpack: "bring life's loose ends together"
*3.3.3 Campfire: "chat is a destination"
*3.3.4 Ta-Da List: "competing with a post-it note"
*3.3.5 Writeboard: "word is overkill for most things you write" (that aren't novels). Wikis are not for humans -- they're for techies.
wedge3.4 Start Building
wedge3.4.1 No functional specs -- Spec documents have no effective function in the real world
*3.4.1.1 They're political documents - they're just blame deflector shields
*3.4.1.2 specs are all about yes -- no cost to adding bullet points to a word doc, but the real cost of that bullet point is HUGE!!!
*3.4.1.3 Illusion of agreement -- about people thinking they agree on decisions when they really don't agree at all.
*3.4.1.4 Locked into decisions that you made three months ago, when those are no longer the right decisions.
*3.4.1.5 No push-back from the builders on the real costs of building, or best methodologies of building.
*3.4.1.6 Abstracted, not real. - detail level of the documents doesn't really mean anything, and is too weighty and difficult to read.
*3.4.1.7 Bullet points are small on word docs, but huge on actual real estate
wedge3.4.2 Instead, Get Real (each of the following, but rinse and repeat) Not a process of "throwing things over the wall" to the other part of the team.
*3.4.2.1 ideas - regular communication
*3.4.2.2 paper sketches
*3.4.2.3 html screens - photoshop screens are too much invested in a dead document
wedge3.4.2.4 prototypes - codes underneath html (later refined color)
wedge3.4.2.4.1 Christopher Alexander (architect) Quote - ??
*3.4.2.4.1.1 cardboard mock-ups of architectural features presented on the real site, so you understand how how things work in the real setting.
wedge3.4.3 Capture ideas of the project. Examples of how they did it with their own projects.
wedge3.4.3.1 basecamp ideas
*3.4.3.1.1 post project updates
*3.4.3.1.2 client participations
*3.4.3.1.3 project milestones
*3.4.3.1.4 centralized archives
*3.4.3.1.5 dashboard view
wedge3.4.3.2 Backpack
*3.4.3.2.1 life's loose ends
*3.4.3.2.2 basecame is overkill
*3.4.3.2.3 pages with simple tools
*3.4.3.2.4 "keepshare"
*3.4.3.2.5 remind me away from the computer.
wedge3.4.3.3 Writeboard
*3.4.3.3.1 simple text editing and sharing
*3.4.3.3.2 I don't need and acount
*3.4.3.3.3 remember everything I wrote (versioning)
*3.4.3.3.4 Compare versions (which is better?)
wedge3.4.3.4 Campfire Features
*3.4.3.4.1 chat should be a destination
*3.4.3.4.2 file sharing over IM sucks
*3.4.3.4.3 what did I say last week?
*3.4.3.4.4 Persistence.
wedge3.4.4 Make paper sketches
*3.4.4.1 Fast, easy cheap, but meaning conversations
*3.4.4.2 Sketch radically different ideas
*3.4.4.3 Experiment with priority
wedge3.4.5 Design screens in HTML (logos from tada on backpack -- leaving space)
*3.4.5.1 Screens are common ground
*3.4.5.2 customer experience
wedge3.4.5.3 ready for programming
*3.4.5.3.1 launched without search, because no one had content in the system
*3.4.5.3.2 launched without billing because they couldn't bill for 30 days anyway.
wedge3.4.6 Get the prototype working
*3.4.6.1 Use it while you build it
*3.4.6.2 you'll find mistakes later
*3.4.6.3 you'll discovered what's missing
wedge4 Fleshing out features
*4.1 don't confused enthusiasm with priorities
wedge4.2 Beware Feature Loops
wedge4.2.1 features lead to more features
wedge4.2.1.1 adding a meetings tab to basecamp
*4.2.1.1.1 invitation management
*4.2.1.1.2 calendar management
*4.2.1.1.3 conference room booking
*4.2.1.1.4 people without a basecamp account
*4.2.1.1.5 links to other basecampe components
*4.2.1.1.6 time issues
wedge4.2.2 Hidden Costs of Features
*4.2.2.1 support
*4.2.2.2 documentation
*4.2.2.3 tour - having to update this
*4.2.2.4 terms of service requirements
*4.2.2.5 clutter
*4.2.2.6 more software
*4.2.2.7 localization
wedge4.3 Making opinionated software
*4.3.1 software that isn't right for everybody
wedge4.3.2 Avoid preferences
wedge4.3.2.1 Examples of "Non preferences" in basecamp
*4.3.2.1.1 # messages per page/fixed at 25
*4.3.2.1.2 overview page items (fixed at 25)
*4.3.2.1.3 Due in the next 14 days
*4.3.2.1.4 Message list sort order fixed
wedge4.3.2.2 Backpack non-prefs
*4.3.2.2.1 alpha sort sidebar
*4.3.2.2.2 fixed object group order
*4.3.2.2.3 fixed relative reminder times
*4.3.2.2.4 fixed home page
wedge4.3.2.3 Campfire
*4.3.2.3.1 5 minute time-stamps
*4.3.2.3.2 enter/leave messages
*4.3.2.3.3 permissions
*4.3.2.3.4 chat text formatting
wedge5 From features to screens -- the basic interface design process
wedge5.1 decide what to design
*5.1.1 mental list of "Must haves" - shouldn't have to write them down, because they should be a short list
*5.1.2 do a small sketch
wedge5.1.3 code the html
*5.1.3.1 Do the message, not the frame. Build the middle rather than the wrapper of any given page. - The EPICENTER - start with this on any prototype. No photoshop prototypes. Build in HTML.
*5.1.3.2 Design centers of activitiy, not wireframes
wedge5.1.4 pages have many states -- so dump wireframes and build the pieces, rather than full pages.
*5.1.4.1 sample "black slate" state (when you enter your user data, your page will look like this)
*5.1.4.2 working state - what we usually see
*5.1.4.3 error state
wedge5.1.5 Visual weight
wedge5.1.5.1 you decide what's important
*5.1.5.1.1 Show differences in both directions (standing out, standing back)
*5.1.5.1.2 focus on the data, rather than the grid -- make the numbers pop and the table recede
*5.1.5.1.3 yellow fade technique -- shows you the thing that you just changed. demonstrate in backpack.
*5.1.5.1.4 Same interface for admins and clients (and beta testers) - turn off stuff for people with less permissions.
*5.1.6 When a problem is too hard, change the problem
wedge6 From Screens to programming
wedge6.1 Be happy - set yourself up for happiness
*6.1.1 motivation is best grown from happiness
wedge6.1.2 optimizing for happiness before anything
*6.1.2.1 beautiful code (simple, readable, clean, sturdy, maintainable, fast)
wedge6.1.2.2 Convention over configuration
*6.1.2.2.1 conventions have a learning curve -- but should be made on common sense
wedge6.1.3 Things to beware of:
wedge6.1.3.1 Beware dangerous statements -- "that should be easy" - the notion that you can foresee all the implications of a change
*6.1.3.1.1 Quick fixes are the most dangerous -- that's always the line of code that breaks
*6.1.3.1.2 "Just" and "only" -- sedates you. Take these words out and repeat the question. - think
*6.1.3.1.3 Contagious
wedge6.1.4 Beware of science projects
*6.1.4.1 avoid algorithms and other cleverness - fake being clever. Why calculate the percentages how long a bar should be when you can fake an increase in the bar.
wedge6.1.5 Beware the question "But will it scale?"
*6.1.5.1 Nothing ever scales on the first try
*6.1.5.2 Can't anticipate where the scale will be needed -- might be on wrong areas.
*6.1.5.3 look forward to the day people care
wedge6.1.6 Find an environment that works with values you care about
wedge6.1.6.1 Working with your good angel
wedge6.1.6.1.1 work in iterations
*6.1.6.1.1.1 group changes together
*6.1.6.1.1.2 use short (preferably weekly) iterations
wedge6.1.6.1.2 Stop treating bugs as special
*6.1.6.1.2.1 prioritize bugs alongside features
*6.1.6.1.2.2 bugs don't always deserve immediacy
wedge6.1.6.1.3 Personify the software
*6.1.6.1.3.1 listening to suggestions
*6.1.6.1.3.2 mind the hygiene, clean up bad code smells
*6.1.6.1.3.3 pay attention to long-term health (avoid quick fixes)
wedge6.1.6.1.4 Trade concessions
*6.1.6.1.4.1 clarify the price of itnerface elements - get the cost out into the open
*6.1.6.1.4.2 strive for best value
wedge6.1.6.1.5 Start testing today
*6.1.6.1.5.1 reduce stress
*6.1.6.1.5.2 build confidence
*6.1.6.1.5.3 enable courage
wedge7 From Programming to User Testing
wedge7.1 37 signals doesn't "user test"
*7.1.1 "making your own dogfood" -- if you're making an app for a customer, (instead of yourself) you should be involving your user in the testing process at every step of the process, as new features are added.
wedge8 On to promo and launch
wedge8.1 Don't get hung up on domain names
*8.1.1 basecamphq.com
*8.1.2 backpackit.com
*8.1.3 memorable names are better than descriptive
wedge8.2 Don't issue press release
*8.2.1 blah blah
*8.2.2 tell a story instead
*8.2.3 write something that people wnat to read
*8.2.4 sink marketing money back into the product
wedge8.3 Best promotion is a good product
*8.3.1 let people use it, try it, use it - they'll tell other people about it
*8.3.2 if you have to sell your product, you aren't building a good enough product. build something good, and people will talk about it.
wedge8.3.3 Emulate drug dealers
*8.3.3.1 give people a taste, get them hooked, get them to upgrade.
*8.3.3.2 Only charge people after they sign up for a free account and use the product
*8.3.3.3 less noise for people who are using the product
*8.3.3.4 no one will fill out a five page personal form to begin using a product - or our website
wedge8.3.4 Don't forget common sense
*8.3.4.1 don't hide the sign-up button
*8.3.4.2 state costs prominently
*8.3.4.3 explain refund policy up front
*8.3.4.4 offer mailing list sign-up
*8.3.4.5 blog the product
wedge8.3.5 Build Buzz
*8.3.5.1 tell mavens and insiders
*8.3.5.2 buddy up to like-minded journalists
*8.3.5.3 offer a mailing list sign up
wedge8.3.6 Teaser, preview, movie
*8.3.6.1 screen shots with information
wedge8.3.7 Monitor the buzz (and the bust) (ego-surfing to build better products)
*8.3.7.1 technorati
*8.3.7.2 blogdex
*8.3.7.3 feester
*8.3.7.4 delicious
*8.3.7.5 daypop
wedge8.3.8 cultivate Feature Food - reaching people who like specific features
*8.3.8.1 Audiences will Chew it up and spit it out - example: basecamp working in with iCal calendars
wedge8.3.9 Promote through education
*8.3.9.1 if you can't outspend, out-teach (yellow fade technique) by showing how you did it.
wedge8.3.10 Promote products from the inside the application - getting people to upgrade to the next level inside the app
*8.3.10.1 call out upgrade opportunities - get more of what you like
*8.3.10.2 benefits of upgrade not features things you can do, not what the new features are
*8.3.10.3 show and seek
*8.3.11 Never have done an e-mail blast -- email is completely user-driven notifications
wedge8.4 37 Signals Measures of success
*8.4.1 Does the product make us happy?
*8.4.2 Do people use it
*8.4.3 is it less expensive to run than we can bring in
*8.4.4 are we making enough that we don't have to borrow money
wedge8.5 Pricing - How much would we pay for something?
*8.5.1 Consumer oriented - lower pricing to have people feel comfortable with upgrading
wedge9 Launch is Just the beginning
wedge9.1 Public betas are bullshit
*9.1.1 shifts responsibility from you to your customers
*9.1.2 suggests that the product will be
*9.1.3 shows a lack of confidence
*9.1.4 says you aren't ready for prime time
*9.1.5 says you aren't dependable
*9.1.6 only made sense when software was on Cd rom
*9.1.7 Just launch it -- if the cost of change is low, improving the product is easy
wedge9.2 Release and iterate in the wild
*9.2.1 don't have special betas for some people
*9.2.2 nothing is ever perfect
*9.2.3 perpetual improvement
wedge9.3 major update 30 days post launch
*9.3.1 demonstrate momentum
*9.3.2 show you're listening and adjusting
*9.3.3 fight fatigue
*9.3.4 hold back some features
*9.3.5 spread out good news
wedge10 Providing Customer "Moral" Support
wedge10.1 Their pain should be your pain - be as close to the users as possible
*10.1.1 forward customer support messages to designers or programmers
wedge10.1.2 chefs become waiters
*10.1.2.1 Builders support the project
*10.1.3 shared experiences (and annoyances)
wedge10.2 Preempt support with good design
*10.2.1 inline help and FAQs - tell me more links
wedge10.3 Us. Vs. Them
*10.3.1 Users have low opinions of you
*10.3.2 But they have high expectations of what you can do
wedge10.3.3 Disarming Techniques
*10.3.3.1 quick response
*10.3.3.2 I don't know
*10.3.3.3 be carefully direct and honest
*10.3.3.4 anticipate follow-ups
*10.3.3.5 cut your losses with wackos
wedge10.3.4 Have Canned responses at the ready
*10.3.4.1 how do I cancel?
*10.3.4.2 how do I export?
*10.3.4.3 Where do I log in?
*10.3.4.4 I forgot my password
*10.3.4.5 feature requests
wedge10.3.5 trash feature requests after reading
*10.3.5.1 if the feature is important, people will remind you every day
*10.3.6 Calculate the cost of interrupting people's flow - if it costs $100 to bother someone, people won't do it.
wedge11 Mistakes and Uncertainties within 37 Signals (
*11.1 Appless app - writeboards.
*11.2 Overthinking affiliates program
*11.3 iteration fatigue
*11.4 acclimating hires
*11.5 single sign-on
*11.6 rotate chores
*11.7 backpack debt