Home | Roles and Experience | Education and Employment | Interests | Contact

Curriculum Vitae - Andy Balaam MMath MSc DPhil

I am the founder and lead developer of FreeGuide, the open source TV guide (downloaded over 250,000 times) and of Rabbit Escape, a profitable Android App, both developed in my spare time. My commercially-proven skills at IBM and other companies include Java, C/C++, Python, JavaScript, Linux, Unix and Windows development. I have applied this experience to writing several articles on programming topics for the journal Overload, and making programming-related videos, with over 450,000 views on YouTube and 2,500 subscribers. My article "How to write a programming language" was chosen as the readers' joint favourite article of 2018 in Overload's annual vote. My programming blog is popular (about 15,000 views/month), with one article featured on the ISO C++ home page.

I am a prolific open source developer, creating projects using many technologies, from Android, Python, Java, Elm, C/Gtk+ and PHP/MySQL to .deb and RPM packaging. Along with the large number of open source projects I have founded, I have contributed to the Loki template metaprogramming library introduced in the book Modern C++ Design by Andrei Alexandrescu, among several other projects.

I am buzzword-compliant with real-world Cloud, Agile and Scrum experience. The buzzword I am really excited about is test-driven development, or perhaps behaviour-driven design - I practise it in my work and open source projects.

Roles and Experience

Senior Lead Developer

October 2018 - present, OpenMarket

Continuing my close involvement with SMS delivery, but taking on wider responsibility for guiding strategy for the whole SMS group, and working to complete the work of replacing the legacy system with our new highly-available and performant platform.

Lead Developer

June 2016 - October 2018, OpenMarket

Leading development at the team at OpenMarket that owns the global SMS delivery product, which reliably delivers billions of messages per month all over the world to and from very varied customers and suppliers.

I joined when a prototype of a new highly-available system was in production but not performing reliably. Under my influence we established proper system testing and worked out the bugs to the point where the new system is more reliable than its legacy partner (which we also own).

The new system is truly highly-available, and working out the bugs in the complex emergent behaviours of a distributed system is where my attention was applied, combined with the low-level considerations of how kernel, OS and application interact to utilise network and other resources. Often these two worlds collide, so we were investigating how networking and IO details were impacting flow of messages over the globally-distributed network.

This is a true DevOps team, writing code in Java and Python and also managing deployment and real-time support, especially when things go wrong.

Received the top performance rating in 2018 and consistently given positive feedback.

Lead Developer

August 2014 - June 2016, IBM, UK Watson Analytics

As our project expanded and combined with several other IBM products, we were able to find a real manager and I was able to settle into my natural role as a leader-by-example for the UK Watson Analytics team.

Watson Analytics is a cloud-based interactive analytics application implemented in Java and Javascript.

I continue to lead work in key areas including implementing the cloud storage service shared among all components of the product, designing and implementing several REST APIs, and being the lead for core areas such as the key object models.

I am a vocal advocate for improving our testing skills (see e.g. my article in the Overload journal on this topic), preserving the RESTful semantics of our APIs, and keeping core logic simple and expressive.

I use the weekly technical talks I give to research and learn about new technologies, talking on topics such as Elm, REST APIs, node.js, git, Docker and Vim.

I have received the top rating in my last three performance reviews.

Quotes from my managers:

"...a key technical lead..."
"...works closely with architects to provide direction and guidance..."
"...delivered key functionality in very tight timeframes..."

Lead Developer and Team Mentor

August 2013 - August 2014, IBM, Interactive Discovery project

In August 2013 I raised the need of the UK team to receive more detailed feedback, and to have a UK contact with whom they could discuss their own performance and give their own feedback on the project and leadership. I was given the role of Team Mentor to try and fill this gap.

Staying in an almost purely technical role gave me the programming work I love, and made me well-placed to mentor colleagues through project and technical issues.

I led the work on new logging and configuration subsystems as we transitioned our architecture to a cloud-based system, and continued as leader on wide areas of the code, including the main object models, client-server synchronisation, code generation, Java to JavaScript translation, JSON reading/writing and unit testing. I developed JavaScript code that models and controls a partial cache of potentially large tree models, requesting parts needed for the UI on demand.

I gave weekly technical talks for our team and others, and received the top rating in my performance reviews.

Quote from my manager:

"...the kind of person you need to have on a team ... the glue ..."

Lead Developer

2012 - 2013, IBM, Interactive Discovery project

With the move to a new project I managed to get myself back into a purely programming role, as lead developer of the UK team building a cloud app in JavaScript and Java that attempts to simplify analysis and investigation of data.

I led development of significant features including:

I have been an influential advocate for test-driven development and high code quality. The team has gone from no tests, to most developers writing tests first, partly due to my influence.

I give weekly talks on programming topics including Scheme Lisp, TDD, JavaScript's quirks, advanced Ant and many others. I also participated in a side project developing a platform for social games. My role involved designing and building the game technology using node.js and couchdb.

In a geograpically-separated project I have been the key contact point into our team for those in other locations.

