Software Engineers come in all sorts of shapes, none of us are the same.
But in the interest of simplicity, we can roughly be categorised as:

  • Front-end engs who work on the visual part of a product (e.g. a website).
  • Back-end engs who work on the non visual part (e.g. a service that compute data for a website).
  • Full-stack engs who work on everything: so a hybrid of the two.

I strongly believe a performing team will have a mix of these. Something like: a few front-end engineers, a few back-end engineers and a majority of full-stack engineers.

Team

In this post I explore why and how I think teams should be structured for success.

A few notes on the scope of this blog post

  • I’m not including DevOps/SRE/Infra engineers for the sake of simplicity (and not because they’re not important!)
  • I’m talking about Product teams who are first line in developing products for the company customers. Large companies with many engineers will have very specialised teams. For instance back-end engineers working on storage or front-end engineers working on a design system.
  • When I say front-end/back-end/full-stack engineers I’m talking about the role of an engineer and not labelling people. I like full-stack role, but I’ve worked in pure front-end and back-end roles.

Front-end and Back-end Engineers as Tech Experts

Front-end engineers work solely on the front-end part of a product.
They’re expected to know or at least want to know the front-end technology used by the company and have a deep interest in front-end tech in general.
Front-end engineers will be the ones laying down the foundation and establish good practice on the front-end front (#pun)

Back-end engineers do exactly the same, but in the back end.

Front-end and back-end engineers super powers are their technology expertise and focus.

For instance front end engineers in a company that uses React are expected to know React (more or less deeply based on seniority), be excited about it, know its intricacies, keep up-to-date with the latest news, know best practices, etc… and work if not all then the vast majority of their time on the front-end.

The problem with isolating Front-end and Back-end Engineers

In theory, having front-end engineers working along side back-end engineers sounds good.
You have a team of experts working together.

But in practice I’ve seen this fail countless times, very often because of misalignment and miscommunication (probably the hardest problems to solve in any organisations). And often exacerbated by isolating front-end and back-end engineers into segregated teams.

I think this is the flip side of having engineers focused on a single area and labelled as front-end or back-end engineers.
Who is responsible for the integration point? Who knows the flow front to back when a customer clicks on a button? The answer is a bit of everyone so no one really and the product ends up being loose and not great.

Loose Glue

On top of that, the developer experience is not always fun with the 2 sides sometimes blaming each other for problems.

Back end engineer returning 500 HTTP error code

I’m not saying it always happen, it can work, but it’s hard.

Full-stack Engineers as the Glue

Full-stack engineers are jack of all trades.

They know enough to work anywhere on the product and know a bit of everything across your entire stack.

They’re usually flexible and don’t mind where they work.

Full-stack engineer super powers are their abilities to work everywhere and to see how everything work together.

This means they can help out on the front end (or back end) wherever hands are needed.
And it also means that they know how a feature work front to back, spotting potential problems, understanding pain points.
The mindset of a great full-stack engineer is to think about the entire flow of a feature including the integration between the front and back of your application: they glue things together and bring coherence.

My ideal team

Because of this, my ideal team looks like this:

It roughly has a mix of 25% front-end, 25% back-end and 50% full-stack engineers and has 1 mission: develop the product (or the feature) for the customers.

Front-end/back-end engineers develop strong front-end and back-end sides thanks to their expertise and focus while full-stack engineers help out and create a strong glue between the two:

Ideal Team

Final Notes

As I said in intro, engineers come in all sorts of shapes and I’ve generalised here.

This is based on my experience and chatting with fellow engineers friends.
So if you’ve stumbled across this post and you disagree and want to chat I’m reachable on LinkedIn :)