Running a dev shop — part 3: Talent pipeline and employee life cycle

Marek Kirejczyk
18 min readNov 3, 2022

This is the third part of a series on running a dev shop. See the overview of the planned posts below.

🎮 Part 1: Myths and favorable facts
🥾 Part 2: Bootstrapping and specialisation
🎤 Part 3: Talent pipeline and employee lifecycle
📣 Part 4: Attracting customers
📈 Part 5: Growth

Talent acquisition

Finding specialists in a booming software engineering industry is a hard nut to crack. It feels like the supply and demand is getting worse every year and is even tricker in a new, fast-growing specialization, like the one you hopefully picked.

Moreover, one has to pay reasonable salaries if one wants to make a profit on top of them. In this part of the blog post I will propose a solution to this conundrum.

Mythical Señor developer

Over the years I have struggled to hire great senior developers and engineers. It struck me that I found people with reasonable experience to be often underskilled, have high compensation expectations, but perform below par in dealing with day to day technical challenges.

It is clear to me now why that is the case. The best talent and experience is rare and they tend to have a preference to work with companies other than dev shops. The choice usually falls within one of two categories:

  • Safety seekers usually prefer to go to big corporations like FAANG or banks, which offer generous benefit packages, high levels of security and low responsibility.
  • Adventure seekers, on the other hand, usually prefer startups, with high risk and high return on investment, in case of success, in the form of equity or similar.

Oftentimes, aside from benefits, both can offer better base compensation.

The truth is, typical software houses present little value to highly talented and experienced developers. While there exist interesting strategies to attract senior talent to a dev shop, my personal experience is that they hardly scale and the best way to build high-quality services is to focus on another group of developers — juniors. Regardless of which group you focus on — the best way to create a win-win situation is to hire talent and not experience.

“Be a talent scout”

Steve Jobs

Hire for steep slope

I believe the primary goal of a highly specialized dev shop should be to find, grow and retain talent. The talent is defined here as the ability to grow into a great engineer and later possibly into an engineering manager, rather than someone who is already one of the two.

A highly talented and motivated person, with proper training and mentorship can easily outgrow market average, sometimes in almost no time.

“On average, a Senior [engineer] from the market will achieve the same level of expertise in our company in two years as a freshly hired Junior in three years.”

Antoni Kędracki — first Ethworks CTO

While there is a whole spectrum of ways to find and attract talent, there is one I and some of my peers proved to be successful over and over again.

The way is to attract young, highly talented people before or just after graduation, when they are about to enter the job market for the first time.

A value proposition for a talented junior

There are two main reasons why junior developers are very attractive targets for highly specialized dev shops.

  • Excitement about emerging technologies. Young engineers are oftentimes attracted to new emerging technologies — it takes a small employer branding budget and a presence at local universities, to arouse their interest.
    The senior developer, on the other hand, needs to first resign from his current specialization to join the new one, which is often perceived as a risk with an unclear potential reward.
  • Speed of learning. Students and graduates are used to learning and getting into new stuff all the time, and so they are usually much more receptive to new technologies, as well as company methods and culture. Unfortunately, more experienced developers are used to incremental learning and oftentimes accumulated bad habits.

Most importantly, a good dev shop has a clear value proposition for Juniors. Good dev shop is a place where a junior engineer can:

  • kickstart his career
  • learn and grow as fast as their abilities allow them to
  • aggregate skills that gonna pay off throughout her/his career
  • experience and co-create a great engineering culture,

Many of the above things are hard to reproduce in a fast growing startup or a corporation led by non-engineering related goals and affairs.

The alignment of interests between a dev shop and junior engineers makes it a win-win situation, where both sides benefit greatly from working together. Moreover, there is an even stronger, more profound alignment here at play.

Given that repeatable hiring of great, experienced engineers in a fast-growing market is often close to impossible - the rate of growth of such a dev shop depends mostly on the rate of growth of its less experienced employees.

