Building & scaling Engineering team
The first article of the series of 5 blog posts describes the journey to build an Engineering setup in Financial Services. Read the preface to get a clear context of the journey.
How we started
DKatalis is an engineering setup and hence, we had our tech stack on the bleeding edge for Financial services - Dart (Flutter) for FE, server-side JS (NodeJS) for BE, Kafka (service communication and data streams), APIGW (Tyk), MongoDB, Redis, CloudFlare, ELK, Dynatrace & Solarwinds, Terraform (IAC) & full cloud setup to just name a few.
Starting to build a team without a brand name is challenging, it starts with your network and expands to layers beyond. Add to it, the bleeding edge of technology (especially Flutter, we couldn’t find experienced engineers in the region, more on this later), making it even hard to build the team.
As explained in the preface, guiding principles are important. Hence, the first step for us was to have guiding principles which will be used to build the team. With help from Maya Kartika (our Head of People) & Ivan Vincentius (Head of Jakarta Hub), we came up with the following principles:
Guiding principles:
With the above guiding principles, it was clear, we need to hire engineers outside of Indonesia (although our core business team was in Jakarta). We started the process to establish entities across 3 locations: Singapore, Jakarta & Pune. Not going into details of an entity setup, assembling a diverse & geographically distributed team is tough. The first step was to hire a few good tech recruiters and build a network with head hunters. We started with initial 7-8 core members who started to: build the foundation and also invest time in hiring.
You need to do early investment to build your brand equity - this becomes even more important if your brand is not an established one. Initially, the slow response was slow but with efforts from our recruiters, engineering staff, and our Tech Hub Heads - Ivan Vincentius & Puneet Jain, we got good results. We grew from 10-12 members in Oct-Nov'19 to 200+ in Dec'20 across the 3 locations – Singapore, Jakarta & Pune (as of the date we have 300+ across the locations).
The hiring process
The hiring process should reflect what kinda team you want to build. Going back to our guiding principle, we wanted to have everyone hands-on, this meant,
no matter years of experience, every candidate would have to go through a test exercise
Hence, we configured the hiring process to make sure it reflects the type of team we want to build.
The same process was configured for all the roles: Product Engineers (Developers and Automation Engineers), Platform Engineers, System Engineers (Infrastructure), POs, Security Engineers, Performance specialists, Data Engineers, Data Science & Data Analysts. This not only helped to keep a consistent hiring process across the organisation but also in propelling a culture to be driven by responsibilities.
Principles for hiring
When you are starting, interviews are the first impression to candidates (and their network of people) about the organisation. Make sure your recruitment team and panelists are Brand Ambassador of the company, make Candidate Experience, the first thing to focus on.
We did this by reviewing and documenting, each stage of the interview - from recruiters and panelists perspectives:
As you grow, the hiring panel starts to broaden and hence, the subjectivity during interviews. Even though we documented each stage of the interview process, still we started to see subjectivity (or I must say the drop in quality) in hiring - remember we were dealing with hiring at 3 locations. With retrospectives, we found one of the most challenging stage was code review. Hence, we standardised the code review process. Jeevan D C, Ivan Vincentius and I put clear dimensions for feedback:
Keeping track of the progress
As you continue to build your team, it is imperative to have a regular review cadence of the progress. The intent is to identify blockers for each stage of the interview and identify opportunities to optimize the process. The first step was to capture data - fall out of profiles from each stage.
Waste repellent learning culture - reduce waste, remove unnecessary process
The picture above helped us find opportunities to improve and fine-tune the hiring process so that we could celebrate successes. Additionally, we defined metrics to keep close track of the hiring funnel
Time to offer < 3 weeks
This metric tracked the time it takes from the first touch-point with the candidate to when the offer letter is sent - measuring the time spent during each stage of the interview. We challenged ourselves to complete the process in not more than 3 weeks. Today, this metric measures 22 days across the location.
Organizing teams
When you’re small, everyone does everything, it was the case with us as well. But, as you grow from 20-100, organizing an agile team is a fundamental problem everyone starts to face. I have been part of designing and building engineering Org structure at least twice so far (Bank BTPN during IT Transformation & DKatalis as we scaled). Like always, we established important guiding principles as our steer the direction:
Recommended by LinkedIn
Tribes-Squads-Chapters
Spotify Model answers most of the guiding principles listed above, hence, it was our defacto choice to organise the team. Having said that, Spotify model doesn’t answer many questions, so, we did not consider –
Spotify model as a framework
– but as guidelines for autonomy, communication, accountability, and quality (as suggested by Henrik Kniberg in his article - No, I didn’t invent the Spotify model).
Organising ourselves in Squads & Chapters
Conway’s Law: Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure.
In short - communication structure in the organisation directly influences the design of technical systems. So, if we inverse Conway’s Law - for optimal system architectural designs, we have to simplify the communication structure in which, team size plays an important role in socio-interactions. Hence, our choice was to build small X-as-service provider teams knitted together through loosely coupled API communication and customer journeys:
A typical squad is led by a combination of PO and Tech Lead (who are also responsible for the scrum ceremonies). Additionally, a squad will also have FSE - Full Stack Engineers (each specialising in FE or BE) and Quality Engineers (for automation). We tried to maintain a healthy ratio of 3:1 (for every 3 developers, 1 QE) - as depicted below:
In my opinion, it’s a myth that an Engineer can be an all-rounder - expert in FE, BE and Systems (aka Infra). I prefer to maximise on their strength, make them work as pairs to optimise productivity & quality. (may be an article for future)
The picture below represents the squad/chapter setup we had in-place.
In addition, we built some core squads responsible for specialised work:
The upskilling program
Or rather capability building - we designed a number of boot camps and upskilling programs to make sure everyone is spending time outside of deliveries to learn & grow. Some are listed below:
Pitfalls and learnings
Building an engineering setup from ground zero and scaling it to 300+ in less than 2 years was a huge undertaking. For sure, we had many learnings during this journey, some of the important ones to highlight here:
are good examples of outcomes produced by squads. In the next article, I would walk through categories of such metrics.
People talk a lot about Engineering culture, however, my strong belief is: practices followed in the organisation get into DNA and hence become the culture. Ending this article with the statement:
Engineering culture (or rather any culture) is an outcome of practices
I would like to hear your thoughts on Engineering Culture. (more on this in a separate post)
I hope this article was an interesting read and provided good insights on our journey building an Engineering team.
Mission Critical Specialist
4yNice sharing Amit Kumar 👍👍