"... doesn't bitch about problems behind my back, but raises them and solves them ..." - my manager, 2013

(Reluctant) Manager

2011-2012, IBM, Adaptive Warehouse project

When my manager became unavailable I was asked to take on management of our team. I did my best to throw myself into the role, and enjoyed mentoring and working with people to help them achieve their goals. I did not enjoy the significant administrative burden imposed on those who hold this role at IBM, and I was frustrated not to have time to write code, which is my first love.

I received the top rating for the year I spent in this role, and overwhelmingly positive feedback from a 360-degree survey I commissioned, but never took to the role and worked to get myself back into programming.

Team Leader and ScrumMaster

2009-2011, IBM/Cognos, Adaptive Warehouse project

As I emerged as a leading figure in our team I was given the Team Leader role, and helped organise work as ScrumMaster. The majority of my time was spent programming and designing code.

Adaptive Warehouse is a large C++ application designed to make data warehouse design accessible to non-experts.

I took leadership of several pieces of work:

Through this role I have gained skills in C++ and the Standard Template Library (STL), Python, Object-Oriented design and Design Patterns, as well as debugging on Windows and Unix, XML, C#/.NET, Perforce and SQL databases including MS SQL Server, Oracle and DB2.

I succeeded in changing the culture of our team to adopt test-driven development, and a focus on medium-term and long-term goals through writing better, more maintainable code. Under my leadership we consistently delivered on our commitments, whereas previously we frequently performed below expectations.

"... you don't fancy a move to Bristol do you? ..." - my manager of the time, who has moved to a new role in Bristol, asked me this several times between 2010 and 2013.

Software Engineer, Senior Software Engineer

2005-2009, Cognos, Adaptive Warehouse project

In my time at Cognos I was promoted 5 times in 5 years, through several software engineer job titles.

I worked on many areas of Adaptive Warehouse, and led several features, including:

Founder, FreeGuide TV Guide

2001 - present, spare time project

FreeGuide is my largest open source project: a TV guide implemented in Java/Swing and Perl. It has been downloaded over 250,000 times since the project was started. It is packaged for and widely used on both Linux and Windows platforms.

Founder, Rabbit Escape

2015 - present, spare time project

Rabbit Escape takes up most of my spare time recently: a native Android game that is a bit like classic Lemmings game, but updated for a smooth touch-screen experience. It is featured on the Play store and is in profit.

Imaginer, Pepper Programming Language

2010 - present, spare time project

Pepper is my attempt to make every programmer's life better by taking the concepts of Lisp, the simplicity of Python and the power of C++ and combining them into a single language. It's an early prototype, but it's growing...

Founder and Developer, many other open source projects

A full list of my open source projects may be found on my home page at http://www.artificialworlds.net.

I am a prolific open source contributor and have worked in a wide range of areas. Some examples of projects that I founded and lead include:

As part of my work on NNDB, I have contributed the ForEachType class template to the Loki project.

My open source projects have provided experience with the open source development model including using tools such as git, SVN and CVS. I am very comfortable talking about e.g. branching, merging and freezing code in both centralised and distributed revision control systems. I also founded and maintain several projects written in PHP and using the MySQL database.

Education and Employment

June 2016 - presentOpenMarket - Lead Developer, Senior Lead Developer
April 2005 - June 2016IBM (previously Cognos) - Lead Developer (and other roles)
2000-2005DPhil (PhD) at the University of Sussex in Computer Science and Artificial Intelligence. The research involved writing a large C++ project modelling cognition using "developmental" neural networks. 2 published conference papers in 2001 and 2003
1999 - 2009Sigma (UK) Limited - (part time) Software Engineer
1999 - 2000Distinction in MSc at the University of Sussex in Evolutionary and Adaptive Systems.
1995 - 19982:1 in MMath Master of Mathematics at the University of Nottingham
1998 - 1999Assonance - Own web design business
1996 - 1997MarketingNet Ltd - Software Engineer

Interests

I am a volunteer assisting a debt counsellor for people with severe debt problems in and around Egham with Christians Against Poverty. This involves visiting people with debt problems and helping them take stock of their finances and make a plan to become debt-free.

I run the catering on a Christian youth holiday for 12-15 year-olds, serving three meals a day to about 90 adults and teenagers. I run a weekly church Bible study group and have run numerous similar groups in the past for young people and adults. For several years I was overall leader of the same youth holiday for which I now cater.

I enjoy spending time with my young family and reading books such as Crime and Punishment, Structure and Interpretation of Computer Programs, Slaughterhouse 5 and The Art of Computer Programming.

Contact

I may be contacted on andybalaam at artificialworlds.net.
You can find out more about me at http://www.artificialworlds.net and http://www.artificialworlds.net/blog.
The URL for this page is http://www.artificialworlds.net/wiki/CV.

Home | Roles and Experience | Education and Employment | Interests | Contact

Edit | History | Print | Recent Changes | Search | Admin Page last modified on March 06, 2019, at 03:24 AM