Archive for August 2012

Objective Process for Product Reviews

I watched Jeff Veen’s “Designing for Disaster” talk (below) and took away a couple of parts that I thought were really good. Some notes:

How to do Product Reviews (can be design, product, process, anything) — making an objective process out of something that is very subjective.

  • Optional attendance, but mandatory participation (keeps everyone focused)
  • Not a forum for expressing opinions
  • Rather, a place to solve problems.
  • Define in the beginning if session is supposed to be divergent or convergent.
    • Divergent –  I want as many ideas to solve this problem as possible – let’s talk about everything; brainstorming
    • Convergent – Evaluating feasibility, acknowledge constrains. Drive towards consensus.

Driven by Purpose

  • Measure momentum in days (weekly checkup of progress)
  • Measure projects in weeks (figure out pace, when we will go out with the next thing)
  • Measure priorities in months (“we’re going to focus on performance and distribution in Q2”)
  • Measure vision in years (“organize the world’s information and make it universally accessible”)

Uploading static assets (CSS/JS) to S3 for CloudFront CDN

For a new Backbone.js + Flask project I’m using grunt + grunt-contrib, RequireJS’s r.js, Flask-Assets / webassets for static file (LESS/CSS, JS) compilation. But I needed a good way to get my nicely optimized static files onto a CDN and serving proper HTTP headers.

Using the excellent s3cmd tool, here’s what I came up with.

This example will break for browsers/proxies that don’t support gzip, but this is fine for my needs. Any other solution would either require a custom origin web server or writing different filenames in HTML depending on the request coming in. But since I want to use S3 as my origin this is the easiest/simplest solution.

Since all assets are “built” with a md5 version number hash in the file name, I want far futures headers to cache permanently.