Portfolio

500px (2016-present)

500px is the place where photographers grow – grow their skills, their audience, and their wallet. I joined the team as a senior web developer, meaning I'm expected to accomplish big things technically as well as contributing to the wider organisation.

During my time with the company I've played a large role in implementing Quests (time-limited photography competitions organised around a topic), Directory (a place for people to find professional photographers to hire), the launch of new paid membership tiers, and the migration of users with legacy memberships. These products were often user-facing (built in a combination of Ruby, Rails, CoffeeScript, and Marionette), but also included the backend API used by both the website and our mobile clients.

I also built Postowl, a workflow tool that notifies developers via Slack when they receive code reviews & automatically keeps Asana up-to-date. I troubleshoot performance issues & site downtime, help find & fix bugs, help the product & design teams plan new work and scope it appropriately, and handle incoming security reports (validating them, assessing their severity, and ensuring they're fixed).

As well as my technical contributions, I've spent periods running the web team day-to-day (things like sprint planning, retrospectives, and so on) and lead a weekly meeting designed to help developers grow their skills & gain exposure to new technologies, techniques, and philosophies. I also mentor other developers – either formally for some interns, or informally through pair programming & code reviews.

Local Welcome (2015-2016)

Local Welcome is a volunteer organisation aimed at building relationships between refugees & the local community. Local chapters would organise monthly meetups, with the aim of connecting people together & forming friendships outside the group.

I built a webapp to help organise these meetings – allowing new users to sign up, listing events, sending out invites to chapter members, and tracking event attendance. It's a responsive design so works well on desktops, tablets, and phones. It's translatable, so some pages are available in Arabic. It's built in Ruby on Rails, and was hosted on Heroku.

The organisation has changed focus now, so this app is no longer online, but you can watch a couple of screencasts to get a feel of how it worked (or review the source code on Github).

FetLife (2015)

I spent most of 2015 working with FetLife, an adult social network designed for the fetish community. I joined a team of two other engineers & a front-end developer; I helped to grow the team during my time there, more than doubling the team by the time I left. We inherited an undocumented codebase & infrastructure with a lot of single points of failure; something we wrangled into much better shape by improving our Chef recipes, upgrading to Rails 4, removing complexity, and improving the test coverage.

One of my main achievements was architecting & developing a replacement newsfeed service that could keep up with the scalability demands placed on it & being flexible enough to power other features. As it was a small team, my work was extremely varied: some examples include administering production systems, building new user-facing features, improving internal tools and infrastructure, and improving site security.

I also tried to improve communication with the community, advocated for smaller iterative cycles in product development, and generally make it a more developer-friendly and productive place to work.

Skype (2014)

Skype in the Classroom hosts many tools to help teachers use Skype to increase the horizons of their classes. Together with Code.org, Skype wanted to develop a platform to allow teachers to easily arrange for computer science guest speakers to talk to their class.

I was one of two developers working on this project at Made By Many. It involved a lot of Ruby, Rails, RSpec, and JavaScript. As well as architecting & building the bulk of the speaker carousel & shortlist (pictured) I also worked on the speaker filtering interface, the backend code, and the underlying architecture. The project – originally considered risky – was delivered on time, on budget, and received positive press coverage.

Electric Handshakes (2014)

Electric Handshakes is a web app to help people make contacts at hiring events. The job seeker signs up before the event, sets up their profile with some links & documents, and chooses a cover letter. Then, at the event, they can hand someone their phone and take their email address. Electric Handshakes then emails the potential employer with their cover letter & documents - plus the job seeker can see who's opened which links.

Electric Handshakes was built in Ruby on Rails, though there was also a lot of futzing with Bash script to make deploying via Mina work properly.

How Many Shipping Forecast Areas Can You Name? (2014)

The shipping forecast is broadcast 4 times daily on Radio 4, and is a cult attraction for thousands of Britons. It features 31 sea areas, which are always read out in the same order. But how many can you name?

Built in CoffeeScript with jQuery, HMSFACYN features aliases for soundalike place names, SVG manipulation, responsive design, and social sharing links.

General Assembly (2013-2014)

I worked with General Assembly for six months to teach Web Development Immersive, a twelve week course that teaches students to be competent junior developers. As part of the instructional team I taught a range of material, including JavaScript, Backbone.js, Ruby, Rails, and Computer Science fundamentals. You can meet the students & explore what they built from the WDI4 yearbook and the WDI5 yearbook.

The Massively Multiplayer Piano (2013)

Built in 24 hours for Music Hack Day 2013, The Massively Multiplayer Piano challenges you to play chords with strangers. It's written in Node.js and CoffeeScript, uses Sockets.io for websocket communication, and is deployed to Heroku. The code is available on Github.

Silicon Milkroundabout (2013)

Silicon Milkroundabout organises a twice-yearly jobs fair for startups in London. Because they go dormant between events, they didn't have a full-time developer. I came on board to make some improvements in the run-up to their November 2013 event.

Projects included improving the details held about candidates & startups, revamping the backend tools for vetting & managing candidates, and designing & building startup profiles on the startups page. I also helped the company get a better grip on its future plans and its product/market fit.

The SMR site is built in Python with Django, along with some JavaScript.

Nopudding.com (2013)

Nopudding is a map-centric guide of veggie and vegan-friendly places to eat. Most online veggie restaurant guides are just tabular listings. These listings don't help you find places near you, and they're no good at helping a starving veggie find something – anything – close by. I attempted to solve both of these problems.

Built in Ruby on Rails with a lot of CoffeeScript and the Google Maps API, it features a mobile-optimised experience via responsive design and degrades gracefully for users without JavaScript. The icons were designed by Valeria Romeo.

Archive.org Donation Page (2013)

I helped The Internet Archive revamp their donation page by taking a rough PDF mockup and turning it into a working webpage. This included some design, improving the copy, and implementing the interactive elements of the page in JavaScript.

DrEd (2012-2013)

DrEd is an online medical practice that specialises in treatments that can be embarrassing or inconvenient. I acted as their lead developer while they expanded their permanent development team. During my time with the company patient & order numbers doubled. I introduced code reviews, proper use of git, monitoring, unit testing, and continuous integration. We also refactored several core parts of the system to be object-oriented and testable, built several new features, and launched an online doctor service for a major high street partner.

The London Olympics 2012 Total Perspective Vortex (2012)

A project aimed at contextualising the cost to the UK taxpayer of the Olympics, and how the money could have been spent instead. During the Olympics it acts as a totaliser, counting up the cost so far and displaying progress meters for doctors, nurses, and the other alternative uses. There's no server code here – it's static HTML and JavaScript. It degrades gracefully for non-JavaScript browsers, uses responsive CSS to alter the layout for different-sized screens, and displays a summary of the overall cost at the end of the Olympics.

Stop Fucking Procrastinating (2012)

A foul-mouthed magic 8 ball to help you get unstuck, in the same pantheon as What the fuck is my social media strategy and How fucked is my database. It's a simple PHP app that also includes an RSS feed, seven different designs, and a bunch of good advice about getting things done. It's like having your own internet drill sergeant.

Last.fm (2007-2012)

I worked as a web developer at Last.fm for over four years, helping to take the service from 20 million users to 40 million. I focused mainly on the backend (participating in projects such as the giant 2008 redesign, XBox client preparation, and the new Discover app) but also occasionally worked on the frontend.

I enjoyed interacting with users and working on features that made the site better for everyone, whether large projects such as delveable charts or smaller interface tweaks.

The Pitchfork Effect (2011)

I built the bulk of this project for Music Hack Day, then refined & extended it over a couple of weeks. There are three broad parts: a spider that creates a database of Pitchfork reviews, backend code to generate the page & graphs, and some auto-generated code that serves as an AJAX endpoint for the interactive elements.

A Very Webdev Flat Hunt (2011)

Tired of the Gumtree circuit, I built this and sent it out into the world to help me find somewhere to live. It was also a chance to play with HTML5, font embedding, and some frontend interface creation.

It did help me find a flat.

The UK General Election Deposit Loss Totaliser (2010)

If you stand for election in the UK, you've got to put down a deposit of £500. If you don't get at least 5% of the vote, then you lose the deposit. How much did each party lose? How does that compare with the historical trend? I made a small website that answers that question.

If you're going to invest in a political party, I recommend avoiding UKIP.

Emorama (2009)

Another weekend experiment, this time in Amazon storefronts and AJAX. It's also a single-page website that feels like a multi-page website, which is an OK trick but probably a bad idea.

You can learn more about my skills & experience from my CV.