Therefore it is in the employer's best interest to grow juniors into mids, mids into seniors and seniors into seasoned principal engineers and engineering managers.

With multiple projects that a dev shop is working on — it is much easier to grow talent than inside a product company or corporation.

This is by far the best value proposition a dev shop can offer to a software developer. And there is a great narration that should not be underestimated:

A great dev shop will be able to retain great talent for years and when an employee leaves, they should be able to find highly attractive positions as principal engineers, engineering managers, CTOs and founders.

That being said, hiring only unexperienced Juniors and neglecting mentoring is a bad idea. Hence again the need for a technical co-founder is fundamental to kickstart an engineering culture and every good experience you add to the mix can be potentially leveraged to grow faster. Yet again, the focus should be on potential, aka talent, aka ability to climb steep learning curves.

Talent pipeline and employee life cycle

Now that I’ve hopefully convinced you that focusing on potential brings more benefits than focusing on experience, let’s look at what an employee’s journey could look like. Let’s start by reviewing the concept of the hiring pipeline (or as I prefer to call it — the talent pipeline) and an employee lifecycle.

The talent consists of the following stages:

  • Employer branding consists of activities aimed at building awareness of the company among potential employees and presenting it in a favorable light.
  • Recruitment is the process of converting potential employees into actual employees, by cherry-picking talent from the pool built in the previous step.

The employee pipeline continues through these stages:

  • Onboarding which includes (but is not limited to) training fresh employees in key technologies, skills, and other aspects of working in a company.
  • Growing and retaining. A talent requires to be taken care of to grow to bring value. The more people feel they are in the right place, the more likely they are going to stay.
  • Leaving. When they decide to leave or if the company decides to fire them. I don’t have to tell you that this part of the process should be handled with highest diligence.
  • Maintaining relationships. Once the employee leaves your company, it is often mutually beneficial to stay on good terms and maintain a relationship.

I will now move on to describe each of the phases of talent pipeline and employee lifecycle. A detailed description of some of these phases each deserves a post (or a book) on its own, therefore expect only cherry-picked aspects to be covered.

Employer Branding

As a starting dev shop owner, I thought that to hire a good engineer one needs to post a job ad and do a few interviews, and boom — done. Perhaps offering an attractive salary is a factor. Boy was I wrong — the journey starts much earlier.

A false impression might be strengthened by recruiting agencies, which will promise to deliver high-quality candidates for a fee. There is a challenge in working with agencies or even hiring seasoned HR managers.

Most of the agencies and HR departments post on the same job portals, use similar search criteria [on platforms like Linkedin] and they all send similar boilerplate messages on a very highly competitive market. This approach typically leads to a limited success in attracting great talent

A company that cares about quality hires runs employer branding campaigns, which may include one of many ways to attract talent:

  • Dedicated events for technical university students (e.g. lectures, hackathons, parties).
  • Full-semester lectures or workshops (as a part of a program or extracurricular) at a partner university.
  • Technological events which serve as broader marketing events but can be promoted among students in dedicated ways like discounted tickets, free passes, etc. There is a wide variety of formats: meetups, hackathons, workshops, conferences.
  • Social media activity can be leveraged for employer branding — especially all kinds of activity in technological communities: activity on thematic forums, Reddit, Stack Overflow, and similar.
  • Personal brand — strong presence in social media and building a strong personal brand of a founder is yet another strategy to consider

The list is far from exhaustive and there is plenty to choose from. A small company with limited resources should combine one, two, or perhaps three efforts at most — and consistently build a compound effect over time. For example, use your events to make your social media look like there is always the next interesting thing coming. Do one thing at a time, but always do something.

Specialization

At this point, I don’t have to tell you that employer branding activities should heavily leverage specialization, sharing knowledge and explaining the technology via all the different channels is bringing value to the community, which in turn tends to attract promising engineers.

Be consistent

At the latter stage of my career, when I was bootstrapping Ethworks, I already understood the role of employer branding. In the very first week of the new company I gave a lecture at Warsaw University of Technology. In the very first months I started extracurricular workshops using Solidity.

