Fly on the wall: “pony integration is a deal breaker” 16 Mar 2006
24 comments Latest by DFinley
Some of the activity this week at our internal 37signals Campfire chat room:
Jason pointed out “The sharpest knives in the drawer,” an article about Oxo tools (which designs smart stuff like this measuring cup that has inside markings so you can measure without raising the cup to eye level).
“We never consider anything finished.”…”Each change was very incremental, addressing a very particular thing, and in the end we got a product that is very highly rated. It might not jump out to the consumer, but it’s improved.”
Ryan commented, “I like the bit about ‘addressing a very particular thing.’ It’s such a different mentality than ‘what should we do for v2.0?’” Jason said, “That’s how Japanese car makers have worked for 20 years…slowly improving every year…and now they make the best cars in the world.”
David’s grooving to Last.fm which he saw at Etech. Install a small iTunes plugin and Last.fm tracks your listening preferences and gives you a personalized radio station based on similar music.
I got a kick outta this quote from Kathy Sierra’s recap of SXSW…Dr. James Bower, neuroscientist, during the “Serious Games” session: “Are you over 15 years of age? Then you have no idea what’s going on.”
Ryan showed off a nice move he picked up from CSS Mastery. Check out the screenshot below (click for larger version). Ryan tells the story: “normally i would use a table for ‘Description’ and ‘Category’ to make the fields line up and stuff…[here] the text is in a
Jamis says Gmail has been “dog slow” recently. Jason kinda agreed and said that lately he’s found it working faster in Safari than Firefox.
Sam posted some code:
def file_is_gif?(filename) File.open(filename) do |file| return false unless file.read(6) =~ /GIF8[79]a/ file.read(4) end end def account_logo_dimensions return [0, 0] unless dimensions = file_is_gif?(account.complete_logo_path) dimensions.unpack('vv') end
Jason marvelled, “jesus I can actually READ that code and understand it! amazing.” Sam answered, “the unpack part is kind of cryptic, but yeah, i love ruby :)”
Everyone thinks these swatches Sam added to Campfire are hot.
Jason did this video interview with Stowe Boyd earlier this year and it just went up this week. It involves a beret and bricks. And Stowe says things like this: “The impact they’re having in the world is much larger than simply the success of their apps like Basecamp. It could be that the larger legacy for 37signals will turn out to be the promulgation of this set of design and life principles…”
We chuckled at this comment at thinksecret.com: Adobe needs to Get Real.
Marcel and Jamis like Fred Astaire (Jamis’ kids watched “Royal Wedding” where Fred dances on the walls and ceiling). When it comes to dancing on ceilings, Jason prefers Lionel Richie. (OK, not really). Fred’s great, but I recommend checking out Cyd Charisse.
Ryan had another reason for not using functional specs: “there’s more room on a blank sheet of paper for features than on an interface…there’s room on the document for all kinds of ideas, but there is only so much room in the actual screen for something new…so you have to decide how to use it…you can’t take 100 sq. feet and build a super wal mart.” Marcel said, “I dig that.”
Sam found this approach “very useful in arriving at a solution”:
1. write down the problem
2. write down why it’s hard to solve
3. write down what would make it easier
4. write down possible ways to implement things that would make it easier
5. write down why those ways suck
6. then make it not suck
Ryan’s response: “yeah. in early Christopher Alexander-speak, that process pulls the forces apart so you can see the dependencies…you can evaluate all the forces that push on the problem and solution.”
Marcel offered up this post on crazy menu which says, “I was so stunned by the English blunders herein, I had to buy the menu from them. Can you imagine the scene when that happened? I’ll never forget it. They couldn’t decide whether to be flattered or confused. “
We checked out Google Mars and Google Moon. Jamis: “zoom all the way in with google moon…the surface turns into cheese.”
Jason enjoyed this story: Now THERE’S a couple that knows how to fight! (“A Mexican couple were recovering separately after a marital spat got out of control and saw them firing guns, throwing knives and hurling homemade bombs…”)
Remember the upload bird? Sam was eating some fruit and a strawberry bled onto a pineapple wedge and said it reminded him of the upload bird. Ryan cracked, “sam is seeing birds in his fruit…no more LSD for you.”
Ryan bought the Virginia Tufte (Edward’s wife) book, “Artful Sentences” and said it’s beautiful. “it’s like 90% examples…and they’re grouped based on the principle…like “Short Sentences,” “Dependent Clauses,” etc…her commentary is extremely tufte ish.”
Campfire lets you set a room’s topic to whatever you want. We usually put in a quote we like. This week, Sam changed it to this one by Paul Rand: “Art comes in the ingenuity of a designer who is able to, in a way, conceal art as a service to business.”
Marcel said, “I learned recently that during labor mothers produce some hormone (oxy-something) that makes them feel strong affection for their child. Its release is suspected to help insure the child survives (on account of its mother taking care of it). Humans as well as other animals produce it during labor (for example, elephants). But, it is also produced when looking at your child’s face. Furthermore, humans produce it when looking at most any child, not just their own and it is not limited to human children. Looking at most any animal’s child will make you produce it. Maybe this in part explains how people react to cutenessoverload…” I mentioned this article on the topic. Jamis, the only 37signaller who actually has kids, said, “I think I produce that hormone when looking at rails code.”
Jason labelled the Aerogarden cool. “roots grow in the air…no dirt, no soil…NASA baby!” Marcel countered: “i welcome innovation and increased efficiency but the lit major in me is borderline resistant to the loss of aesthetics of hands-muddied-in-the-backyard…i was growing tomatoes once. babied them for over a month. was surprisingly prideful of them, as though they were my children. and just as they reached full “bloom”, as it were, a slug decimated them…in certain ways it was fitting…i didn’t have the heart to eat them anyway :)” Sam just liked the photo of the woman going WOW on the Aerogarden page.
Jason, the email gatekeeper, makes a point of spreading positive feedback, like this note…
Campfire ‘just worked’ for me this morning, and I wanted to share my story about how it saved my ass.
My sister called me in a panic due to the fact that she had to submit a law school paper and her network wasn’t working. It turned out she could read mail and surf the web, but couldn’t send mail. Either her router, ISP or firewall was blocking the traffic. A problem she wasn’t equipped to handle technically, and there wasn’t time to spend on the phone with the cable company.
After trying literally every possible method of transferring the word doc from her computer to mine, via email, MSN Messenger, AIM, ftp, telnet, bittorrent, and even file upload services such as rapidshare, it became clear that something was blocking the ports and short of reconfiguring the router or contacting the ISP, this wasn’t going to get resolved.
I then had the epiphany. “Let’s try Campfire!” And you know what? Of course, you do. It just worked! And it was the only thing that worked. Within two minutes of signing up and creating the chat room, she was able to join and upload the word doc to the room from which I then grabbed it and sent it to her recipients. Literally, two minutes, after about half an hour of frustration. It was just that easy.
So I don’t want to know what non-standard ports you guys are using, what file uploading mojo you sold your souls to employ, I’m just amazed and inspired. It’s great engineering.
Marcel thinks the guy who wrote this post rules (excerpt: “large companies could isolate themselves from the best tools because the best toolmakers don’t want to deal with them”).
With all the various product requests we get, we think that someone will ask for a pony soon. This is how we imagine it might go…
Sam: i want a pony with campfire integration
Ryan: hot_pony pony.hot?
Sam: how can you possibly reconcile not offering that??
Matt: campfire is useless w/o a pony
Ryan: yes, Pony integration is a deal breaker for our enterprise
24 comments so far (Jump to latest)
dusoft 16 Mar 06
“Ryan tells the story: �normally i would use a table for �Description� and �Category� to make the fields line up and stuff�[here] the text is in a tag, and then the label element is floated left�and you can put a right width on the label element. it�s totally simple.�”
Oh, somebody has finally found what the label element is for. Using tables? Bah! And you call yourself web standards supporter? Shame…
Thatch 16 Mar 06
Um, you really think that code is legible?? Over the past 12 years I’ve worked with C, C++, C#, Java, VB, Pascal, Perl, and PHP. In my opinion, Ruby is one of the least easy to read of any of these languages.
def
do |file|
file.read(4)
That’s just a small part of the code, none of which is intuitive or easy to read. It would be nice if the Ruby folks admitted that for once…
rightWidth 16 Mar 06
Yeah, I set my rightWidth to something once, it was cool. In all seriousness though, as cool as labels with fixed widths, right text-alignment, and padding between the label and field are… sooner or later you will wish you still just used tables.
I don’t—but I also spend a lot of time making everything look copacetic across the browser spectrum (I’m not talking a login form here…)
So good luck with that, but remember, tables aren’t evil. Using tables for non-tabular data is. If you think about it, forms have a column of labels and a column of fields, two per row, sounds pretty tabular to me, so semantics weenies can get bent.
David Heinemeier Hansson 16 Mar 06
Thatch, as a programmer it can be hard to take up new programming syntax without comparing it to what you know. This story, though, was about how Jason, a non-programmer, found Ruby to be very readable.
I think all of the three examples you mention are both very readable and intuitive. “def” = “[def]ine method”, “do |file|” = “[do] work with |file|”, “file.read(4)” = “from [file] read [4] bytes”.
But yeah, aesthetics are surely a personal thing.
Sam Stephenson 16 Mar 06
So good luck with that, but remember, tables aren�t evil. Using tables for non-tabular data is. If you think about it, forms have a column of labels and a column of fields, two per row, sounds pretty tabular to me, so semantics weenies can get bent.
Tables can be evil, but not because semantics weenies say so. Table elements are notorious for exhibiting wildly different behavior in each browser when manipulated by the DOM/JavaScript. So from a practical standpoint, I’ve found the path of least resistance (at least when you’re scripting the page) often means avoiding tables whenever possible.
Jeff Coleman 16 Mar 06
C’mon, how hard could it be to offer a pony? Programmingwise it should take two minutes, five tops.
DrewBull 16 Mar 06
-Off Topic-
Just thought I’d drop a line to 37 signals in response to the comments @David & @Sam.
This is my analogy on the way you comment:
“Fly like a butterfly… but sting like a bee”.
You guys ever thought about a topic on calming internet mobs? You seem to have a proess when it comes to people trying to light fires in the comments on here and other places. I’m amazed at what little gets burned in these comments here on this blog.
Chris Ryland 16 Mar 06
Just out of curiousity, when you guys (37s) put up public pictures, why don’t you point at some Backpack page or other?
Alisdair McDiarmid 16 Mar 06
Sam, could you help me understand why you’re calling the file.read(4) in file_is_gif? please? Doesn’t that make it return “GIF8” instead of true?
Sam Stephenson 16 Mar 06
Alisdair, sure — it’s pretty succinct. We’ve already read the 6-byte GIF header, so file.read(4) reads (and returns) the next 4 bytes, which contains the image dimensions. In Ruby, anything that’s not “false” or “nil” works the same as “true” in a conditional. So file_is_gif? works both as a predicate method, and a way to get those 4 bytes without reopening and rereading the file.
SH 16 Mar 06
Jason has a pony in his desk drawer.
FredS 16 Mar 06
I’ve been using definition lists instead of tables:
label
input
Then I float the dt to the left and text-align: right. It takes some margin work and line-height tweaks, but its pretty nice alternative to tables.
FredS 16 Mar 06
Stripped my tags. Uh, dl tag, dt tag for label, dd for input.
J Aaron Farr 16 Mar 06
Hey, thanks Marcel!
Having worked in a number of large corporations I’ve found it a shame (and frustrating) that I’ve been unable to use some of the best tools available because of silly policies. Businesses want to insulate themselves from risk but do so by exchanging innovation and trust for mediocrity and regulation. They throw up walls and filters in order to only allow the safe players to get in. Meanwhile, the best players can just avoid the hassle altogether.
Thankfully I’m weaning myself from the need to work for and with large businesses and the feeling is quite liberating.
brad 17 Mar 06
It’s funny, I’ve tried quite a few of Oxo’s products but the only one I’ve kept is that original Good Grips vegetable peeler (which has lasted forever and really is great). I’ve been disappointed or at least unimpressed with pretty much everything else I’ve tried. The absolute worst was their teakettle, the one that gives off a harmonica-like hum (which only works sometimes, meaning you can’t rely on it to remind you when the water is boiling) and which had a spout so poorly designed that the water came gushing out in big messy spurts when you tried to pour. But those vegetable peelers are great!
engelgrafik 17 Mar 06
Is it possible to be a sharp knife by association? I’ve had those Oxo cups and stuff for a long time now… definitely over 3 years. And let me tell you… definitely makes me feel smarter!! ;)
Ashley Taylor 18 Mar 06
No, forms are not tabular data, but they are a tabular input method.
Let me explain in a more pedantic fashion:
table: An orderly arrangement of data, especially one in which the data are arranged in columns and rows in an essentially rectangular form.
OK, so the average form provides you with an essentially rectangular arrangement of rows, each with a label like “Name”, “Email”, or “URL”. It is then your job to fill in the data. It’s not tabular data until you provide the data. Before that time, the form is just waiting for input. Hence, it’s a tabular input method.
That said, I can sympathize with JavaScript programmers and blind people. I’m just saying. The very fact that we come up with these CSS hacks to get forms lined up and table-like shows to me that they are a tabular input method.
DFinley 30 Jun 06
A minor point: Virginia Tufte is Edward Tufte’s *mother,* not his wife.