Working with the web for 10+ years, I'm passionate about building great user experiences, doing both front-end and back-end development. Most recently I've focused on front-end engineering, but consider myself a generalist.
I've worked in small and large teams, building and maintaining sites with audiences of dozens to millions.
Experience & Skills
Lumi – Lead Front-End Engineer (August 2011 → Present)
As the lead front-end engineer, in a very small team, I'm responsible for technology choices, architectural decisions, day-to-day development and hiring of new developers. The Lumi front-end stack I built included;
- HTML5 - History API, LocalStorage, semantic markup
- CSS3 - CSS Animations, GPU acceleration for smooth scrolling, and using Chrome timeline prevent jank.
- SASS/Compass - Mixins, conditional IE support, dynamic responsive breakpoints and image-spriting
- jQuery - Event handling, AJAX, DOM manipulation, plugins
- Mustache - Client side rendering, shared with server-side rendering using Pystache
- Grunt - Automation of JS/CSS minification, re-building assets on local changes, running linting and tests
I built Lumi using Progressive Enhancement and Responsive Web Design, often with a Mobile-First approach, starting with plain markup, layering on styling and behaviour, and applying RWD (breakpoints and fluid layouts). This allowed us to support many more users without creating platform-specific sites or apps.
I took a strong interest in client-side security threats; preventing XSS and CSRF, mitigating click-jacking with X-Frame-Options, defending against session highjacking HttpOnly and Secure cookies.
I use Python/Djangoto build views, APIs, internal services, tools and tests. And built a system of templates and JSON data models shared by client and server, maintaining consistent UI for push-state and full-page changes.
I've worked on Chrome and Firefox extensions, writing JS to be embedded into 3rd party pages and be extremely defensive to function in hostile contexts and without affecting host pages behaviour.
Last.fm – Senior Web Developer (June 2007 → August 2011)
I worked in a team of web-developers, moving between front-end and back-end tasks, working closely with teams of designers, product managers, support staff, operations and data services engineers.
On back-end projects I used OO PHP5, PostgreSQL, MySQL, Memcached and Thrift to develop sites features and public HTTP APIs. Profiling DB, internal API calls and code performance using Xdebug to ensure scalability.
I worked on, and led, a number of high-profile features and project, including:
- Rebuilding the Homepage; A complete redesign, requiring high level browser compatibility and testing. Working with varied data sources to generate localised content and developing scaling strategies.
- Developing new visual web-radio experience, starting by rapid prototyping with interaction designers, the executive team and advertising team to best meet requirements
- Performance optimisation of Last.fm API for Xbox360 App launch
- Building a complex suite of internal tools for our customer support teams, hugely improving their workflows
- Developed a short URL scheme to reference Last.fm content in tweets (before t.co existed) and in print
- Music Manager; Product used by 200k+ Artist & Label users upload and manage their content. Worked with a team developing a royalties scheme, which generated reports and payments for 100k Artists & Labels
Spring Digital – Web Developer (Aug 2005 → June 2007)
Front-end development of semantic and accessible sites. Back-end development of bespoke LAMP content management systems. Able to flexibly switch between roles and tasks easily,
- Developing an internal web app that managed company projects and accounting, used daily by 20+ staff
- Ran code reviews within the dev-team, focusing on quality, security and documenting practice. Also worked with designers to teach XHTML/CSS/JS and improve the design process
University of Portsmouth – (Sep 2002 → Jun 2005)
Speaking & Events
I was invited to speak about scaling Last.fm for Xbox at DIBI in Newcastle. I've spoken at smaller 'un-conference' events in London, like Barcamp (on the topic of life-streams generated from microformats and social graph tools) and at ScaleCamp, a two-day event on scaling and performance. I've also attended a number of Music Hack Days both as a Last.fm representative and as a hacker.
- Flickr-Browser, a Backbone.js for browsing my exported Flickr photo library and metadata
- Now Playing Radiator - An information radiator using the Last.fm API to display what a user is listening to in real time