background preloader

37signals | Tech Stack/etc

Facebook Twitter

Ask 37signals: 10 ways to "get ink" A design and usability blog: Signal vs. Noise (by 37signals) Performance tuning is a fun sport, but how you’re keeping score matters more than you think, if winning is to have real impact.

A design and usability blog: Signal vs. Noise (by 37signals)

When it comes to web applications, the first mistake is start with what’s the easiest to measure: server-side generation times. In Rails, that’s the almighty X-Runtime header — reported to the 6th decimal of a second, for that extra punch of authority. A clear target, easily measured, and in that safe realm of your own code to make it appear fully controllable and scientific.

But what good is saving off milliseconds for a 50ms internal target, if your shit (or non-existent!) CDNs are costing you seconds in New Zealand? Level two, once reasonable efforts have been made to trim the fat around the X-Runtime itself, is getting some big numbers up on the board: Mean and the 90th percentile. Keep going beyond even the 99th. A design and usability blog: Signal vs. Noise (by 37signals) Recently I did a little side project to improve the website for a non-profit animal shelter in our town.

A design and usability blog: Signal vs. Noise (by 37signals)

The existing site was an outdated Microsoft FrontPage menagerie, so basically anything I did would be a big improvement. I spent around 20 minutes creating a simple design in HTML, and then several hours editing, rewriting, and refining the copy. In the end, I reduced a scattershot 25-page website down to about 8 focused pages written in a friendly tone. My next instinct was to apply our great modern web toolset to the site. Let’s add a static site generator or a CMS! Then I started looking at those tools critically. These are tools made by geeks, for geeks. Who knows who will take over the site in the future. Today, a basic HTML/CSS site seems almost passé. As builders, we like tools and tech because they’re interesting and new, and we enjoy mastering them. Remember when the web was damn simple?

A design and usability blog: Signal vs. Noise (by 37signals) Basic Explanation Some background On Dec. 4 around 5:30 p.m.

A design and usability blog: Signal vs. Noise (by 37signals)

CT, a number of our sites began throwing errors and were basically unusable. Specifically, Basecamp Classic was briefly impacted as it was very slow. Campfire users experienced elevated errors and transcripts were not updated for quite some time. Why our sites failed. Ask 37signals: How do you document code? Emil Sundberg asks: When serving thousands of customers with Basecamp, Highrise etc there must be a lot of advanced features though, how do you document your projects?

Ask 37signals: How do you document code?

How easy is it for a newly hired developer to understand how your products work. The short answer is that we don’t document our projects. At least not in the traditional sense of writing a tome that exists outside of the code base that somebody new to a project would go read. I haven’t ever seen that work consistently and successfully at any software company I’ve been involved with. Further more, I don’t really find it necessary for the kind of work that we do. We try to do a fairly good job at keeping our test suites current and exhaustive as well. Finally, we write our application in a wonderfully expressive and succinct programming language like Ruby that leads itself very well to a programming style like the one Kent Beck preaches in Smalltalk Best Practice Patterns. The road to faster tests. A week ago, it took about 15 minutes to run all of Basecamp’s tests.

The road to faster tests

Now, if you adhere to the test-driven development (TDD) philosophy, you’ll know that tests are meant to be run often. Like, every few minutes, preferably. The tests are what give you confidence in your code, and the ability to refactor with impunity, not fearing that your changes are breaking existing features. They are the safety net for our daily tight-rope walk across our code base. The New Guy's Computer. Like most programmers starting a new gig, I spent my first day at 37signals setting up my work environment.

The New Guy's Computer

I thought it might be interesting to keep track of what I installed along the way… SizeUp for managing windows Alfred for launching applications Xcode for compiling software Homebrew for installing software TextMate for editing text 1Password for managing passwords.

Caching/Etc | 37signals

Using event capturing to improve Basecamp page load times. We’ve been busy tightening the nuts and bolts on the all-new Basecamp in the wake of last week’s launch.

Using event capturing to improve Basecamp page load times

As part of the process, I decided to take a closer look at client-side page load performance. Shaving even a tenth of a second off of page load time can have a big impact on perceived performance, so it’s a worthwhile investment. Profiling the JavaScript page load event led to a surprising revelation. On pages with many to-dos, an overwhelming majority of the time was spent initializing sortable behavior. The culprit looked something like this: $.ready(function() { $("article.todolist, section.todolists").sortable(); }); In other words, when you’d load any page with to-dos on it, Basecamp would make the items of each to-do list reorderable, then make the whole collection of to-do lists reorderable.