I’m a software engineer with twelve years of experience developing web applications and embedded firmware, as well as providing technical oversight for small teams of software developers.
Skills: what I do...
- Develop websites that perform well and are easy to use. I’ve used various languages and databases, and I’m experienced with the scaling and caching required for large-scale websites (1M pageviews per day).
- Create native iOS apps for iPhone and iPad devices. I’m familiar with all aspects of app development from design to code to the App Store.
- Contribute to open source projects, for example Python (more here).
- Administer web servers and automate complex code deployments on Windows or Linux.
- Write desktop tools and automated test software.
- Develop embedded firmware for data loggers, control systems, and other electronic devices, using 16-bit and 32-bit microcontrollers.
- Manage and provide technical leadership for small teams of software engineers, and oversee product development.
- Communicate and document effectively and relate well to people. I also design, write specifications for, and manage projects.
- Managed a small team of software developers. Oversaw architecture decisions and performed code reviews for most of Oyster’s software projects. Led the hiring of new software engineers.
- Ported the entire C++ web backend (which produced static HTML pages) to Python (which renders all pages dynamically). This allowed us to develop and release business-level features much more quickly.
- Wrote code and tools to internationalize and localize the entire website, including automatic translation of hotel reviews via translation APIs.
- Implemented many web-based internal tools, including a photo album editor and a workflow system to help salespeople schedule photoshoots at hundreds of hotels per month.
- Helped design and implement a custom content management system that enabled us to publish hotel reviews realtime. The CMS is also used to write content roundups, slideshows, and blog articles, which increased revenue and provided a more integrated user experience.
- Implemented a data analytics pipeline using Snowplow, Amazon Redshift, and Looker. The system stores and can query almost 1B rows in a few seconds.
- Co-developed Oyster.com’s photo-rich iPad app, including the app’s Objective-C codebase and its API backend.
- Implemented the backend for Oyster Shots, a tag-based photo search engine for 1M+ hotel photos. This was turned off in 2014 for business reasons, but you can read more here.
- Wrote much of the site’s user account and hotel booking system (turned off in 2011 for business reasons), including secure credit card and payment handling.
- Co-wrote heavily parallelized software to resize and watermark millions of images in many different sizes using Amazon EC2.
- Supervised and administrated the datacenter’s server and database configuration. Automated server setup and code deployments using IT automation tools such as Ansible.
Brush Technology – Software Engineer and Co-director – August 2006 to May 2010:
- Co-founded and designed the microPledge crowd funding website, and developed about a third of its codebase (in Python and PostgreSQL). microPledge implemented secure financial transactions, advanced Ajax-based voting, and scaled to thousands of campaigns and users.
- Designed, implemented, and promoted Gifty Weddings, a website that helps couples make great wedding gift registries.
- Wrote embedded firmware in C++ for Hamilton Jet’s large-scale jetboat control systems. Wrote testing and GUI tools in Python and C#.
- Worked on cellular telemetry firmware and GPS interfaces using Atmel AVR and ARM7 micros for various clients.
- Developed low-latency IP networking software in C and Python for a client in the high-frequency trading industry.
- Wrote articles for our programming blog, for example, on Knuth, protothreads, and bloatware.
- Managed projects and staff. As a cofounder, I was also heavily involved with the company’s business planning and decisions.
Harvest Electronics – Software Engineer – October 2002 to July 2006:
- Designed and developed the web and admin interface for their solar-powered weather stations – the clean UI and weather graphs really made Harvest’s product stand out. Wrote software to interface to the GPRS modems and administered associated databases and web servers.
- Wrote embedded firmware in C and assembler for MSP430 and ARM7 micros, including low-level boot loaders, serial and radio comms, digital audio, and I/O control logic.
- Developed various network and serial comms tools in C, C++, and Python. Worked heavily with the Win32 API.
I have a B.E. in electrical and computer engineering, and graduated from the University of Canterbury in 2002 with first class honors, GPA 7.9/9. For my final-year project I designed a small stack-based CPU in VHDL.
My dad taught me how to program by teaching me the Tao of Forth. Two of my first projects were writing a Forth compiler in x86 assembly, and then writing a small 32-bit OS in my Forth. I love things small, fast, and light – and that’s paid off, especially in my embedded work.
Other than that, I enjoy reading and writing, and I edited and designed a small-scale magazine. I’m into unicycling, typography, and piano. I love my wife and family. I aim to keep the commandments, but you may find me breaking the conventions.