Why should every product manager learn to code?

Products are built by teams that consist of a number of members coming from different background and perspectives. Most teams have developers, designers, and possibly other roles in addition to PM. Product managers need to empathise with team members in order to understand the challenges they are facing and help them overcome these challenges and be more effective, however, in many cases that does not happen.

One of the most common problems among product teams is that PMs don’t speak the same language as developers, because of their lack of knowledge about software development it becomes hard for both sides to communicate together, on one hand, the developers can’t explain in details the problems they ran up into or the architecture decision they have made and why they made it because the PM simply wouldn’t understand. On the other hand, perhaps the developers are open to communication and share these details, but it can be hard for the PM to ingest all this technical terminologies and concepts unless he has previous knowledge about them or has a general understanding about software development.

Learning coding skills will not only make the PM able to empathise with the developers but rather, help offer solutions and suggestions about the problems that the team is trying to solve, create better time estimates for the tasks by being able to ask the developers the right questions and breaking epics and user stories into tasks of manageable size and focused scope. That will help him understand the cost of each developed feature, and prioritise tasks and feature better because of the additional insights he gains when he understands the problem better.

Image Source: Diana Stoyanova

The PM has a “glue” role. Connecting non-technical people with technical people, and non-product-minded people with product-minded people. They need to wear different hats all the time. They fill a gap. A good product manager will bring a team of different views and personalities together to focus on one goal. They’re able to keep the balance between the product scopes and objectives that they wish to reach and the reality of what can be achieved.

Does the PM only needs to understand what the engineers are doing under the hood or will he ever need to code himself?

The truth is that the PM should utilize all his skills to do a better job and that includes coding skills. These skill can be very useful in accomplishing tasks and solving problems that could save a lot of the development team valuable time and increases the overall team productivity.

Image Source: Laurent Batel

Here are some reasons to make the PM start coding:

  • Automating recurring tasks: As product managers, we always have this report or spread sheet that we need to pull and update on daily or weekly basis, or that tool that we run to sync or connect two systems together, or at least we need to check some usage statistics and metrics every couple of hours to make sure everything is going fine. There are plenty of tools out there that can help you automate all of this, for those who tried many tools to find a perfect ones, they understand what i mean when i say that most of these tool totally miss the point, you need to do a very custom job that the tool can’t support. Learning to write a software that can do these tasks for you can be a real life-saver.
  • Scheduling alerts: You need to know about important things as they happen, if a server is down you need to know, but also if you received 1,000 customer requests in a minute you need to be notified about that. I recommend Amazon AWS for doing these kinds of tasks, Amazon provides Lambda function which uses server-less architecture, you can write your scripts in NodeJS, Python or C#, test your script and schedule it to run just like a cron job using Amazon CloudWatch events. You can also create an alert using amazon SNS and subscriptions in order to send SMS/Email when the job runs or whenever there is an error. I wasn’t familiar with Amazon AWS until i bought an echo dot, and created a Lambda function to write my first Alexa skill. Amazon provides very nice feature templates that i was able to use through Alexa skill kit integration with Lambda. The learning curve was not steep, it only takes a few days until you get the basics.
  • Consuming your product APIs to create test scenarios: Most products these days expose APIs to access the product features. Mobile applications by design require these kinds of APIs in order to work. You need to understand how the API’s work and how to access them programmatically. Let’s say the engineering team worked on a new feature for a marketplace that requires interaction between service providers and customers, and you need to build a social graph or a recommendation engine. Creating a simple scenario to test how the feature works for new customers and service providers that just joined your platform. You can spend many hours creating accounts and marketplace transactions manually, or you could write a piece of software that uses the marketplace API to create this test scenario. One could argue that this is the job of a test engineer or SDET. However, most startups don’t have these roles and the PM is the ‘glue’ that needs to fill in the gaps.
  • Supporting the team by building helper tools: It is quite often when a content management team needs support on data acquisition when you are working on a new marketplace, you need to make sure you work on both the supply and demand side of the market. For instance, when went international with Armut.com we needed to acquire data of tens of thousands of service providers in 5 different markets before launching. I created a simple web crawler and a tool that connects to APIs for 3rd party data providers to retrieve the service providers data. These kinds of tools are very effective when you need to grow and scale the business. Writing this kinds of tools yourself rather than relying on the engineering team to do it, will help keep the engineers from being distracted in side jobs and keep them focused on developing the product core, while you as a PM can work directly with the content management team and develop a minimum-viable-tool that they can use.
  • Continuous learning and application of what you learned: If learning is a goal in itself, then trust me if you took a course or two about software development, you still haven’t learned much, your brain will only retain a fraction of the information after you completed the courses. Having said that, working on projects and solving real-life-problems is the only way to prevent your knowledge from getting rusty.

Software development along with complex problem solving is one key skill that adds a lot of value to you whether you are a product manager or not. It has been identified by the World Economic Forum as the most valuable skill to get a job in 2020. Bear in mind that you don’t just learn technology but before that you learn software architecture, data structure and algorithms, you should build a strong foundation before focusing on technology. Software development is a hard skill to acquire and requires a lot of time and dedication, it empowers and gives you the ability to accomplish things yourself whenever you want them to happen which would have been otherwise impossible to do.

Image Source: Future of Jobs Report, World Economic Forum

Being a CS grad gave me the opportunity to learn coding and worked as a software engineer for a couple of years before moving to business roles. That wouldn’t have had much value if I stopped learning and applying new technologies and concepts. If you are not a CS grad there are a few places to get started on coding, one possible start is CS50 which comes highly recommended as a good starting point to learn general computer science concepts before you dig deeper.

Here are a few good resources to get started:

http://www.khanacademy.org/cs
http://www.udacity.com
http://www.codecademy.com
http://www.codeschool.com

Post also available on my blog https://mohamed-salah.com/2018/01/01/why-should-every-product-manager-learn-to-code/