I am a tech lead at Element, responsible for technical leadership in a cross-disciplinary team developing features for our cross-platform chat clients and server. This involves coding in Rust, TypeScript/React and Python, and writing technical specifications for the Matrix standard. I assist and advise on the design and feasibility of features, mentor developers, and work on them myself. I lead by example in writing good code, especially clear and comprehensive tests.
I am buzzword-compliant with real-world Cloud, Agile and Scrum experience. The buzzword I am really excited about is test-driven development - I practise and champion it in my work and open source projects to drive clean, high quality code.
September 2021 - present, Element
As a Tech Lead for the Professional Services team, I facilitate communication between PS management, Solutions Architects, Product and Design and the developers on our team. The team implements features in Element's main messaging products, Element Web, Element Android, Element iOS and Synapse Homeserver. I work hands-on implementing these features and also guide and mentor my colleagues.
A key part of my role is ensuring that features are adopted in the wider Matrix ecosystem. I do this via discussion and feedback with stakeholders, and importantly by writing and revising MSC (Matrix Spec Change) documents, and guiding these changes through the standardisation process. This requires clear and concise technical writing, flexibility and empathy with others who depend on the standard for a diverse array of needs.
I live-stream coding Matrix and Rust every week, collaborating with a growing audience of viewers.
Recent projects on which I have led development are WYSIWYG composer, Polls, Static Location Sharing and Live Location Sharing.
At my first 6-month review I received 100% positive feedback from my colleagues.
Comments from my 360 review after 1 year:
October 2018 - September 2021, OpenMarket and Infobip
Closely involved with OpenMarket's SMS delivery teams, and 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.
Key member of the company Architecture Advisory Board, sharing knowledge and advising decision-makers on architectural issues such as scaling, inter-module interfaces, and cloud migration.
Worked on designing and implementing our product in the cloud, including analysis of what is possible and sensible, why we are doing it, and what outcomes we will achieve. Contributing technical expertise actually developing the solutions, with whole-company strategic thinking and advice to the company's engineering leaders.
Diversity Team Lead, working to improve recruitment and retention of people from all backgrounds, and to improve the industry as a whole. Advising company leadership, organising training and consultancy for company transformation, and running programming workshops in local schools.
Tech Blog leader: organising the OpenMarket Tech Blog (https://www.openmarket.com/techblog/), recruiting writers, writing, reviewing and approving articles for publication every month.
Lunch and Learn organiser: running our regular internal technical talks, giving many of the presentations myself, on topics such as "Writing Snake in Terraform", and "Reasons to avoid Dependency Injection Framworks".
Developer podcast creator: interviewing developers throughout the company for an internal company podcast - conversations are about the individuals' history and interests, and how we should transform the company in the future.
Researching Edge Computing, writing an open source SMSC application in async Rust (https://gitlab.com/andybalaam/rust-smpp).
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.
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.
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:
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 gave weekly technical talks for our team and others, and received the top rating in my performance reviews.
Quote from my manager:
2012 - 2013, IBM, Interactive Discovery project
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.
In a geograpically-separated project I have been the key contact point into our team for those in other locations.
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.
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.
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:
2020 - present, work and spare time project
rust-smpp is a messaging technology in async Rust. It implements the SMPP protocol for SMS messaging.
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.
2015 - present, spare time project
Rabbit Escape is an Android and Desktop game that is a bit like the classic Lemmings game, but updated for a smooth touch-screen experience. It is featured on the Play store and is in profit.
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...
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:
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.
|September 2021 - present||Element - Tech Lead|
|June 2016 - September 2021||OpenMarket - Lead Developer, Senior Lead Developer, Architect|
|April 2005 - June 2016||IBM (previously Cognos) - Lead Developer (and other roles)|
|2000-2005||DPhil (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 - 2009||Sigma (UK) Limited - (part time) Software Engineer|
|1999 - 2000||Distinction in MSc at the University of Sussex in Evolutionary and Adaptive Systems.|
|1995 - 1998||2:1 in MMath Master of Mathematics at the University of Nottingham|
|1998 - 1999||Assonance - Own web design business|
|1996 - 1997||MarketingNet Ltd - Software Engineer|
I present two podcasts: The Good Robot Andys, a spoilerific film and technology podcast, and Justice Worriers, an angst-ridden exploration of how Christian ideas can contribute to global and social justice.
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 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.