UK National, currently living in San Francisco, California (on work visa)
+1 415 858 3260 (US) / +44 (0)7989 572 632 (UK)
I’m an experienced and flexible developer experience in regularly shipping products to hundreds of thousands of users, and a record of picking up and using new technologies quickly, working mainly in web technologies and native mobile development.
I excel at working on fast-evolving projects with modern technologies in a close-knit team.
- Java: Android, Spring, Restlet, Hibernate, Tomcat, Jetty
- Objective-C: Cocoa for Mac OS and iOS
- Python: Python, PyObjC, mod_python, Django, gunicorn
- Ruby: Ruby, Rails, JRuby
- Perl: Perl 5, mod_perl, CPAN
- Databases: MySQL, Postgresql, SQLite, CouchDB, MongoDB, Redis
- Version control: Git, Subversion
- Other technologies: Apache, XML, OAuth, Puppet, Continuous deployment
August 2013 – Present: Eventbrite (Principal Mobile Developer)
Eventbrite acquired Lanyrd in the summer of 2013, and I moved to a senior role in their native app development team. I work on both the iOS and Android apps (with a focus on the Android side). I am responsible for setting architectural direction in the Android app, and participate in a mentoring role and in code reviews with the rest of the engineering team. (this paragraph a work in progress)
November 2011 – August 2013: Lanyrd (CTO)
Starting as a contractor, I quickly became a full-time backend developer for Lanyrd, and in April 2013 I became CTO.
At Lanyrd I worked mainly on the Django/Python based main application and a set of associated services built on Solr, Redis, MongoDB, Postgresql and Memcached, helping scale it as the company grew while maintaining fast page load times. Lanyrd is a large, complex web application, fully responsive across a range of display sizes and using an array of sophisticated back-end technologies, and I’ve been responsible for the design and development of the server side of the stack for the majority of my time here.
I was also responsible for updating the development and deployment systems to be completely automated – Lanyrd can now safely deploy in minutes, multiple times a day, with a single button click, and new developers can provision their environments with a single shell command. We have a deep monitoring suite that lets me track page load times in live down to individual views, and see where the application is spending time.
I continued development on the iPhone application, eventually entirely rewriting it into a lightweight and flexible framework that lets us change virtually the complete user experience using server-side code, rather than having to roll out another version through the app store, and share the API between iOS and the mobile web site while still using platform-native controls. I also added support for iPad, using a sliding-doors technique that let me target tablets without having to redesign the interface, and in 2013 I released an Android version of the app using the same approach, allowing us to target four platforms with one backend.
April 2011 – November 2011: Freelancing
I worked primarily for Philter Phactory, developing a network of intelligent agents, deployed on Google App Engine (now Google Cloud). These bots have personalities, and periodically crawl the web looking for things that match their interests, then post text about the links to a personal WordPress blog. I was responsible for the majority of the development on this project, along with handling sysadmin and deployment tasks. Because of the nature of the contract, there was also a significant amount of documentation, so that my replacement would be able to continue the work after me.
Nov 2009 – March 2011: Nokia (developer / architect)
At Nokia, I architected and developed a REST API back-end in Java, communicating with a web front-end and a mobile application using JSON and XML. I was in charge of a team of 4 back-end developers and testers, responsible for scheduling, short-term planning, and both internal and external dependency management to ensure that the product shipped on time.
I used Java, Spring, Restlet, OAuth and Hibernate to build REST-based web services, and deployed them into Tomcat and Jetty containers. We deployed applications using Puppet and RPM packaging. Nokia Berlin practices Agile development, with all teams developing in 3 week sprints.
Nokia is a very multi-lingual environment, though shares a common language of English, so I’ve become adept at communicating using clear language that can be unambiguously understood by people of different cultures with different idioms and expectations.
Aug 2007 – Nov 2009: Dopplr (developer)
I started work at Dopplr in 2007 as the second programmer on the product, and remained as the main lead developer until November 2009, when the company was acquired by Nokia. During this time Dopplr grew from a closed beta product with a friends-only user list to a well-known web startup with a large user base. I was responsible for all aspects of architecture and development, including scaling the site from the initial prototype to running on multiple servers, including the use of message queues to defer long-running jobs, as well as a dedicated search server.
During this time I also worked internationally with colleagues around the world – a designer based in Sydney, a front-end developer based in Montreal, and senior management in Helsinki.
Dopplr was built using many technologies, including Ruby on Rails for the main server, MySQL for data storage, ActiveMQ as the back-end server and Solr/Lucene for search. It also used a variety of smaller local services, such as a Haskell-based Jabber server, all of which needed to communicate with each other. I also implemented Dopplr’s OAuth-based XML/JSON API for talking to third party services, and helped develop the Dopplr iPhone application, which uses this API.
Dopplr also used a variety of cloud-based services, such as Amazon EC2 for short-term processing needs and S3 for storing and serving large static file-sets.
Working at Dopplr during this time has helped me keep abreast of new techniques and technologies, especially in the fields of database scaling and integration with third party services. Dopplr relies very heavily on a variety of external services, and I feel that this ‘small pieces loosely joined’ philosophy has informed both Dopplr’s development and my personal design techniques.
In November 2009 Dopplr was acquired by Nokia and I was transferred, along with the rest of the development team, to Berlin to work on internal Nokia projects.
Aug 2003 – Aug 2007: Fotango (software developer)
Fotango was a bespoke software development company wholly owned by Canon Europe. While there, I had significant involvement in almost every deployed project, and spent a large amount of time assisting, mentoring and training the front-end team in the use of our frameworks and general good development practices.
We worked primarily in Perl, for stand-alone scripts, GUI applications (on Mac OS X and Linux), CGI, and full mod_perl applications. I gained extensive experience with many CPAN modules, including Template Toolkit, DBI, and XML::LibXML, and have contributed several modules to CPAN. I was an active member of the London Perl Mongers group, and have given talks on UTF-8 in Perl, Mac GUI applications, and other topics.
At Fotango I came to believe strongly in test-driven development, and used many aspects of Extreme Programming to help prioritise features and ensure high quality code, including story-based development and pair programming, all of which I still find extremely useful. I also helped in the development of the internal continuous integration system, which was invaluable in writing reliable software.
Fotango gave me experience designing and deploying complete web application solutions, including static / mod_perl paired Apache web servers, database (both MySQL and Postgresql) setup and replication, load-balancing, scaling, and high-availability solutions. My code has stored and served very large numbers of digital camera photos and user data for Canon customers spread across Europe. I also developed and maintained the user-management API for the Canon Europe single sign-on system.
In my free time, I still write code. I tend to use Python for web-based projects, including writing GUI applications on Mac OS X using PyObjC, mod_python based web applications using Django, stand-alone scripts and XML API clients. My public Python applications include an iTunes client library (used in several Linux media applications), and a Mac network services browser. I have also written cross-platform GUI applications in Python using GTK 1 and 2. More recently, I’m very much enjoying doing mobile app development, on both iOS and Android. I have recently released a version of my network services browser for iPhone to the iTunes application store, and I’m working on an Android version in between my other commitments. Most of my interesting projects are available online at movieos.org/code.
Sep 1997 – Jul 2000: Maths BSc (2:2 Honours), from Imperial College, University of London.
Links & Projects I’m proud of
- Lanyrd: http://lanyrd.com
- The Lanyrd native apps: http://lanyrd.com/mobile/
- Dopplr: http://www.dopplr.com (sadly defunct)
- The Dopplr iPhone app: http://www.dopplr.com/iphone (sadly defunct)
- DjangoKit – package Django sites as GUI apps: http://movieos.org/code/djangokit/
- Flame – a Mac OS services browser: http://movieos.org/code/flame/
- Flame for iPhone: http://movieos.org/code/flame-iphone/
- Other interesting personal projects: http://movieos.org/code/ http://github.com/tominsam/
CV last updated 2015/04/08