We were able to hire with ease. We attracted several talented people in the first months of the company. Once saturated, we put hiring and branding on hold..

After some time, we were ready to hire again, but somehow we couldn’t find any good people for several months in a row.

I was frustrated with unsuccessful hiring. And then I slowly began to understand that without proper employer branding we lost the ability to attract talent.

We decided to reignite our employer branding efforts with a bang. We started with a PR stunt, followed by a series of meetups that led to a huge, over 1000-people online hackathon. We invited other blockchain companies from Warsaw, Ethereum Foundation, became a sponsor and we attracted $60k+ in prizes for 0xhack hackathon.

It was a great stride, took us several months of hard work, but paid off and kicked-off successful hiring for years to come.

It was a good lesson of consistency.

Recruitment

It is important to have many more candidates than what you want to hire so that you can cherry-pick the best ones. You will need to engage technical recruiters, like the CTO, and senior developers. With their time being very valuable, you want to limit their exposure to unpromising candidates. To do so, make sure the recruitment process starts with screening.

Screening

Usually, screening means a call from a recruiter, who asks basic questions about the candidate’s motivation, availability, and expectations to verify there is a match. Proper screening allows for saving time on not-very serious candidates that openly declare a lack of availability or mismatching expectations. We discovered there is more you can do during that phase.

We found out that throwing a simple technical question during the screening — an unusual practice — can reject around 50% of candidates at the screening stage, doing wonders to recruitment process efficiency. It saves many hours of technical interviews per hire.

It also allows to screen more candidates and find talent that can be overlooked by other companies — people without a formal education, but highly motivated and smart self-learners.

Candidates that pass screening can move to the interview stage.

Interview

Here is an untold truth about interviews — all interviews are bad. The reason is that you have a very limited amount of time to assess a candidate and predict their performance over several years, which is a rather difficult task.

If you make it long — you will lose too many resources (namely senior engineering and candidate time), if you make it short — it will provide a limited amount of data points for decision-making.

There is no silver bullet, but I do believe there is a sweet spot.

In our experience, a two-hour interview, with one hour of fundamental algorithms/database problem solving and one hour of pair programming is the best I have seen so far.

A good technical recruiter can do 2–3 interviews daily, or 1 without distracting his other activities too much. During such an interview, you can see if the candidate has basic programming knowledge, can write simple proper functions, think about edge cases, as well as see how they use the programming environment, write tests (usually the first time in their life on the interview), and construct a solution step-by-step.

You are hiring for a steep learning curve. Look for people who are fluent in solving basic problems, and test their limits with edge cases and annoying details. Pick one who can solve problems in time and enjoys doing it. If they can do it for common programming tasks, they can very well learn any other programming skills.

Speed

The speed of the process is essential, a good candidate will get a job offer within 1–2 weeks after they start searching. Ideally, you can close the whole process for a candidate in under a week. A screening call a day or two after the application, an interview 1–2 days later and an offer 1–2 days after the interview.

I found over and over again that there is no time for committees and a single good technical recruiter call is often as good an assessment as a complex process run by big brand companies. Make no mistake, you are not FAANG, you can’t afford a long multi-step process. Time is the most precious resource for you. Move fast and outpace the competition.

On-boarding

Once hired — the next phase is on-boarding and the most important part of it — training. In many companies non-existing at all. That will be my focus in this section.

From workshops to bootcamp

Initially, we hired people trained in the university workshops I led.

This is a great strategy for organic growth but doesn’t scale well. Later down the road, we built a custom onboarding process from scratch that allowed us to double the size of the company (~20 to ~40 ppl) in seven months, without compromising the service quality.

With a few experienced people in the company we designed a week-long Bootcamp. Its program involved lectures, skills training, and coding workshops. Here is a raw program of a workshop.

Lectures:

  • Innovation cycles, decentralized philosophy, state of blockchain, DeFi
  • Javascript, solidity and blockchain basics
  • Security of smart contracts
  • Ethereum algorithms and data structures

