As we bid farewell to 2023, it's time to reflect on the remarkable achievements and innovations that unfolded within our backend team. The past year has been nothing short of extraordinary, marked by a tapestry of collaborative efforts, ingenious problem-solving, and a relentless pursuit of excellence. Without further ado, let’s get into it.
At the beginning of the year, we kicked off team goals (I’ve written about it here), focusing on both technology expertise and community in and outside of Ackee.
I can proudly say we have managed to complete 6 out of 9 goals on 100%. We have managed to take over planned parts of the DevOps agenda, completed an internal Rust course, stopped using Jest on ongoing projects, supported programming katas in the company throughout the year, and filled in blogging and speaking quotas.
However, we fell short of achieving the top-notch state we initially aimed for in our open-source projects, and not every team member attended a larger conference. We have abandoned the FP-TS goal. We underestimated the research phase when defining the goal, because when we started, it was soon clear that there is no need to take this path.
School of Crab (Rust)
Our pursuit of second language proficiency, as well as part of one of our team goals, we have started a School in January that lasted until September. There is an entire blog dedicated to it here. (Spoiler: we are not going to use Rust for writing web apps any time soon)
Technology stack milestones
2023 brought a few notable changes to our tech stack for a backend development team in Ackee.
Terraform. Starting in 2023, the backend team started taking responsibility for infrastructure changes on projects by both observing the entire system, as well as contributing to Terraform repositories defining it. This is new for us, because until now there was a special DevOps team managing the infrastructure.
Kysely. In the past year, a new arising database npm library caught our attention. It is inspired by knex, which has been in our stack since day 1 we’ve started with Node.js. Kysely brings ultimate type-safety to the query builder and our experience has been great so far.
Mocha. Once again, we are changing a testing framework and after a several years long journey with Jest, we are back to mocha for testing backend Node.js apps. In our experience, tests are now a lot faster, not memory demanding and more predictable. Our eye now rests on node:test, a native Node.js test runner, that might turn out to be the ideal choice. Stay tuned.
Honorable mention goes to native fetch to replace third-party libs like got and axios. But it didn’t make the cut. We have decided it is good to have it, but miss a bunch of features that are not worth the tradeoff to let go (better interface, granularly timeouts setting, request progress and more).
First meetup. First time in the history of Ackee we, the backend and DevOps team, had been the main speakers on Ackee Meets backend meetup, which had started the whole year of Ackee meets. Kudos to all the speakers, we are looking forward to another one!
Regular monthly team events. Almost every month there was a small team event - grab a beer, laser game, tour d’ pub, hookah place …and now when I think about it, we’ve never been to the same place twice!
F to pay respects to DevOps team
In the beginning of time, for as long as I can remember, there were admins taking care of managing the servers. A few years later, a new team emerged to manage infrastructure. Behold the DevOps team. In 2023, the DevOps team was disbanded, with some of their responsibilities falling into our hands. They continue to provide external assistance for the remaining tasks.
Over the past years, fueled by a proactive attitude, a desire to transparently share code among projects, and with some encouragement from the company to engage with the community, we have published a bunch of packages for Node.js. 24 packages in total to be exact. In 2023, we have decided to prune our open-source packages. For various reasons.
Some were just badly designed to be just a “convenient” wrapper around other packages and a few utils. These wrappers obsoleted quickly and we needed to update the dependencies regularly. Eventually, we have decided we no longer need such packages.
Other times some packages become unused. Needs for projects in a digital agency vary and something that was in demand several years ago is no longer needed. The only thing that remains is the package maintenance. Away with those. The third and final group of pruned packages is the natural one, when the package was adding some feature that back then was not supported by some other package, but is now, making our open-source addition obsolete.
Out of 24 open-source packages we have deprecated 12.
No down migrations
The standard way of managing a database schema is through database migrations. Commonly a database migration is a file describing how to apply a database change (migrate up) and how to roll it back (migrate down). We’ve been honestly writing migrations with both up and down behavior. This year we have decided to drop support for down migrations.
It wasn’t an easy decision, but for us, the pros exceeded the cons. The two main reasons were that they are mostly unused and sometimes even impossible to do. Rarely used. Rolling back a database change is rarely fixed by migrating down, rather with a careful manual intervention to the database to mitigate potential issues. Sometimes impossible. Writing a successful down migration might be impossible due to new constraints, like a unique index, when one can’t simply undo the change because the data no longer fit.
What better summary for such a blog than a list of bullet points!
- finished our goals with 77%+
- haven’t picked up Rust for web apps
- got our hands dirty with Terraform
- stopped using jest, started using mocha instead
- deprecated 50% of our open-source packages
- Closing the book on 2023 with excitement for the unwritten pages of 2024! 🤩