Home | Roles and Experience | Education and Employment | Interests | Contact
As a senior software engineer at Element, I have worked in multiple teams in formal and informal leadership roles. This involves coding in Rust, TypeScript/React and Python, and writing technical specifications for the Matrix standard. I work on features, drive code and formal specification design and mentor developers. I lead by example in writing good code, especially clear and comprehensive tests.
I am a prolific open source developer, skilled in front-end and back-end technologies including Rust, Java, C/C++, Python and JavaScript. I have published multiple programming articles in the journal Overload, and have a popular YouTube channel (700k views) and blog (15k views/month).
I am buzzword-compliant with real-world Cloud and Agile 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.
I live-stream coding Matrix and Rust every week, collaborating with a growing audience of viewers.
November 2023 - present, Element
As a senior engineer in the business-critical, core Encryption team, I work to improve the encryption code within Element products. This roles covers products in many programming languages, with a main focus on the core Rust encryption code which is shared between multiple products. It also involves working across multiple teams, co-ordinating work and educating developers to help increase understanding, to prevent bugs creeping in to this essential area.
September 2022 - November 2023, Element
Leading the development team on the flagship Element Web product. Dealing with significant technical debt in a product used daily by millions of people, my leadership has helped to improve stability by adopting better coding practices, especially around system-level tests that provide guarantees of correct behaviour, giving us freedom to refactor and improve the code.
A critical project has been the "stuck notifications" problem, which involved a series of bugs and misunderstandings causing spurious notifications in the app. I investigated and identified problems at all levels within the ecosystem that were causing these symptoms: at the code level, the client/server interaction level, and in the formal specification. I led the work to wrap this area in comprehensive tests that allowed us to track progress and avoid causing new errors as we fixed old ones. I also proposed and shepherded formal spec changes that were needed to fix all the edge cases. I was able to move this long-standing problem from initially seeming intractable to being possible to make progress, and the application behaviour is now significantly improved.
September 2021 - September 2022, 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 in Typescript and Rust 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.
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.
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:
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:
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.
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:
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.
September 2021 - present | Element - Senior Engineer, 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 used to run the catering on a Christian youth holiday for 12-15 year-olds, serving three meals a day to about 90 adults and teenagers. For several years I was overall leader of the same youth holiday for which I later catered.
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