Online accounting software
Maintaining Rails microservices
Duration: 2021.01 - 2022.07 (0.5 year)
Technologies: Ruby, Rails, PostgreSQL, JavaScript, React, HTML, CSS
Methodology: Scrum
Overview
As a software engineer at TheMasters software house, I was outsourced to join a British teams working on online accounting software. The team comprised five full-stack developers, one QA, and a team lead. I joined along with two other colleagues as full-stack developer. We worked in Scrum with 2-week sprint cycles, with organization wide demo sessions.
Technical Environment
The project was structured around a more than 10 Rails applications, each dockerized and communicating via HTTP and Amazon Simple Queue Service (SQS). Common functionalities were extracted into gems. Updates often required simultaneous changes across multiple repositories, complicating the maintenance process. (think changing and releasing a new gem version and all the sudden you are upgrading it in an unknown app dealing with the unexpected breaks as the app’s latest version was few versions ago.)
Project Challenges
Understanding the Logic: The distribution of logic across different microservices in separate repositories made the system hard to understand.
Debugging and Data Flow: Debugging was challenging due to the distributed nature of the software. (In which Docker container put the binding.pry, oh.. also need to build the image to it in the first place; not an issue on the long run as you would have all the repos locally anyway, but still.) From retrospect, much more logging would be helpful.
Ongoing Rewrites: The application was undergoing partial rewrites, which introduced naming confusions with new functionalities synonymously named to old ones, leading to ambiguity; very confusing. (make me think - better: rewrite Feature into Feature2; worse: rewrite Feature to Functionality.)
Collaboration and Development
I found effective collaboration by pairing with a developer who had recently transitioned from QA to a Ruby dev. This pairing allowed for efficient problem-solving, leveraging his extensive system knowledge against my coding skills.
We paired over the teams, sharing screen, where I did the coding and he was providing the expertise, like what nominal codes, control accounts, ledger account in accounting are - while I was doing the code modifications.
Frontend and QA
The frontend of the application used React. I contributed by implementing features that required a full-stack approach. The QA process was rigorous with a huge focus on user experience, which I liked (that’s how it should be!)
After some time, I can say that it was a very difficult project.