Roberto Veral del Pozo
Packlink Tech
Published in
5 min readDec 20, 2023

--

2023 is coming to an end. This is usually a time of reflection, looking back to see how the year has been, and being mindful of what we have achieved. And your favorite subscription services are jumping on that trend, sending you a bunch of recaps telling you how many hours you’ve spent with that guilty pleasure musician, how many cupcake recipes you’ve saved for later but never actually made, or how many hours you’ve played God of War.

Well, if they can, so can we! In that spirit, we have prepared the Packlink Wrapped! It’s a look back on what the engineering team has achieved over the year. In Auctane, we continuously gather data from the tools we use for the development lifecycle, like GitHub, Codacy, or New Relic, and that’s what we use for the recap.

This year has been important for the team to settle down as a part of Auctane, and we’ve worked hard and achieved some impressive numbers. Fasten your seatbelts, hold tight, and follow us on a journey through our 2023.

Pull Requests

Pull Request stats

You put code into a bottle, it becomes the bottle. You put it in a teapot, it becomes the teapot. Code can flow, or it can crash. Be code, my friend.

As an engineering team, our work is focused on the code. Through code, we introduce b̶u̶g̶s̶ features. We collaborate in hundreds of repositories through Pull Requests to introduce new features to our product and make the code flow.

In 2023, we have merged 3,500 PRs. If we focus on changes on the main branch of the different repositories, the accumulated diff of all Pull Requests is almost 2 million additions to the code base.

It’s interesting to look at the anatomy of an average PR. A mean of 850 additions, 276 deletions, and 11 files changed means we can work with relatively small increments, easy to review and merge in less than 2 days.

There are some outliers, though. Doing this exercise, we found the monster of the year (PRMotY®): that PR which, when you see it, you wanna give up and take a holiday just to run away from it. A refactor that involved 51,978 additions and 963 changed files. Not bad 😅.

Releases

Releases stats

Once we’ve merged our changes, the next step in the development cycle is to prepare the code to flow into production.

And code flows in the form of more than 1,500 releases!! 🥳

However, a release is just a package. And a package only has a purpose when it’s sent to its destination (I know of an awesome platform called Packlink to send packages, maybe you should check it out, just saying… #ad).

Deployments

Deployments stats

You put the code in production, it becomes production.

Over the past year, we’ve done more than a thousand deployments in the production environment. More than 4 deployments per working day. Our infrastructure built on top of Kubernetes and ArgoCD gives the team autonomy to deploy without the intervention of the Cloud team, enabling this achievement.

And not just that, in the past couple of years we’ve invested a lot in the automation of the CI/CD pipelines. During this year, almost 60% of releases and 67% of deployments have been performed automatically. Once an engineer merges a PR into the main branch of the repository, the CI pipeline performs the release and prepares the deployment, so we just need two clicks to go from a feature branch to production! 🔥

We have brought out our inner sloth 🦥 but in a “let’s move as little as possible to get ship done” sort of way…

Automation stats

Time for a fun fact: when do we deploy? We’ve performed deployments all through the day, some were made by early birds wanting to roll out a change before the traffic in the platform increases, and some late at night due to incidents triggering the on-call procedure.

Deployment times

Code Quality

Code Quality stats

Yep, our code flows fast, but that doesn’t mean we ignore quality. We have a talented group of engineers that care about testing, and best practices. We trust our team.

And we can see the effort in the results of the static code analysis scans. More than 28 thousand analyses run, with an average grade of almost 90/100 and more than 84% average coverage. We don’t have coverage goals and still, the number is pretty good. Taking into account that we also deal with some legacy components, it’s impressive.

However, sometimes you have to break some eggs to make an omelet. Sometimes things go wrong, or a failure is introduced along with a deployment. During the year we’ve solved 28 incidents (with different degrees of severity) and we’ve reverted 40 features that weren’t working properly. 40 out of 3,500. There is nothing to be ashamed of in taking a step back to learn and move forward. We ship it, we observe it, we roll it back if it doesn’t work properly, with limited impact.

Incidents stats

Closing thoughts

This is our year in numbers. All this effort translates into what we deliver to our customers. During the peak month of the year, we’ve handled:

  • 225M API requests.
  • 1.66B messages.
  • 14M imported orders from e-commerce.
  • 139M tracking events processed.

We are very proud of what we’ve achieved, and our awesome group of people does not stop at coding. There are other numbers we care about.

Like the number of hats with moving ears to cheer up the stand-up meetings. And the guessed songs, the drawings, the word puzzles… And the good morning gifs, the chats about videogames, the weekly music pills, the bad jokes…

That’s a wrap for 2023. Let’s rock 2024.

--

--