Bill Hails

Home Address and Telephone Number available on request.


I am a Senior Software Design Engineer at Amazon Development Centre in London, working on Java-based SOA projects in the instant video purchasing team. I came to Amazon along with the rest of LOVEFiLM. At LOVEFiLM I worked on their device API in Perl with Moose.

Prior to that,and for a number of years, I was an architect and Perl developer for Yahoo! Europe, specialising in platform tools for content management, site configuration, internationalization and localisation.

My other main areas of expertise and interest are in network programming and in programming language architecture. I am comfortable with numerous programming languages of various types and am the author of an online book Exploring Programming Language Architecture in Perl for which I have received many favourable comments and reviews from the Perl community.


Senior Development Engineer, Amazon, 2013-Present.

I moved to Amazon Development Centre London along with the rest of the Lovefilm team in early 2013. Shortly afterwards I moved from the API team to the Billing team and switched from Perl to Java. While with the Billing team I have worked on a number of projects revolving around instant video purchasing within Amazon’s highly service-oriented architecture. While with the billing team I have broadened my responsibilities to include ownership of a number of services and roll-outs. I was heavily involved as a purchasing team member in the recent “Project Phoenix” – the launch of Amazon Instant Video in Europe.

Platforms: Linux. Primary Languages: Java, Ruby (a little).

Senior Perl Developer, LOVEFiLM, 2011-2013

I joined the API team at LOVEFiLM in 2011, working on their API. Much of my work there involved evangelising the benefits of controlled refactoring, and the necessity for solid unit tests. One of my primary projects was to parallelize the API client libraries, allowing them to make multiple requests asynchronously. This drew on my experience with continuation passing strategies used in PScheme (see above.)

Platforms: Linux. Primary Languages: Perl (Moose).

Architect, Yahoo! Europe, 1998-2011

My last work at Yahoo! involved developing tools and techniques for retrofitting unit tests to a large, unruly and untested code base, in order to then refactor that code into a more manageable shape. Another  significant project at Yahoo! was a code generation system which generates an entire application: php library API, web services and database schema, all from a simple XML specification and some Perl drivers. This was used to generate a TV listings API based on the BBC programming ontology. Before that I was one of the two lead developers of an open source tool written in PHP called r3 ( which unifies and crystallizes the core techniques for i18n that we have been developing at Yahoo! Europe over the past ten years. Before that I was lead developer of the content, template management and i18n/l10n system which powers most of Yahoo! Europe in seven languages concurrently and runs Yahoo! news and media sites worldwide. During that project I also single-handedly designed and implemented a replacement for TibCo’s “Rendezvous” system: a message-passing publish/subscribe networking transport layer which is still in use throughout Yahoo! Europe and underlies the event driven news publication system there and elsewhere within Yahoo.

Platforms: FreeBSD, Linux. Primary Languages: Perl, C, Shell Script, SQL, PHP.

Developer, CPL, Ascott — 1997-1998

Contracted to BT, I was involved in developing and maintaining network management software for X25 networks, I also developed tools for transforming C programs into hyperlinked and cross-referenced html pages for documentation purposes.

Platforms: SunOS, Primary Languages: C, Shell Script, Perl.

Developer, Tardis Direct Ltd., Guildford — 1990-1997

In this post I designed and implemented an in-house programming language for automated telemarketing. This language was used by other developers to write telephone-answering applications. It had many interesting features including voice and DTMF recognition and concurrent regular expressions over DTMF strings. It also abstracted the “soft” errors of recognition failure into declared handler blocks outside of the main control flow allowing the developer to get on with writing the application. The language also and had a built-in SQL query capability. Since the language had a large database behind it for information capture, I also had the role of DBA for a large Informix database. More recent developments involved extensive use of databases and m4 for rapid application configuration. While in this job I authored the open-source interface between Perl 4 and Informix SQL called “isqlperl”. This predates DBI and was actually done in consultation with Tim Bunce who was working on the design of DBI at the time.

Platforms: SunOS, SCO-Unix, Primary Languages: C, C++, Perl, m4, SQL, PostScript, some Java.

Engineer, NEI Newcastle upon Tyne — 1987-1990

Worked on design and development of software to control nuclear power stations.

Platforms: VAX, PDP. Primary Languages: Mostly C, some COBOL.

Engineer, Flaxkarn Electronics Ltd. — 1985-1987

Developed Graphics software for arcade “trivia quiz” games.

Platform/Language: 68000 Assembler, and some Pascal on bespoke hardware.

Junior MLSO, St. George’s Hospital Medical School, London — 1982-1985

Routine laboratory work, plus a part-time project gene-mapping antibiotic resistance in Streptococcus pneumoniae.


University of Warwick — Bsc. (hons) Microbiology and Virology, 1979-1982


I am familiar and comfortable with numerous programming languages of various types, including but not limited to OO (Perl, C++, SmallTalk, PHP, Ruby, Java, JavaScript, Objective C, XLisp) Functional (Scheme), Procedural (C, Pascal, TCL) Logic (Prolog) and assorted others (Forth, PostScript, SQL etc.) I have good OO design skills and am very well-versed in design patterns. I also have a solid background in network programming on top of the TCP/IP API (though perhaps a bit rusty at present) and good understanding and experience of relational database systems both from a dba perspective and a design one. I am proud to be a completely self-taught programmer, my first computer was a Sinclair Spectrum back in 1983. From that I taught myself BASIC, then Z80 Assembler, then taught myself Lisp by implementing a lisp interpreter in Z80 on that machine.

Other Interests

Outside of work, I am a classically trained pianist and enjoy playing and writing music; I also enjoy photography and computer graphics using the open source ray tracing system POV-Ray. Lastly I’m a keen amateur archer.

Random Blogs