So Day Three of my weirdest ever holiday finds me at a one-day workshop called Building Enterprise Web Apps on a Budget – How We Built Flickr. Right up front I should probably say that it’s presented by my mate Cal and I’m here courtesy of Ryan Carson and Carson Workshops, so I’m probably biased or bought or both. Nonetheless, I need you to believe that I’m enjoying it enormously. It’s very much from a software engineering / architecture kind of perspective rather than the more conceptual / design / user-facing perspective that comes more naturally to me, so it’s difficult for me to assess how accurate it is, but it certainly appears an intensely practical and rapid way of building and developing web apps (and I trust Cal enormously). The practice that he describes – interestingly – is also completely alien to the practice that I’ve observed in large organisations, which either means that one or other party are ‘doing it wrong’ to a greater or lesser extent or that certain types of organisations by necessity have to operate in different ways. I’m going to be banal and insipid and say that it’s probably a bit of both.
The day’s about two-thirds of the way through, so I don’t have a complete sense of the day, but so far I can very much recommend it. My immediate gut-reaction is that I just miss working with Cal. But since not everyone in the world is going to get that opportunity, I guess it’s not an enormously useful insight to share with the world. So instead I’m going to pick out a few of the comments / phrases that he’s said that have struck a chord with me directly.
One of the most interesting parts of the whole enterprise for me was his articulation of some clear levels of abstraction between database work, business logic, page logic, page mark-up and the presentation layer. It’s not an enormously novel set of distinctions I guess, but the level of clarity about each area really appeals to me. It’s an architecture that really supports the rapidly iterative way of operating that I enjoy and think is core to developing great online applications.
One particularly interesting chunk was about the relationships between various people operating at different layers – with the developers able to easily create page logic-level functionality that allow the designers to take it away and build user-facing features around them. This relationship is phrased as a negotiation, with the designers coming back and asking for page logic level functionality as they see a need for it (and then being completely responsible for the building of the front-end elements of the site, and for checking it before launch). The whole enterprise is around continual development and improvement and reaction, which probably explains another fairly jaw-dropping moment of the morning – when Cal revealed that on ‘good days’, Flickr releases a new version every half an hour. In order to support this kind of working, they’ve built structures that ‘supports rapid iteration but enforce at least a little rigour’. Stunning. Although clearly not right for everyone…
A lot of this stuff really fits with my aesthetics of developing products effectively for the web, because – I guess – it’s actually a very responsive and very web-native way of building. This process cycle of rapidly building, creating structures that support future iteration, being connected to the users on your site and being able to react and redevelop your proposition almost on the fly – these all seem to me to be the way that most of my peers worked before moving to large organisations that attempted to enforce standard software development methodologies on a completely different medium. And of course, it all hooks in with elegant ways of writing and producing web pages in ways that allow rapid change and evolution, making design about interactions and services and components and design swatches and aesthetics and change rather than about .psd files, yearly redesigns and top-down management (and sign-off) from a distance. I’ve had a post around this area bubbling away for a while now. I’ll probably have to write the damn thing now…
I might write more later when we hit the section about APIs, which is the area that I’ve been waiting for pretty much all day. But in the meantime, I’m going to end with a few quotes from the piece that I’ve noted down through the day that seemed kind of core to me.
‘We should listen to Donald Knuth when he said, “We should forget about small efficiencies, about 97% of the time. Premature optimisation is the root of all evil.” This is the most important thing that you’ll ever hear as a software developer.’
‘In a rapid environment, we’re going to want to make a lot of releases.’
‘It’s more important for people on a team to agree to a single coding style than it is to find the perfect style’
PS. I believe that these workshops are coming to London later in the year and I can definitely recommend that people look out for them.