Technical Skills

Develop

11 minute read

‌‌
A PM does not need to be an engineer or be able to write code, but they should have a general understanding of how a product is built and the technology behind it. It's important to know enough so that you can partner with engineers to brainstorm new ideas and solve problems.

Align with engineers and understand the system

Being able to proactively share your product thinking with engineers will help to deliver an exceptional product by including them in ideation sessions so they know that you appreciate their input. This will not only create for a beautiful product, but engineers will feel valued and empowered knowing they are a part of the vision of the product.

Engineers usually become the origin of innovative ideas because they understand the technical possibilities of a product. This is very beneficial because they can envision a sea of possibilities that a PM may not of thought about.

"Engineers are the heart of innovation so it's important to include them before a decision is made on whether to move forward." - Product Girl

Getting buy-in from engineers before an idea is presented to the leadership team will ensure the idea is feasible and has been well thought out. By strategizing with engineers you are showing initiative which is an exceptional leadership quality that will help you move forward in your career.

💁‍♀️ Tip: Partner with an engineer you feel comfortable with and ask them how the system works. Ask questions when you don't understand something. These questions could be constraints on the system, common issues, what is easy and/or hard to build.

Things to consider

There may be times when you want something built that won't be possible. An engineer may say 'it's too difficult' or 'the system won't allow for it.' Asking for clarification will help you understand the details better so in the future when thinking about possible solutions it will help to adopt a different perspective by understanding logic and reasoning behind how a system works. Different ways to achieve this would be to understand three things: Cost, Performance, and Tech Debt.

Cost
Is it too expensive to build? Why? Are you underestimating the work involved? Will the engineer have to touch a part of the code they aren't uncomfortable with? Is the engineer using a pre-built component that doesn't support this new functionality? Will they need to create a new component to support new functionality from scratch?

Performance
Will this new feature slow down the system? Maybe the feature you want built takes up significant resources. Performance is important so if you can't find another solution then you may need to slice the feature or get rid of it all together.

Tech Debt
Maybe the solution adds complexity that will create errors in the future. Maybe this new feature will create new back-end infratructure that will need to be revisted later if not built properly.

Let's Get Technical‌‌
The level of technical knowledge varies for each role. Understanding the basic concepts and terminologies will help when interacting with engineers and creating solutions for customers. Meeting with your manager and the engineering manager will prove valuable as they can help guide you on what technologies to familiarize yourself with.

I will touch on a few concepts and terminologies to help you get started.

The Basics

API‌‌
An API is an Application Program Interface. An API creates a way for two or more applications/computer programs to communicate to each other. In other words...

An API "talks" between two systems using a set of rules, definitions or protocols to deliver on functionality. - Product Girl

