Skip to content

Commit

Permalink
Merge branch 'main' into product-management-case-studies
Browse files Browse the repository at this point in the history
  • Loading branch information
alessandromarmii committed Nov 22, 2023
2 parents 1f3524e + d544aeb commit 7c06bd4
Show file tree
Hide file tree
Showing 22 changed files with 1,095 additions and 74 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,6 @@ Potential Topics--
3. Helpful Courses
4. User Experience Orientated Games
- Product Management
1. Beginner's guide to product management and becoming a successful product manager
1. Beginner's guide to product management and becoming a successful product manager with case studies.
- Other useful resources
- Teamwork
8 changes: 7 additions & 1 deletion Topics/Development_Process/Automated_Testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,23 @@ Integration testing, in contrast to unit testing, is meant to verify that your c
- Educative: [What is incremental testing?](https://www.educative.io/edpresso/what-is-incremental-testing)
- **Sandwich/Hybrid Approach**:
- Educative: [What is the hybrid testing approach?](https://www.educative.io/answers/what-is-hybrid-integration-testing)

#### API Testing

Another important area of automated testing is API, or Application Program Interface, testing. API testing can be helpful to integrate into your automated tests as it ensures that the requests that your software sends are correctly received and in turn, you receive the right output. API testing is incredibly powerful and can be used to not only check that the right status is received but also to check that the data returned is of a particular form or has certain attributes, amongst other things. Errors returned in automated API tests can be a sign that there is an error in your code in the requests you send or that there has been a change to the API that you are accessing. Either way, these tests can be a great method of catching these issues early and resolving them before your code is deployed. In larger software systems, there are actually a number of applications of API testing beyond the two mentioned above which can include aspects such as penetration testing or security testing and a more extensive overview of these kinds of tests can be found at [https://blog.hubspot.com/website/api-testing](https://blog.hubspot.com/website/api-testing).

##### Testing in Postman

A common tool for testing APIs during the development phase is Postman, which allows you to send a variety of requests such as GET and POST requests and examine status codes and outputs. However, Postman can actually also be used to create automated API tests that can be integrated with your CI/CD pipeline. These automated tests can then be configured to run on certain actions, such as a push to main. In order to understand how to set up this automated testing, we first need to understand how testing works in Postman. To automate your API tests and integrate them into your CI/CD pipeline, Postman requires that your tests be capable of being run through the command line interface, or CLI. This, however, is not the only way that Postman supports testing; rather, there are 3 methods:

1. Manually: After setting up your Postman tests, you can run them manually through the application.
2. Scheduled: You can schedule your tests to be run at regular intervals from the Postman cloud, as determined by you (e.g. once a day, once a month, etc.).
3. Through the CLI: After setting up your tests in Postman, you can run them through a command line interface such as Terminal by generating an API key that lets you log in to Postman from your Terminal and then execute a command to run your collection. This command is provided to you by Postman.

##### Setting up Automated Testing in Postman

Having understood the 3 methods of testing in Postman, I will now delve into the last one in more detail to allow you to set up automated API testing. In the Postman app, you should navigate to "APIs" in the left sidebar. Then, create a new API by pressing the + sign and give it an informative name. Inside this API you want to create a new request for every endpoint or feature that you want to test. This can be done by right-clicking and selecting "Add request". Inside the request, add any necessary parameters or headers as you normally would inside Postman. Then, you can click on the "Tests" tab and create your own Postman tests here. To learn more about the syntax for doing so you can use the quick help feature which describes how to write these tests in more detail. To set up automated testing you can then right-click your API and select "Run collection". In the sidebar that opens on the right, you will now see the 3 options discussed above. Click on "Automate runs via CLI" (although it can be a good idea to run your tests manually once to confirm they work as a sanity check) and then press "Configure command" under the "Run on CI/CD" header. This will open a new page that allows you to select your CI/CD provider and the operating system environment for the pipeline. You can copy and paste the generated commands into your configuration file. Make sure you generate an API key and add it to your repository's secrets. For reference on how to do this in GitHub, see [https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions). You now have automated API testing set up through the Postman CLI!

##### Postman Automated Testing Involving Authorization

Note that there are some extra steps that you must take if your API requests require authorization in the form of a bearer token to be properly processed since if you hard-code the token into the request it will eventually expire and cause the automated tests to fail. This can be the case for a lot of APIs but does not mean that you can't incorporate automated API testing. Instead, what you must do is add a request inside your API collection that gets these authorization details. You can then create an environment by clicking on "Environments" in the left sidebar underneath "APIs". Create a new environment and define environment variables that will store all the necessary authorization details from your request. You can now navigate back to your API and select the environment you just created from the dropdown on the top right of your screen. Go to the "Tests" tab of the authorization request you added and add a line of code to scrape the authorization token and other details from the request's output and store it in the environment variables you created. Once again, the Postman quick help contains information on how to write this line of code under "Set an environment variable". Then, for all the other requests in the API, you can add the relevant authorization details by clicking on the "Authorization" tab and filling out the fields using your environment variables. Lastly, you must ensure that when you create your test collection you re-order the tests by dragging and dropping so that the request that collects authorization details is run first, enabling the rest of your tests to work correctly with renewed authorization details. Using refresh tokens or the form of scraping described above is incredibly beneficial for automated API testing as it ensures that you, as the developer, will not have to manually change the tokens of your requests every time you want to commit to a branch or main and have these automated tests run. Rather, you can rest assured that these tests are truly automated now and do not require any manual changes from you in order to be run.
26 changes: 26 additions & 0 deletions Topics/Product_Management/Prioritization_Techniques.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Table of Contents

### [Introduction](#introduction)
### [The MoSCoW Method](#the-moscow-method)
### [The Kano Method](#the-kano-method)
### [Which is Right For Me](#which-is-right-for-me)
### [Conclusion](#conclusion)

## Introduction

Effective prioritization lies at the core of successful product management, demanding a keen understanding of which tasks deserve priority. The art of prioritization can be the difference between crafting a polished minimum viable product and merely assembling an arbitrary assortment of features. In the realm of software development, two notable techniques stand out for their efficacy: the MoSCoW method and the Kano model. These methodologies offer invaluable frameworks for product managers, guiding teams through the intricate process of determining priorities and ensuring that essential foundations are laid before delving into additional features.

## The MoSCoW Method

Firstly, the MoSCoW method, an acronym derived from Must-haves, Should-haves, Could-haves, and Won't-haves, serves as a powerful tool in the arsenal of product managers for prioritizing tasks. This technique categorizes requirements into four distinct priority levels, helping teams streamline decision-making. Must-haves represent non-negotiable essentials, forming the backbone of a project. These would be features related to the MVP. Should-haves are crucial but not critical, offering flexibility in scheduling. Normally, tasks that the client would like, but are not included in the MVP. Could-haves encompass desirable but optional features. These could be features that the client might want, but could do without them. While Won't-haves, as the name implies, denote consciously deferred items. These either will not work for whatever reason, or do not meet the time limit. Implementing this technique is simple and involves collaborative sessions where the team collectively assigns priorities to each requirement, fostering a shared understanding of project objectives. By employing the MoSCoW method, teams gain clarity, align on priorities, and efficiently allocate resources, enhancing the likelihood of delivering a product that meets both user expectations and business needs. For more information check out this [link](https://www.techtarget.com/searchsoftwarequality/definition/MoSCoW-method).

## The Kano Method

The Kano model, developed by Professor Noriaki Kano, is a nuanced technique for product development prioritization. It categorizes features into three main types: Basic Needs, Performance Needs, and Delighters. Basic Needs are fundamental requirements that, when met, prevent dissatisfaction but don't necessarily contribute to satisfaction when exceeded. This is the perfect example of what the MVP represents, the client would expect this completed, but won’t be overly happy as its the minimum expectation. Performance Needs directly correlate satisfaction with their level of fulfillment—higher performance leads to greater satisfaction. Delighters are unexpected features that, when included, can significantly elevate user satisfaction. These include going above and beyond client expectations. Such as, implementing features that were not mentioned, but could greatly improve the product. Implementing the Kano model involves surveying users to categorize features and determine their impact on satisfaction. If this is not possible you could alternatively survey the client and try to gauge what he deems important. This method not only aids in prioritizing features based on their potential to enhance user experience but also guides teams in understanding the emotional and functional aspects that shape user preferences. By integrating the Kano model into your processes, product managers empower teams to make informed decisions that resonate with user expectations and contribute to long-term customer satisfaction. For a visual and more info check out this [link](https://www.qualtrics.com/experience-management/research/kano-analysis).

## Which Is Right For Me
Choosing between the MoSCoW method and the Kano model depends on project characteristics and priorities. The MoSCoW method is straightforward, ideal for teams requiring clear, essential features prioritization, especially for MVP development with tight deadlines or specific client needs. In contrast, the Kano model excels in projects prioritizing user satisfaction and experience. This strategy is extremely beneficial for teams seeking to determine essential minimum-threshold features for prioritization, identify performance features that should be invested early on, and recognize customer-delight features that offer the most delight for effort. The decision between these methods hinges on project goals, constraints, and the emphasis on either clear-cut prioritization or user-centric, emotionally resonant feature development.

## Conclusion

Regardless of your chosen prioritization technique, be it MoSCoW or the Kano model, both prove undeniably valuable in guiding teams toward successful project outcomes. Whether prioritizing with categorical precision or focusing on user satisfaction, these approaches empower informed decision-making, ensuring resources are allocated judiciously and products align with user expectations. Implement these techniques to help provide structure and clarity to your projects.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
Product management is an essential part of the software development lifecycle, as much a key part as the technical side to software engineering. The essence of product management is to be able to develop a new product, with a clearly defined roadmap and goals/milestones outlined from the requirements of the customer - keeping a clear view of the overall vision and strategy. This is different to the role of a project manager, who is responsible for the internal organization and operation of the development team, to make sure goals are achieved and timelines are met.

Some key features of a successful product manager:
* Able to efficiently and clearly prioritize tasks.
* [Able to efficiently and clearly prioritize tasks](./Product_Management/Prioritization_Techniques.md).
* Understand the product, people and environment that you are working with.
* Guide your development team without being authoritative.
* If you are making tradeoffs, be sure to explain and outline the opportunity cost.
Expand Down
Loading

0 comments on commit 7c06bd4

Please sign in to comment.