Skills:

  • Pair programming DOJO — an exercise in pair programming and test-driven development, later workshops were run using TDD

Coding workshops:

  • Setting up the environment
  • Building ERC20 token and simple decentralized exchange (Dex)
  • Building user interface for the Dex in React

After such a workshop a candidate had a basic fullstack knowledge about building DApps on Ethereum.

And I know what some of you are thinking. Can an inexperienced engineer comprehend so much in one week? Not only they can. Occasionally, they outperform “Senior developers” on the customer side in their very first week of work.

Growing and retaining

Bootcamp is a great way to kick-start a career in a dev shop, but is by far insufficient to grow talent and deliver high quality services to the customers. The next step is to establish a mentorship structure.

Mentorship
Each newcomer (and really each engineer) should have a mentor who oversees their day -to-day work and guides their personal growth. A mentor acts as a go-to person, whenever they have questions or encounter problems. In a company with good engineering cultures mentors work with mentees on a daily basis through daily code reviews and pair programming sessions.

This not only allows mentees to grow faster, but also more experienced teammates to practice training and leadership skills. They are involved in the company’s growth and are appreciated for their skills, which in turn allows them to build great satisfaction and form lasting relationships.

Being a mentor is one step away from being a leader, who can take responsibility for a specific project or module. This creates a smooth path from junior to the mentor and further to the leader.

Human touch
Different people, different talents, skills and ambition. We tend to assign people with the highest potential to work on smart contracts and infrastructure under the mentors’ supervision right away. Developers who needed more time to become fluent with a complex technological stack would start with the front-end or back-end code.

Everyone would be expected to become to some extent a full-stack developer over time. But the timing would be different based on personal preferences and available project needs.

Growth path
Most importantly, at Ethworks, we mapped out a clear path of development with sublevels within junior, mid and senior stages.

Depending on performance, our engineers were expected to move to a higher sublevel every 3 or 6 months, where 6 months we would call “normal track” and every 3 months — “fast track”.

It acts as a transparent system of promotions, which small companies often lack. And sends out a clear message to the employees and candidates: learning is a big part of the job and you are going to be compensated for it.

Mentorship roles and leadership roles in a dev shop are somewhat dynamic, as the project structure changes. Therefore we had a long path with many sublevels, which was decoupled from mentorships and leadership roles and titles.

A mid developer can mentor junior developers and seniors can lead a small team. A good mid can lead a small project. One important note — the more value they bring to other teammates , the further up the path they travel.

One base requirement, however, for each promotion was to demonstrate ability to deliver working high-quality code. Mentorship and leadership roles early on in the path would be an argument for fast-track, so as working on complex code.

Compensation

Compensation is a tricky topic that needs to be navigated diligently. If you underpay your employees they might get demotivated and eventually leave the company. Overpaying will reduce your margins and paradoxically might be demotivating as well. Therefore observing market conditions and responding to market pressure is a key.

There is an interesting observation around the market pressure on engineering salaries.

There is relatively low competition for engineers without experience. Then the first pressure on salaries usually shows up after two years of experience, when the market starts considering developers to be a “mid” level. After another two years, when the market starts considering developers to be “senior”, even more pressure shows up. And because all the recruiters enter similar search criteria on Linkedin it is almost in a single day, when an engineer suddenly becomes popular and his Linkedin inbox starts to swell. An approximation of a market value of an engineer is displayed on a chart below.

There might be a temptation to pay salaries that closely reflect the market value — that is to do a major raise after two years and after four years since starting a job. I find that approach to be suboptimal.

I believe it is better to do a series of small raises instead, so that:

  • Employees feel they don’t need to worry about salaries, the company will take good care of them.
  • There is always a clear mid-term personal growth goal that is associated with a clear reward.
  • They feel they are being paid fairly.

So a good path for a fast-growing developer could look somewhat like this:

Leaving

