I love music. Not just to listen to, but also to create it. I’m currently learning the piano and enjoying adding some groove to my melodies. It's always interesting when I play my latest GarageBand productions for my wife. She gets to be the judge for the “Job’s Got Talent” show. The most hilarious comment I got when I first tried to program drums was, “it sounds like you knocked the drums, and they fell over.”
I didn’t grow up with computers and I wasn't the child that tinkered with electronics. I liked science subjects in school and wanted to do engineering or computing at university. I ended up studying computer science. When it was time to apply for internships, most organizations in Kampala, Uganda, only had hardware or networking tasks. However, since their networks were already up and running, there was very little an intern could learn.
I went back to university and did a supervised software development project for my internship instead. With a PHP book, DreamWeaver, WampServer, and MySQL on a Compaq machine that sounded like a kettle, I discovered a whole new world of code where I could build things. It was interesting and captivating. On most days, I couldn’t get myself to leave the keyboard.
I joined Thoughtworks 6 years ago as a senior developer. Over that time, I have worked on a wide range of projects solving problems in different industries such as health, banking, energy and real estate. Before joining Thoughtworks, I had been in the industry for about 5 years and built a number of applications. I brought some of that experience with me but I had a lot to learn and unlearn. My first project at Thoughtworks began with an “inception”. I was blown away by the effort Thoughtworkers put in to understand the client’s problem. Working alongside many talented and experienced people helped me get grounded in the fundamentals of good software engineering. Since then, I’ve led client engagements and have been a technical lead on some projects.
Aside from direct client work, I have also worked on internal projects. About two years ago, the recruitment team wanted to refresh the interview processes. The objective was to reduce the time to hire while maintaining the quality and integrity of the process. I worked with the team to shape new interview formats that would be interesting for both candidates and interviewers. It was interesting to see things from a different perspective - a recruiter’s perspective. The feedback we received from everyone involved (especially the candidates) was very fulfilling. I enjoyed it so much that at some point, I even thought about changing roles!
I am currently working at a financial services company. We are building a digital platform to deliver relevant and helpful messages based on a client’s data. We have come up with a good microservices architecture that divides responsibilities between services along domain boundaries. We are confident it will be easy to evolve the architecture as we understand user behavior, and grow the solution.
Working at Thoughtworks helped me to grasp the fundamentals of good software delivery. I realised this quite early on during my time here. Before joining Thoughtworks, I had built a system for a client and most of it was CRUD operations. However, it included a payment calculation module. After releasing it, the client called me on a monthly basis for help because the calculations would fail. After learning the different ways I could test code at Thoughtworks, I rewrote that module with more enduring principles. As a result, over a year went by without the client calling me for help. This is the kind of quality I have learnt to build at Thoughtworks.
I have also had opportunities to apply these best practices to a wide range of problems, situations and technologies. The nature of the assignments requires me to think outside the box to deliver the kind of quality the client deserves. One such moment was when we had a new team, a programming language none of us was too familiar with, and a problem space that was error-prone. Pairing and testing were not enough to ensure quality. We came up with a new practice called “Teck-Check” which is an on the spot and lightweight way to do code review. As we practiced and refined it, the entire team was more comfortable and happy with the quality we were delivering.
I am proud of two things in my career: finding solutions for client’s problems and sharing technical knowledge with others. Bringing another person on a journey to learn how to do something better and watching them evolve is incredibly satisfying. I have seen many such beautiful moments in my career. By creating a safe learning environment in the team, others are encouraged to share what they know and learn.
The most satisfying by far was building an app for health workers for the Ebola treatment centres in Sierra Leone, West Africa, in 2015 during the most complex outbreak since the virus was discovered in 1976. The outbreak highlighted critical knowledge gaps about the disease, some of which could be addressed by analyzing high-quality electronic patient records.
Our objective was to reduce the time health workers spent in the wards and increase the accuracy of their records by developing a highly efficient and user-friendly Ebola Electronic Medical Record (EMR). Better records would give the health workers confidence about the decisions they were taking in treating the patients. The constraints on resources and time posed interesting challenges. By designing an EMR for such a restrictive environment, we developed designs that are adaptable for future crises.
I aim to deliver value in every project and I am proud of most of my work, however, I am especially proud of that project because of the positive social impact it has.
Technology has become increasingly central to human conversation and interaction. Technologists, therefore, have more power to amplify or reduce particular voices or kinds of interaction. Any business’ priority is to make a profit. However, doing that in a socially responsible manner is paramount. It takes having a critical mass of people who think in a particular way, in the right places, to cause a shift. Having more “technologist” hands on deck would make the world a better place. I am certainly committed to being a voice for positive change in my personal life and in professional situations.
Microservices! It has been around for some time now and is starting to mature. We have made mistakes, learnt from them and refined our approaches. The thought that “all the functionality doesn’t have to live in one giant codebase” allows us to build software that is easy to maintain and evolve.
“Your problem is not ability, it is perception and opportunity.” Most of my mentors have given me advice along these lines but one of them said it so precisely that I can easily quote it. Being able to put my hand up for things I know will allow me to learn, grow and sometimes help me discover abilities I didn’t know I had.
I want to build modern applications on the cloud. I like being involved in the entire journey of an application. From shaping the idea, building the solution, putting it in front of users and changing it based on user feedback, technical pain points and business needs. However, as a consultant, it is not always possible to be present through the entire journey. So I am learning to see things from a higher level at any point in the application’s lifecycle. To anticipate how the application may evolve and make architecture choices that allow for more options for change.
At a team level, I want to facilitate creating a good tech culture that produces stable software that will not need us to babysit it its entire life. My motivation is to achieve the desired business goals, but also, so we (the team) can enjoy our life away from the keyboard, have fun with family - and for me - touch a different keyboard and make nice music!!!
Disclaimer: The statements and opinions expressed in this article are those of the author(s) and do not necessarily reflect the positions of Thoughtworks.