6 Technical essentials for Product Managers to get right when developing a product
This list consists of these technical essentials and 6 functional essentials.
What I won’t be talking about:
- Which of these items should come first. This list is not prioritized - that’s up to you.
- Whether you should build an MVP first, or what features to you should prioritize. This list does not contain features, but rather boilerplate functionalities and processes that I feel should improve your product development process.
- Developing methodologies like Waterfall, or Agile with Scrum or Kanban. Your development methodology is totally up to you and your team. Pick whatever suits your product, team and delivery requirements.
Ok, enough managing expectations. These are the technical essentials for Product Managers to get right when developing a product:
1. Code version control
From a development perspective, code version control is essential. For one, version control makes working on a code base with multiple people super easy. Developers make a certain set of changes, usually focused on one task or backlog item, and once they’re happy with it, push it to a centralized storage with a comment. Other developers can pull changes from the central storage, allowing collaboration.
The critical benefit of version control is that it provides developers with a means to better understand the code they’re looking at. Having version control from the absolute start of your product allows developers to see when a line of code was inserted and updated, and the context of that change: what other files were changed at that time, and for what task? Knowing this helps developers to better assess the changes they’re about to make, thus preventing issues or bugs. Code version control assures a Product Manager that your programmers know everything there is to know about the code they’re working on.
2. A code branching strategy
When building a product, especially in an Agile environment, releases will be frequent: new versions of the software with product updates. These need to happen on time, because of all the communication involved: stuff like writing release notes, and talking to sales and marketing. But what if, a couple of hours before the release, one of your developers notifies you that they found a breaking bug in a certain new feature that can’t be fixed in time? Do you postpone the release?
This is why a code branching strategy is important. A code branch (or “feature branch”) is a separate stream of the code that only gets merged back to the main code stream when the feature is completely done. This allows a Product Manager, together with the team, to decide when a feature is ready for release. The result: full control over what gets released without dependencies or time pressure!
3. Automated tests
In software design, a feature is “a distinguishing characteristic of a software item” according to Wikipedia. You expect the product to be able to do something new or better when introducing a new feature.
As time goes on, more and more features are added to the product. As a Product Manager, you want to make sure every feature is still working as intended. So, with every feature added, you’ll want to test if the new feature didn’t break any existing features. Doing this manually takes a lot of effort. This is where automated testing comes in. With automated testing, you make software do the testing and report the outcome. There’s unit testing for testing specific small pieces of logic (like complex calculations or API calls) and gui testing for testing the user interface of the application (like navigation menus or forms). Automated tests assure a Product Manager that new features don’t break existing functionality.
4. Continuous integration
To make sure code from different developers works well together, a continuous integration process should be in place. Wikipedia says Continuous Integration is “the practice of merging all developers' working copies to a shared mainline several times a day”. A place where everything developers work on comes together provides enormous benefits for code stability and quality. It allows developers to spot problems early on, and allows them to fix it before the feature is merged to the main code stream, preventing last minute stress before a release. Continuous integration assures a Product Manager that features developed in parallel won’t clash when they’re all integrated in the product.
5. A testing environment
You want to make sure users won’t experience any unexpected bugs when you’re deploying a new version of the software to production. That’s where a testing environment comes in. Testing a release candidate of the software in a separate environment helps you to be sure this new version won’t break anything in production. This testing environment can be filled with test data to prevent accidentally emailing actual customers and to comply with GDPR regulations. As a bonus, when not testing for a release, the testing environment can be used for product demos or manual tests of the integrated code.
6. A deployment strategy
You want to make sure users are not negatively impacted when you’re deploying a new version of the software to production. That’s where a deployment strategy will help. A deployment strategy is essentially a checklist with steps to execute when deploying, and a couple of fallback checklists for unexpected scenarios. Some food for thought:
- Having the opportunity to roll back to the previous version of the software.
- Having the opportunity to reroute all user traffic to a mirror of the application.
- Making sure the product remains available for users as much as possible while deploying.
Even though you won’t write (much) code as a Product Manager, it is very much your job to know what technical functionalities and processes should be in place for the product to thrive in the long term. In my opinion, these 6 essentials will make sure you’re ready to go on a technical level. Want to be prepared even better? Check out my list of 6 functional essentials for Product Managers to get right when developing a product too!