When they leave
A good company should retain their employees as long as possible. One good reason is that hiring experienced developers from the market is almost always more expensive than training and retaining talent and there is more risk associated with hiring experienced person.

Moreover, with a good company culture, you will be able to train far better engineers that you can acquire from the market.

All Good Things come to an End

However, even if you do everything perfectly, as all good things come to an end, they will eventually want to leave.

The calling

A good reason to leave is what I would name — a calling. Different people have different callings, some of them can’t be realized in your company. That could be running one’s own business or trying some other specialization.

When that happens, make sure you do what you can to make them stay. If that fails, wish them all the best, let them go and offer help further down the road (see the maintaining relationships section below).

Improvements

If on the other hand, people leave due to internal conflicts, unsatisfactory compensation or similar reasons — it means you have to improve certain steps in your employee lifecycle. Don’t blame the employees — always seek feedback and look for ways to improve.

Sometimes some mitigation can be done right away — e.g. a company can make an employee a new offer, however most of the time, it will be too late — and it is better to focus on future improvements which will benefit other employees.

About those who stay

When key people leave — it is important to take care of the remaining team. People tend to be grumpy when long-time teammates leave. But here is an overlooked truth:

Every end is a new beginning. Experienced person leaving is an opportunity for others to grow and fill the ranks.

That is a great narration to leverage to refine the company structure.

Exodus

One particular event that you would like to avoid is what I call exoduses. These are situations when many long-time employees leave at the similar time. It can be hard to stop once in progress, but a well-managed company can avoid them, by focusing on all the things I write about in this post:

  • Building proper mentorship structure
  • Growing people who stay and move into new mentorship and leadership roles
  • Maintaining attractive salary and appreciate people’s growth
  • Maintaining good relationships with people that left

But even if an exodus happens, remember, it is not the end of the world. The company culture and brand will likely be preserved, if proper steps are taken. With hiring new talent and growing existing employees into new responsibilities you can rebuild the company’s strength in almost no time.

Firing

Even the best recruiting process has some randomness to it. While it is a noble goal to minimize the amount of mishires, it is impossible to avoid them completely. When that happens it is important to recognize the problem: an underperforming employee or even worse — a toxic one. In those situations time is against you. Don’t wait, give feedback right away, set clear goals for improvement and if they are missed, fire such a person. This is the mistake I have made numerous times, hesitating to act.

A toxic or underperforming person staying in the company can do a lot of damage and demotivate other employees. The longer they stay the more complex it becomes to fire them and more difficult to eventually let them go.

When you fire — be polite and honest at the same time: hash out the real reasons. And most importantly, wish them all the best, just because they were not the right match for your company — doesn’t mean that they won’t fit perfectly somewhere else.

Maintaining relationships

Some might say the employee lifecycle ends when people leave, but great synergies can be found by keeping those relationships in good shape afterwards, for several reasons:

  • People who are happy with their career in your company, will refer to it as a great place to work for others and do your employer branding work for you.
  • Some might even decide to rejoin your company after a while, as they might discover grass is not greener on the other side.
  • Some of your ex-employees will become decision makers seeking to hire great engineers. With great relationships they might turn back to you to hire your dev shop to help them solve problems at their new job.
  • Good relationships will also reduce the chance of poaching.

There might be other surprising benefits to maintaining relationships. Once I got a chance to invest in a company founded by one of my former employees. We both benefit from such a relationship on professional (i.e. know-how exchange) and personal level (enjoying discussions together).

Summary

Building and maintaining a quality talent pipeline and employee lifecycle is a capacious topic, but with proper specialization, a little bit of a knack for talent scouting, willingness to go out and grow people talents one can build a company by far outperforming market standards.

With that part of the company explored, it is time to dive into the other side of the software house — attracting customers. Read the next post in the series.

Thank you for reading!

If you like this post — hit 👏 button below.

To get notification about the next parts click follow below.

If you want to continue the conversation and see more stuff like this, you can find me on Twitter: @ethmarek.

--

--