System architect with extensive experience in scaling commercial websites both with traditional datacenter and optimizations and with cloud based solutions. Expert Perl programmer with over fourteen years speaking experience at numerous conferences. Versatile team member used to functioning in an Agile Scrum environment.

UK Citizen with US Green Card (family based [IR], not tied to employment.)

My full contact details are on my website.

Education

  • 2:1 BSc Computer Science, 2000, University of Bath, Bath, Somerset, UK
  • 4 ‘A’ Levels (Maths, Physics, Chemistry, Further Maths, 1996), 10 GCSEs (including French, 1994) Hardenhuish school, Chippenham, Wilts, UK

Previous Employment

Senior Programmer, MaxMind, Telecommute, US (2015–Present)

  • Development of large scale applications in Modern Perl, making heavy use of Moose, role based architecture, type checking, and modern Perl syntax.
  • Advanced Perl optimization techniques both for speed and improved code readability. Creating new Perl syntax with pluggable keywords and custom OP codes written in XS.
  • Key member of agile scrum team using a modern development workflow (GitHub Pull Request based, with "branch for feature" accompanied by automatic continuous integration testing and mandatory code review before merging.)
  • Extensive work on improving the development environment across the team. Developing tools to ensure code quality, including numerous git-hooks, writing custom Perl::Critic rules, and development on the Code::TidyAll engine itself. Work on an open source tool for introspection of Perl classes and production of UML diagrams clearly showing class inheritance and role consumption.
  • Building websites and APIs with the Mojolicious framework, including contributing to Mojolicious core and open sourcing several Mojolicious plugins. Plack/PSGI middleware development.
  • Maintaining a range of customer facing client libraries in languages including Python, PHP, Java and Perl. Creating tools and utilities written in golang.
  • Building bespoke customer databases in the MaxMind Database format. Improvements to the underlying multi-step dependency resolution build tool Stepford.

System Architect, OmniTI/Circonus, Telecommute, US (2012–2015)

Working on Circonus, a real time monitoring, alerting and trending system.

  • Ground up REST API architecture and development creating Circonus' current application API. Writing all user facing documentation (including examples in various programming languages.) Internal API "facade" layer and type system able to express constraints and perform validation (and give suitable error messages.) Type and field annotation allowing automatic formatted structured field documentation generation.
  • Advanced PostgreSQL development, including triggers and PL/pgSQL, custom aggregation functions, NOTIFY and LISTEN based job control, connection to RabbitMQ via pg_amqp
  • Custom web framework development with Plack/PSGI and mod_perl. Dealing with internationalization issues, XSS, CRSF.
  • Building from scatch complete Perl test suite for existing application. Construction of robust (Test::Builder) compatible frameworks sitting on top of Plack capable of webserver testing with rapid fixture creation. Integration into Jenkins and CI system.
  • Search development, incuding ElasticSearch and PostgreSQL full text search.
  • Logging framework development allowing categorization, log levels, and cross indexing between log files. LogStash integration through AnyEvent based streaming daemon.
  • Systems Adminstraton work including Illumios (Solaris) packaging and service management, Chef deployment.
  • Node.js development, both webserver and command line tools.

Head of Architecture, Photobox, London, UK (2007–2012)

System architecture for Photobox’s photo printing websites. Responsible for scaling a large-user base, seasonal, rapidly expanding international e-commerce site.

  • Working with Agile Scrum Teams. Serving at different times as both as product owner and as a developer. Responsible for working with business owners to refine and prioritize work prior to entering scrum teams’ backlog.
  • Cloud Computing and AWS (EC2, RDS, etc) based on demand scaling, including managing the process for migrating active members on demand out of our datacenter into the cloud during our peak services and then re-integrating them once demand had reduced. Cloud image storage.
  • Continuous Integration with Hudson/Jenkins and Puppet. Packaging. Testing with both with Perl unit tests and Selenium.
  • Scaling technologies. Caching and invalidation (e.g. Memcached, CDN.) Redundancy (LVS, ldirectord, reverse proxies, nginx.) Asynchronous programming (Coro, AnyEvent,) Job processing and batch control (hand rolled, TheSchwartz)
  • Performance techniques. Perl profiling (NYTProf et al), optimization (XS conversion, currying, custom OP codes)
  • MySQL (scaling, slow query optimization, complex replication trees) NewSQL database (Clustrix.) ORM (bespoke and DBIx::Class)
  • API Development. XML, XML-RPC, JSON, AMF, etc. Permissions models. Type checking and coercion. Exception handling. Logging and rate limiting.
  • Image Handling. Petabyte scale storage, serving, on-the-fly transformation, end user uploading multiple images (including rescaling in the client)
  • Internationalization. In depth understanding of character encoding, Unicode, UTF–8. Currency conversion. Creating localizable and “white label” site using custom HTML::Mason subclasses.
  • Financial Transactions. Online Payment Processors such as Paypal, Cybersource, Bibit, SocGen, Adyen. Financial reconciliation. Currency conversion. C2C transactions. Offer handling
  • JavaScript. Created “pluggable” architecture to allow RAD by assembling pre-defined JavaScript components capable of bypassing frontend servers and talking directly to backend API. Use of jQuery, jQuery UI and Underscore.js libraries.
  • Team Management. When necessary I undertook team lead and HR responsibilities.
  • iPhone Development both managing external agencies and directly modifying the source code myself.

