This blog post is a reflection on my journey joining and onboarding at ComplyAdvantage as a Junior Software Engineer. ComplyAdvantage builds distributed software capable of handling massive volumes of data in real-time, using AI to combat financial crime globally. While this post is far from a how-to manual, I want to share what has worked and what positively impacted my experience onboarding here, as well as some of my biggest challenges.

ℹ️
This is the first of a two-part series. In this blogpost, I’ll be focusing on my first steps at ComplyAdvantage. In the next blogpost, I’ll be focusing on how I’ve integrated AI in my workspace.

The First Week

When you join ComplyAdvantage, you enter a team of 7-8 engineers responsible for a domain within the ecosystem. This is an exciting transition! To ease the process of learning a new domain and codebase ComplyAdvantage assigns you a Buddy that is responsible for guiding and showing you the ropes during your onboarding.

Having a dedicated Buddy means you have someone you can call for help to get unstuck quicker and build momentum. However, this is only the first step. As you settle in, you will begin to understand the unique roles and specialisations of your other colleagues. By branching out to different team members for help and collaboration, you’ll gain exposure to diverse perspectives and the various "ways of working" that make your team successful.

Communication as a Tool

Collaborating with your team is essential for growth and productivity, but it is only as effective as your communication skills allow. Whether you are asking for help, providing a status update, or suggesting a technical change, vague statements make it difficult for your colleagues to provide meaningful input. To ensure every discussion is productive and high-value, keep these points in mind:

  • Share context: Explain the "what" and the "why". Clearly define what you are trying to achieve, the steps you’ve taken so far, and exactly where the current roadblock or decision point lies.
  • Be technical: Use precise terminology regarding the stack or architecture to minimise ambiguity. Refer to specific services, endpoints, or Merge Requests rather than speaking in generalities.
  • Be data-driven: Include links to documentation, specific code blocks, and logs. If possible provide the necessary steps to reproduce a specific output or error so your colleagues can see exactly what you see.

Before sending, give your message a final read-through to catch missing details. Try to anticipate the follow-up questions your colleagues might have; by addressing them upfront, you reduce unnecessary back-and-forth and speed up the resolution.

Knowledge is power. Understanding what each team does and which services they manage at a high level provides the context you need to navigate the wider organisation. It ensures that when a cross-team issue arises, or you have a niche question, you know exactly who to approach to find the answer.

Making your Workspace your Own

Joining as a Junior Engineer means stepping into a complex modern software ecosystem (often for the first time). At ComplyAdvantage, we use a robust set of tools designed to navigate and manage the architecture effectively.

Development Cycle

  • Jira & Confluence: Jira breaks down high-level features into manageable units of work, while Confluence stores our documentation.
  • GitLab: Our primary code repository and CI/CD platform.

The Data & Messaging Layer

  • Yugabyte: Yugabyte is our distributed SQL relational database.
  • Kafka & AKHQ: Kafka handles our real-time data streaming. AKHQ is used as the management UI to view topics, data, and consumer groups.

Infrastructure & Observability

  • Argo: This is our window into the architecture’s deployment state, allowing us to manage and synchronise our services across different environments.
  • Harbor: Our container registry where our service images are stored.
  • Grafana: An observability dashboard that turns architectural data into visual metrics.

As a developer, you’ll work with these tools daily. During your work you might find yourself doing repetitive tasks such as searching for the same Confluence docs multiple times per day, losing track of dozens of browser tabs, or running repetitive sequences of commands.

These minor frictions might seem trivial and out of your control, but they quickly add up. To maximize your efficiency, you shouldn't just adapt to the ecosystem; instead consider customising your toolset to fit your personal needs and minimize friction from your workflow.

Streamline Your Work

The best way to start is by optimising your workspace. This can be as simple as organising your browser so everything is just a click away.

For example, I use Groups & Bookmarks in Google Chrome to store all the links I access frequently. This keeps my workspace tidy and helps me keep the number of open tabs under control, knowing I can safely close them since the link is saved.

Example use of Chrome Groups and Bookmark Folders.

The same mindset applies to your tools. For instance, it's common to need to fix minor issues on a Merge Request (MR) that you're working on without creating a new commit. To update your last commit you might run the following commands in a terminal:

git reset HEAD~1                    // Reset last commit
git add .                           // Add my changes 
git commit --amend --no-edit        // add the commit msg
git push -f origin <Current Branch> // update the remote branch

Doing this manually can be slow and error-prone. Because I found myself running these commands daily, I decided to optimize my work by replaced these four commands with a simple alias in my .zshrc file.

Now, I simply run git-retry and achieve the same result!

🛠️
At the end of this chapter I have a dropdown section with a quick how-to guide on how to setup the aliases mentioned in this blogpost.

Aliases are powerful tools because they allow you to automate multi-step processes into a single, memorable command. This reduces the "mental tax" of remembering the syntax so you can focus on the code.

For instance, I use yqc-staging to automatically log into AWS, setup the environment variables, and connect to yugabyte to the correct Kubernetes cluster.

Resource: How to setup ALIAS

If you use macOS or a modern Linux distribution, your terminal will likely use Zsh. You can do alias name='command' to create simple aliases or directly edit the .zshrc file for more complex functions.

To create the git-retry alias you need to:

  1. Dependencies: Git.
  2. Open Your ZSH file: nano ~/.zshrc to open in nano, or code ~/.zshrc to open in vs code, or zed ~/.zshrc to open in zed.
  3. Add the following to your file:

git-retry() {
# Stage all current changes
git add .
# Amend the last commit without changing the commit message
git commit --amend --no-edit
# Force push to the current branch on origin
git push -f origin HEAD
}

Open a new terminal or do source ~/.zshrc.


Working on communication hygiene when talking to your colleagues, and investing time in improving the efficiency of your workspace to boost your productivity are habits that will benefit your career at any stage. This brings us to the end of this blog post. I hope that by sharing my experiences I could provide a helpful perspective to new joiners starting on a similar journey — specifically the values and discoveries that pushed me forward and helped me grow. In my next post, I’ll go deeper into how to automate your workspace using AI tools.