Are you a product developer or a project developer?

I am so sad to see really good developers leaving because we are not doing products but projects

an unknown CTO

Believe it or not, I heard the above on a lunch with the whole Android team and with the CTO of the whole company that I was working for. What does it mean to build a project vs building a product? Is there such a huge difference when you are developing a software solution? Let’s dig deeper into this.

Product vs Project

Let’s take a quick look at the definitions of these 2 nouns:

What is a project?

A project has a defined beginning and end in time and is unique in that it is not a routine operation, but a specific set of operations designed to accomplish a singular goal and often includes people who don’t usually work together. At the end of a project, the team is usually disbanded and assigned to new projects with new team members.

Project Management Institute

What is a product?

A product is a good, service, platform, application, system, etc. that is created, maintained and supported by solving problems and providing benefits to specific customer and business needs. Products tend to be maintained by a stable group of individuals who do work together regularly and who bring in others as needed.

Project Management Institute

So there is a very obvious difference, right? Project is something that you plan to accomplish with people you may not know. When you achieve it, you just start something new.

On the other hand, product is the long term solution. You create a team, you work together with people you may not know initially, but then you create a bond around the product and you continue developing and supporting it until it either fails or grows or you just become interested in something new.

But where exactly is the problem when the CTO separates the developers in product and project ones? Let me share my experience.

Am I a product developer or a project developer?

If you continue with the vision of the project vs product thing and bring it into the software development world, then it means that there are product devs and project devs. This means there are devs who are permanent and who expect to work on a project until they die let’s say and devs who work on a project until a certain date is there and they just pack their bags and whatever is done is done. And the CTO’s quote from the top of the article actually shows how sad he feels that developers are looking for products and not projects. But is it really the case? Is this the reason why good developers tend to leave and bad developers tend to stay depending on whether they are working on a project or a product?

You are a developer

To be honest, I can’t disagree more with the above that was quoted. Here are my pennies on that.

Developers are experienced and inexperienced ones.

It is normal for junior devs to do bullshit sometimes. But that’s why they are working for you. To get more experience, to grab their passion for programming and just help them grow in the process until they reach a phase where they can start teaching other people and work on a project self-sufficiently.

It is normal for seniors devs to want to play around with new things. To focus on quality. To let them share knowledge in all the possible ways that they want. To let them discuss technical topics and how to approach certain issues that otherwise would pop up into the development lifecycle.

And if you are pressured under time and you want something delivered fast and you don’t enforce quality, man, then you are in a deep sh**. Because experienced people try to make shortcuts to fit into your expectation, juniors stop learning, the quality that teaches junior people and keeps the flame of the senior people burning, it is just blown away. And you make sure that this big disappointment about what the goal is, makes its way into the hearts of the people actually working on it.

Do you think it matters for your team if they are building a project or a product? Maybe a little, yes. But do you think if you offer them the time to develop something with good code quality, the time to have technical discussions about issues, the time to mentor and teach, the time to write at least 2 tests per PR, the time to let them share a thing or two with each other, that it will matter for them if they are building a project or a product?

Developers are that – we create software. We write it, think about its challenges, make sure it is understandable and maintainable and sometimes – tackle it with hours just because something was never thought of. Who cares if it is a project or a product when you do it with passion in the heart and quality in the mind?

The point is that recently, people tend to look at the software development process like a factory that produces pens. Would you buy a pen made in Germany or a pen made in China? Actually, I wouldn’t buy neither. Because we don’t produce pens. And it doesn’t depend on the time. We create software and we are artists in 90% of the time. Yes, we have certain limitations, we follow certain architectures but everyone almost always has something that makes him different from other developers on the market. And it is ridiculous to say that people are leaving because they are building a short-time solution and not a long-time one.

The issue is that people leave because of the lack of vision towards them. Lack of the idea that development is a process and not a manufacturing one. A process that does take time, that takes knowledge, that includes quality. And if you tend to run away from the quality, you will certainly pay the price. Either by projects failing, by amazing talented people leaving … or both.

So the next time when you think that the problem is the thing that you are building, give it a thought also how you are building it. I am pretty sure you will find a really good answer there.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s