Head of Technology, Fotango, London, UK (2003–2007)

Building large scale photo sharing and other sites for Canon while launching groundbreaking server-side JavaScript PaaS product. I started as a developer, shortly after ran my own ‘backend’ development team, then became the head for the technology department reporting directly to the COO with multiple team leads reporting to me.

  • Management Experience. Oversaw department of twenty plus staff members, made up of three teams practicing Extreme Programming workflow. Provided technical direction to company. Managed department budgets, salaries, etc. Earlier in my employment I also directly ran one of the larger development teams and gained significant hands on experience of coordinating development across the codebase.
  • Worked on a Serverside JavaScript Engine development. Perl XML API, wrapped Spidermonkey, JavaScript support libraries. Billing model. User data storage.
  • Helped develop and architect the Template Toolkit, one of the most popular Perl templating language currently used.
  • Maintained Canon Image Gateway, Canon’s european photo sharing website, involving significant scaling, file storage, redundancy and internationalization challenges.
  • Image Handling. MogileFS backed (redundant commodity hardware) user upload and serving solution with on-the-fly transformation, image scaling, watermarking, etc.

Head of Research and Development, Profero, London, UK (1998–2003)

Developing new technologies for a full service New Media company during the dot com years. Started as employee number nine, left five years later when the company had five international offices and I was running my own team.

  • Developed Custom AdServer technology (mod_perl & pure C extension to Apache, CMS, offline data crunching and reporting interface, Excel spreadsheet generation) pioneering techniques such cost-per-click, post-click registration conversion tracking, and impression conversion tracking.
  • Strong ability to deliver. Client meetings to discuss requirements, analysis, technical task breakdown and ability to deliver solutions for the client appropriate to the resources the team had available. Reputation for being able to deliver major work on tight deadlines.
  • Scaling high volume websites of prime-time television programs for leading UK broadcasters capable of handing traffic caused by over the air call to action prior to mid-show commercials. Threaded and kernel based webservers.
  • Extensive use of browser side Java. Created real time RSS-driven news feeds displayed in banners for major international news broadcaster. Pioneered the ‘game-in-a-banner’ concept (kick the ball, play golf, etc, etc.) Creating executables and assets less than 14K.
  • Developed custom CMS for leading consumer rights magazine able to “bake” hundreds of variations of their website to allow high performance while tracking the effectiveness of their various direct marketing campaigns.

Other Previous Employment

  • IT Support and Sysadmin for traders in the City of London (1998)
  • Working for Energis creating database of telecommunication switch circuits (1996)
  • Numerous work experience during education (Semiconductor design and production, custom PCs manufacturing, spreadsheet programming)

Important Other Information

  • Regular conference speaker at Perl and other Open Source conferences.
Favored topics include Teaching Perl, Test driven development in Perl (testing with Test::More, building your own Test::Builder based libraries), Unicode handing, tours of the best modules in CPAN (a result of my starting the Perl Advent Calendar), JavaScript, Mac OS X with Perl (using CamelBones the Objective-C Perl bridge, automating your Mac with Perl).
  • Author of over twenty distributions on the CPAN, including several core modules distributed with perl itself. Particular focus on testing modules, XML processing, templating extensions, unicode, and language enhancements.
  • Ex-Leader of London Perl Mongers (London Perl user group.) and joint organizer of the first London Perl Workshop. Active member of Albany.pm.
  • Familiar with many programing languages: Expert: Perl, JavaScript (including Node.js). Used Professionally: Java, Objective-C (iOS, Mac), Python (Django, Jython), PHP, C, Laszlo Studied: Miranda, OO Turing, Prolog.
  • Sysadmin experience. Linux (Ubuntu, Debian, Fedora, etc), Solaris (Illumios, OmniOS), OS X, FreeBSD

References available on request.

Copyright Mark Fowler, permission to distribute unaltered granted.