An example of this would be when a customer places an order at a restaurant. The waiter is the API and the menu items are the different endpoints (we'll get there 😘). When the customer places an order from the menu then the waiter will take the order back to the kitchen (service) so that the customer can receive the food they ordered.

In this case, the waiter is the API and what was ordered from the menu are endpoints and the kitchen is the service. An API makes sure that data communicates from point A to Point B through different endpoints and services. Overall, An API is a way for a user to make a request to do something.

🚨 Important Note: You cannot take two different endpoints and have them communicate to each other through an API. You would need an intermediary to make a request from each. This intermediary would be a service. A service calls on the API to make a request from the endpoint.

Endpoint
An endpoint is one end of a communication channel such as a URL, mobile device, desktop computer, virtual machine, servers, etc. It sits there until it receives the request and then performs the action. For example, if a service wanted to receive user information it would communicate that request through an API. The API would need to receive information from the endpoint and then the API would query the data and send it back to the device service.

An endpoint is a component of an API, while an API is a set of rules that allow two applications to share resources. Endpoints are the locations of the resources, and the API uses endpoint URLs to retrieve the requested resources. - HubSpot

🚨 Important Note: Databases have endpoints. These endpoints are used for accessing or modifying information usually through CRUD operations via REST API.

Implementing API's‌‌‌‌

CRUD vs REST API
Let's briefly discuss the two prominent API's that you may hear in engineering. The CRUD API and REST API. The CRUD API (Function API) stands for Create, Read, Update, Delete. These are the four basic functions used to execute on a database (we'll get there 😘) usually for user information.

"Let’s consider a real-world example of CRUD in action. When a user books a trip through an online travel service app, the application creates a reservation record, reads available hotel and room information, updates the list of available rooms when a reservation is confirmed, or deletes the entire reservation record if the user cancels the request. Similar operations happen in any transaction-processing application."- Crowdstrike

A REST (Representational State Transfer) API uses HTTP (web) request to access and remove data.

For example, a REST API would use a GET request to retrieve a record, a POST request to create one, a PUT request to update a record, and a DELETE request to delete one. All HTTP methods can be used in API calls. A well-designed REST API is similar to a website running in a web browser with built-in HTTP functionality.- IBM

💁‍♀️ Tip: A CRUD API manipulates the data and a REST API controls the data. A REST API can invoke CRUD operations, but not the other way around. Basically, a CRUD API is how you use the API.

Test Environments

During Software Development, software goes through many stages before it can be deployed into the world. Developers code in different environments to make sure the code is properly tested so when a user receives a new feature and/or functionality it is without bugs. Thus, going through these stages ensures the quality of software being delivered to users.

The first stage in which developers write their first lines of code is called the 'local', 'dev' or 'sandbox' environment. This runs on an engineers own machine. This allows for each engineer to write code at the same time. Once the code is complete they will build their code on their local machine and push the build into a separate branch in the repo (a repo is where your project lives). Then, the engineer submits a PR for their peers to review their code and before it is merged into the master/main branch (usually in GIT) in the repo (repository).

Once the code is approved and merged into the master branch the engineer will deploy it into the QA environment for QA to test. Once it passes QA it will merge into the Stage environment where everything for release is tested. This includes the basic components of testing such as unit testing, regression testing, integration testing, load testing. After everyone tests in stage the engineer will deploy into prod and their code will be live.

Throughout this process an engineer will commit their changes which saves their changes back to the version control system and updates the version history. After an engineer commits their changes other team members will be able to see their changes. A version control system or source control (git or github) allows engineers to work on code simultaneously and update the version history. It manages changes in the code and allows for engineers to recall specific versions later.

Common Types of Testing

Before code can be deployed from the stage environment to production it needs to be thoroughly tested to make sure there aren't any bugs. There are many ways to test, but the most common tests are unit, integration, regression, load and scalability.

Unit Testing: Individual units (components) of your code are tested to ensure that each unit of the code performs as expected. This is to make sure that what was built is fully functional before integrating with previous code that is already in production. The goal is to isolate the code to determine if it works the way it should that's why it is referred to as isolated testing. By performing unit (module) testing you can detect errors in code that may be harder to find later on. It is performed before any other testing.

Integration Testing: These test individual components and how they communicate to each other. They only run when it touches other components/functionality of a product. If you have two systems that interact with each other your goal is to test that interaction and confirm that it functions as expected. For example, if you created a notifications pop-up modal an integration test would make sure that the back-end and front-end components were communicating so that the user could receive notifications. Testing that the front-end component can render the information provided by the back-end correctly.

Regression Testing: Regression Testing ensures any modifications or updates done to the code do not alter or modify the existing functionalities of the software application. Regression testing makes sure that the system in its new state with added functionality, either with a new feature, bug fix or current feature is working properly. The purpose of regression testing is to expose errors in the new code base that could cause the original functionality to not work.

Integration testing aims to ensure that, when units of functionality are integrating, no errors are introduced, whereas regression testing is done after every change to ensure that these changes did not break units that were already tested. - Studio3T

Load Testing: Load testing is the most common performance test. It is done when you need to check how a system will function when multiple users access the application over a certain period of time. In other words, how a system will handle a heavy load of users at the same time. Load testing shows how your web application performs during normal and peak load conditions, as well at its breaking point.

Scalability Testing: Scalability tests the functionality of the application when it is receiving multiple request from users. Contrast to load testing where your system is tested under various load levels like people coming to your application during peak and normal hours. Scalability testing shows how well your system scales in response to user request.

Load testing = users using the app at peak and normal hours
Scalability testing = testing the behavior of the application and how well it responds when multiple users are making request.

🚨Important Note: Testing should be done throughout the software deployment life cycle not just in QA or Stage. At the very least developers should have unit tested their code before submitting it to QA.

Software Development Life Cycle Automation

Continuous Integration
CI/CD stands for continuous integration and continuous deployment/delivery. Continuous Integration refers to continually pushing the code to the repository in GitHub, Git, Bitbucket, etc. A testing/build server will check the code as soon as it's built and the developer will receive feedback on the tests and checks that have passed/failed. This helps with finding bugs early and fixing them.

Being able to test continually will help deliver code faster so that you can deploy more often. In return, you will have happier developers because they don't have to do the testing themselves. They just push their code to the code repository and the build server will test the code, build it and let the developer know the outcome.

Continuous Delivery
Continuous Delivery enables for code to be released reliably whenever needed. This ensures deployments happen often and quick. It helps to move away from spread out deployments that happen once every 3-4 months to continual releases that happen multiple times a day. In order for this to be possible deployment will need to be fully automated usually through CodeDeploy, Jenkins CD, Spinnaker, etc.

🚨Important: Continuous Delivery may involve a manual step to approve a deployment as opposed to continuous deployment which is fully automated all the way to production. Continuous deployment does not need any manual intervention of approvals meaning every code change is deployed all the way to production.

Databases

A database is a set of structured data aka a place to store information (e.g. user information, sales transactions, financials, product information) that is easily accessible in various ways through different types of API'S.

A database can be referred to as a supercharged spreadsheet for computers to use. Similar to an excel spreadsheet where you can create multiple tables, there can be multiple tables in a database. Examples of general databases that your company may use could be MySQL, Postgres, or Mondo DB. These can be used for user information and user generated content.

SQL vs NoSQL
SQL stands for sequel also known as structured query language. SQL is the programming language used to communicate with a relational database. It manages data held in a relational database system. A relational database system stores and access information that is related to each other.

NoSQL
This approach is used to store and query data outside the traditional structures found in relational databases. NoSQL databases are more commonly used for big data and real-time web applications. This is because the design is more simple and can scale for large loads of data making it easier to deploy and manage than a SQL database that has a more structured approach.

SQL is the programming language used to interface with relational databases. (Relational databases model data as records in rows and tables with logical links between them). NoSQL is a class of DBMs that are non-relational and generally do not use SQL.- Talend

Final Words 📖

Being technical is always a benefit especially in the product management space. Even if you weren't a product manager it is still valuable to understand the basics of technology and how applications are built. The world is ever evolving with products that you use every day and it's important to understand how they function.

With that said, you don't need to have a technical background or come from the engineering side to become a product manager. Knowing enough of your product so that you have technical influence by understanding workflows and the dynamics of how it impacts the user will prove beneficial. Especially when creating solutions for your product and speaking with cross-functional teams. Ultimately, you only need to know enough so that it impacts user-facing decisions.

Most importantly, don't ever feel embarrassed that you may not know something and don't be afraid to ask questions. Nothing should stop you from learning as much as you can to help your product, teammates, and your customers.

Next Steps 🚀

  1. Endpoint vs API
  2. CRUD vs REST
  3. REST API
  4. Introduction to Database and SQL

‌‌‌‌‌‌‌‌‌‌

‌‌