The analysis was done using the R Statistical language (v4.0.3; R Core Team, 2020) on Windows 10 x64, using the packages qqplotr (v0.0.4), gridExtra (v2.3), xtable (v1.8.4), rpivotTable (v0.3.0), ggplot2 (v3.3.0), tidyr (v1.1.2), dplyr (v0.8.5), rmarkdown (v2.6), sp (v1.4.5), rworldmap (v1.3.6) and knitr (v1.28).
This study investigated product management practices in general with the ISPMA (2020) reference model and then roadmapping in particular with the DEEP v1.1 maturity model (Münch, Trieflinger, and Lang, 2019). It aims at understanding how SPM practices described by in the literature fit together with Software Product Manager (SPM) practices used in real life.This study addresses following research questions:
RQ1 How mature are roadmap processes used by SPMs?
RQ1.1 Are there factors that predict the maturity level?
RQ1.2 What recommendations can be made to improve material for SPM?
And using the theoretical DEEP framework as a lens to compare the practices and industry bodies of knowledge. From the background literature review in forming these questions there are two soft hypothesis to help frame up the research approach:
This is assuming a linear, or successionist, explanation of causality (Horrocks and Fowles, 2012, section 2.3) that certain behaviours and processes lead to related outcomes, although the context that the actors are operating in - that is to say the Software Product Managers - may also have an influence on the outcome.
The factors for consideration in the research questions falls into two broad topics, the respondent and the organisation where they work:
The three forms of data collection will be: + Questionnaire around SPM practices, this will go to a wide distribution and expect in the region of 100-1000 responses based on similar survey’s results. The structure is in Appendix B (primary quantitative) + Semi-structured interview based on same subject areas but more depth and an exploratory element if any factors or concerns were missed. 5-10 interviews. The structure is in Appendix C (primary qualitative) + Theoretical literature review to track dimensions of maturity model present. About 25 sources (secondary qualitative)
The target audience for the survey is Software Product Managers, or at least those that take part in online Product Management discussions. Rather than members of any particular organisation, such as ISPMA. To get a good cross-section of the global industry it will be shared in the following locations:
The snowball sampling (Goodman 2011, Groves 2004) is to attempt to reach practitioners who use general social media but are not as active in specialist forums. A drawback here is that the initial respondents may not be typical as “influencers”, but this should be countered by the more general groups with large membership figures.
The questionnaire will be hosted in Google Forms, with the results stored in Google Sheets to allow for reproducible data analysis using R.
Section | Question | Question Type | Column | Coding | |
---|---|---|---|---|---|
Research notification | (Introductory text about the research) | ||||
I have obtained sufficient information about the study and the processing of my personal data. I have understood the information I have obtained and want to participate in the study. | Single-answer single choice (checkbox) | removed from analysis file | |||
About You | Job title | Single-answer multiple choice + Open answer | Job.title | ||
Are you a member of any of these professional bodies? | Single-answer multiple choice + Open answer | ||||
About where you work | Which industry does your organisation primarily work in? | Single-answer multiple choice | |||
What kind of Product do you work on? (Select all that apply) | Multi-answer multiple choice (checkboxes) + Open answer | Split into category indicators | if contains “B2B” product.b2b = True if contains “B2C” product.b2c = True if contains “Mobile” product.mobile =True if contains “Web” product.web = True if contains “Desktop” product.Desktop = True if contains “Service” product.Service = True | ||
Number of employees in your organisation | Single-answer multiple choice | ||||
Time to market | Single-answer multiple choice | ||||
Release heart beat | Single-answer multiple choice | ||||
Product Team Size | Single-answer multiple choice | ||||
Your primary location | Single-answer multiple choice | ||||
Our product roadmap helps us deliver our strategy | Single-answer multiple choice (Likert-type scale) | roadmap.happiness | 1 = “Highly unhappy”, 2 =“Unhappy”,3 = “Neutral”, 4 = “Happy”,5 = “Highly happy” | ||
About your role | Strategic Management | Multi-answer multiple choice (checkboxes) + Open answer | |||
Product Strategy | Multi-answer multiple choice (checkboxes) + Open answer | ||||
Product Planning | Multi-answer multiple choice (checkboxes) + Open answer | ||||
Development | Multi-answer multiple choice (checkboxes) + Open answer | ||||
Marketing | Multi-answer multiple choice (checkboxes) + Open answer | ||||
Sales & Distribution | Multi-answer multiple choice (checkboxes) + Open answer | ||||
Service & Support | Multi-answer multiple choice (checkboxes) + Open answer | ||||
I have appropriate responsibility to achieve my goals | Single-answer multiple choice (Likert-type scale) | role.happiness | 1 = “Highly unhappy”, 2 =“Unhappy”,3 = “Neutral”, 4 = “Happy”, 5 = “Highly happy” | ||
About your roadmap | Roadmap detailing - How adequate is your roadmap detailed with respect to the timeline? | Single-answer multiple choice | roadmap.detailing | clean_responses\(roadmap.detailing == "Next steps are planned ad-hoc and there is no mid- to long term planning. Only short-term planning exists." ~ 1, clean_responses\)roadmap.detailing == “All tasks are planned and worked out in detail for short-,mid- and long term.” ~ 3, clean_responses\(roadmap.detailing == "There is some correlation between time and level of detail but the detailing of the items is not done systematically." ~ 8, clean_responses\)roadmap.detailing == “There is a clear correlation between time and level of detail. The timelier items are more detailed.” ~ 15, clean_responses\(roadmap.detailing == "Short-term items are detailed, prioritized, estimated and validated. Mid-term items are under validation or being discovered. The long-term timeframe contains themes." ~ 20 | | | | Roadmap items - Which items are on your product roadmap? | Single-answer multiple choice | roadmap.item | clean_responses\)roadmap.items == “Mainly products” ~ 1, clean_responses\(roadmap.items == "Mainly products, features" ~ 3, clean_responses\)roadmap.items == “Mainly business goals, products, features” ~ 10, clean_responses\(roadmap.items == "Mainly customer and business goals, products, features and for the long-term timeframe topics (e.g., smart home)" ~ 12, clean_responses\)roadmap.items == “Mainly product vision, customer and business goals, products, features and for the long-term timeframe themes (i.e., high-level customer needs)” ~ 20, | |
Reliability - How often do you adjust your product roadmap? | Single-answer multiple choice | roadmap.reliability | clean_responses\(roadmap.reliability == "Permanent ad-hoc adjustments." ~ 1, clean_responses\)roadmap.reliability == “Frequent ad-hoc adjustments.” ~ 3, clean_responses\(roadmap.reliability == "Mainly in regular review cycles (e.g., every 3 months)" ~ 10, clean_responses\)roadmap.reliability == “Adjustments are mainly done reactively on demand.” ~ 10, clean_responses\(roadmap.reliability == "Adjustments are mainly done proactively." ~ 16 | | | | Confidence - How confident are you that the roadmap items have the expected impact on goals? | Single-answer multiple choice | roadmap.confidence | clean_responses\)roadmap.confidence == “The impacts are not considered.” ~ 1, clean_responses\(roadmap.confidence == "The impacts are mainly estimated by experts" ~ 4, clean_responses\)roadmap.confidence == “The impacts are mainly determined based on data from the past (e.g., statistics).” ~ 7, clean_responses\(roadmap.confidence == "The impacts are partly validated" ~ 10, clean_responses\)roadmap.confidence == “The impacts are systematically validated.” ~ 14 | ||
Discovery – How do you conduct product discovery? | Single-answer multiple choice | roadmap.discovery | clean_responses\(roadmap.discovery == "No discovery activities. Typically, a manager is defining the roadmap items." ~ 1, clean_responses\)roadmap.discovery == “Product roadmap items are mainly defined based on expert knowledge.” ~ 2, clean_responses\(roadmap.discovery == "Product roadmap items are mainly defined based on customer requests." ~ 4, clean_responses\)roadmap.discovery == “Several discovery activities are conducted (e.g., user research) but they are not or only loosely integrated with delivery activities.” ~ 8, clean_responses\(roadmap.discovery == "Close integration of discovery and delivery activities" ~ 10 | | | | Responsibility – Who is responsible for placing items on the roadmap? | Single-answer multiple choice | roadmap.responsibility | clean_responses\)roadmap.responsibility == “Tools are used to decide if items are placed on the roadmap (e.g., decision matrix).” ~ 1, clean_responses\(roadmap.responsibility == "Management" ~ 2, clean_responses\)roadmap.responsibility == “Specific roles (e.g., portfolio manager)” ~ 2, clean_responses\(roadmap.responsibility == "Product Management" ~ 3, clean_responses\)roadmap.responsibility == “Product Management with cross-functional product teams in liaison with key stakeholders.” ~ 4 | ||
Prioritization - How do you prioritise items? | Single-answer multiple choice | roadmap.prioritization | clean_responses\(roadmap.prioritization == "First in, first out" ~ 1, clean_responses\)roadmap.prioritization == “Opinions determine priority” ~ 2, clean_responses\(roadmap.prioritization == "Prioritization is based on the capability to deliver (e.g., low hanging fruits)" ~ 3, clean_responses\)roadmap.prioritization == “Prioritization is based on short term benefit (e.g., shareholder value).” ~ 3, clean_responses\(roadmap.prioritization == "Prioritization is done with an established process and focuses on delivering value to customers and the business." ~ 7 | | | | Extent of alignment - How do you align your stakeholders? | Single-answer multiple choice | roadmap.alignment | clean_responses\)roadmap.alignment == “No alignment. No one or only one stakeholder such as high level management has a product roadmap that is not communicated to others.” ~ 1, clean_responses\(roadmap.alignment == "Several loosely connected product roadmaps for internal stakeholders exist." ~ 2, clean_responses\)roadmap.alignment == “Several loosely connected product roadmaps for internal and external stakeholders exist.” ~ 2, clean_responses\(roadmap.alignment == "One central product roadmap exists for different internal and external stakeholders." ~ 3, clean_responses\)roadmap.alignment == “One central product roadmap exists that allows to derive different representations for different stakeholders. A process for achieving alignment and buy-in is in place.” ~ 5 | ||
Ownership of the product roadmap - Who owns the product roadmap and is accountable? | Single-answer multiple choice | roadmap.ownership | clean_responses\(roadmap.ownership == "No owner defined" ~ 1, clean_responses\)roadmap.ownership == “Managers” ~ 2, clean_responses\(roadmap.ownership == "Ownership is shared between multiple roles" ~ 3, clean_responses\)roadmap.ownership == “Strategy or portfolio planning” ~ 3, clean_responses$roadmap.ownership == “Product management or product teams” ~ 4 | ||
Tools - Which tool(s) do you use to manage your roadmap process? | Multi-answer multiple choice (checkboxes) + Open answer | roadmap.tools | |||
Finally | Where do you look for information about Software Product Management? (tick all that apply) | Multi-answer multiple choice (checkboxes) + Open answer | info.sources | ||
Is there anything else you’d like to say about product management, strategy, and innovation in your working life? (the answers to this question will not be in the publicly available data set, and only published in aggregate analysis or quoted in an anonymised form) | Open answer | removed from analysis file |
What is the make up of the organisations that the respondents are working in?
org.industry | org.employees | |
---|---|---|
Software / IT :38 | < 10 :13 | |
Banking / Finance :12 | 10-49 :19 | |
Private / Consumer : 6 | 50-249 :13 | |
Retail / Wholesale : 3 | 250-4499:16 | |
Medical / Health Care: 2 | >= 4500 :10 | |
aquamarine : 1 | ||
(Other) : 9 |
org.TTM | org.releases | org.prodteamsize | |
---|---|---|---|
Less than 4.5 months :28 | More than 12 releases a year :28 | < 4 :25 | |
4.5 months to < 9 months :18 | 5-12 releases a year :19 | 4-9 :21 | |
9 Months to < 18 months :12 | 3-4 releases a year :11 | 10-19 :14 | |
More than 18 months : 5 | About 2 releases per year : 5 | 20-49 : 5 | |
Don’t know and cannot estimate: 8 | About 1 release per year : 3 | 50-249: 3 | |
Less than one release per year: 0 | > 250 : 3 | ||
No release so far : 5 |
And where are they located?
%>%
clean_responses group_by(org.location) %>%
summarise(n = n()) %>%
kable()
org.location | n |
---|---|
Antigua and Barbuda | 1 |
Brazil | 1 |
Canada | 2 |
Cyprus | 1 |
Germany | 1 |
Greece | 1 |
India | 7 |
Ireland | 2 |
Japan | 2 |
Mauritius | 1 |
Mexico | 1 |
Netherlands | 2 |
New Zealand | 1 |
Nigeria | 2 |
Norway | 4 |
Pakistan | 1 |
Poland | 1 |
Portugal | 2 |
Qatar | 1 |
Romania | 1 |
Singapore | 1 |
Spain | 1 |
Sri Lanka | 1 |
Sweden | 2 |
Turkey | 1 |
Ukraine | 1 |
United Arab Emirates | 1 |
United Kingdom | 19 |
United States | 8 |
Vietnam | 1 |
ggplot(clean_responses, aes(x=org.employees, y=org.prodteamsize)) +
geom_jitter(shape=16, position=position_jitter(0.2)) +
facet_wrap(~org.location)
How well did the respondents view their roadmap process and level of responsibility in the role?
Job.title | n | roadmap.happiness | role.happiness |
---|---|---|---|
Associate/Junior Product Manager | 5 | 3.6 | |
CEO | 6 | 3.5 | 4.5 |
Continuous improvement specialist | 1 | 2.0 | 3.0 |
CTO | 5 | 4.8 | 5.0 |
Director of Product Design | 1 | 5.0 | 4.0 |
Engineering Manager | 2 | 4.0 | 5.0 |
FP&A | 1 | 4.0 | 5.0 |
Freelancer ( Products & Growth ) | 1 | 4.0 | 4.0 |
Head of Product/VP/Director/CPO | 11 | 3.5 | 4.2 |
Lead Product Manager | 6 | 4.3 | 4.3 |
Operational Manager | 2 | 5.0 | 4.0 |
Product Consultant | 1 | 4.0 | 4.0 |
Product Manager | 15 | 3.5 | 3.8 |
Product Marketing Manager | 1 | 3.0 | 5.0 |
Senior Product Manager | 12 | 3.7 | 3.8 |
Senior Product Marketing Manager | 1 | 5.0 | 5.0 |
Next we asked which activities we part of the respondent’s responsibilities based on the ISPMA’s v1.3 of the Framework
All tables number of respondents who answered yes to the specified activities.
%>%
practices select(Job.title, sm.corpstrat, sm.portfoliomgmt, sm.innovationmgmt, sm.resmgmt, sm.marketanalysis, sm.prodanalysis) %>%
group_by(Job.title) %>%
summarise("n" = n(),
"Corporate Strategy" = sum(sm.corpstrat),
"Portfolio Management" = sum(sm.portfoliomgmt),
"Innovation Management" = sum(sm.innovationmgmt),
"Resource Management" = sum(sm.resmgmt),
"Market Analysis" = sum(sm.marketanalysis),
"Product Analysis" = sum(sm.prodanalysis)) %>%
kable()
Job.title | n | Corporate Strategy | Portfolio Management | Innovation Management | Resource Management | Market Analysis | Product Analysis |
---|---|---|---|---|---|---|---|
Associate/Junior Product Manager | 5 | 1 | 0 | 1 | 3 | 1 | 2 |
CEO | 6 | 1 | 2 | 4 | 2 | 4 | 4 |
Continuous improvement specialist | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
CTO | 5 | 3 | 2 | 5 | 4 | 2 | 2 |
Director of Product Design | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
Engineering Manager | 2 | 1 | 0 | 0 | 1 | 0 | 2 |
FP&A | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
Freelancer ( Products & Growth ) | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
Head of Product/VP/Director/CPO | 11 | 3 | 5 | 7 | 6 | 6 | 11 |
Lead Product Manager | 6 | 3 | 4 | 5 | 3 | 4 | 4 |
Operational Manager | 2 | 2 | 0 | 0 | 2 | 0 | 2 |
Product Consultant | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
Product Manager | 15 | 9 | 7 | 10 | 9 | 11 | 13 |
Product Marketing Manager | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
Senior Product Manager | 12 | 4 | 5 | 6 | 6 | 5 | 8 |
Senior Product Marketing Manager | 1 | 1 | 0 | 0 | 0 | 1 | 1 |
%>%
practices select(roadmap.mat_level, ps.position, ps.deliverymodel, ps.sourcing, ps.bizcase, ps.pricing, ps.ecosystem, ps.legalandpr, ps.perfandrisk) %>%
group_by(roadmap.mat_level) %>%
summarise("n" = n(),
"Positioning and product definition" = sum(ps.position),
"Delivery model & Service strategy" = sum(ps.deliverymodel),
"Sourcing" = sum(ps.sourcing),
"Business case and costing" = sum(ps.bizcase),
"Pricing" = sum(ps.pricing),
"Ecosystem management" = sum(ps.ecosystem),
"Legal & PR management" = sum(ps.legalandpr),
"Performance & Risk management" = sum(ps.perfandrisk)) %>%
kable()
roadmap.mat_level | n | Positioning and product definition | Delivery model & Service strategy | Sourcing | Business case and costing | Pricing | Ecosystem management | Legal & PR management | Performance & Risk management |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 2 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 |
3 | 25 | 15 | 13 | 8 | 12 | 5 | 5 | 3 | 11 |
4 | 35 | 28 | 20 | 5 | 28 | 13 | 12 | 12 | 18 |
5 | 8 | 6 | 5 | 1 | 5 | 5 | 2 | 2 | 6 |
%>%
practices select(roadmap.mat_level, pp.lifecycle, pp.roadmapping, pp.releaseplanning, pp.prodRE) %>%
group_by(roadmap.mat_level) %>%
summarise("n" = n(),
"Product life-cycle management" = sum(pp.lifecycle),
"Roadmapping" = sum(pp.roadmapping),
"Release planning" = sum(pp.releaseplanning),
"Product requirements engineering" = sum(pp.prodRE)) %>%
kable()
roadmap.mat_level | n | Product life-cycle management | Roadmapping | Release planning | Product requirements engineering |
---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 0 |
2 | 2 | 2 | 2 | 2 | 1 |
3 | 25 | 17 | 19 | 16 | 14 |
4 | 35 | 24 | 32 | 24 | 24 |
5 | 8 | 7 | 6 | 6 | 7 |
%>%
practices select(roadmap.mat_level, dev.engmgmt,dev.projmgmt, dev.projRE, dev.ux, dev.qual ) %>%
group_by(roadmap.mat_level) %>%
summarise("n" = n(),
"Engineering Management" = sum(dev.engmgmt),
"Project Management" = sum(dev.projmgmt),
"Project requirements engineering" = sum(dev.projRE),
"User experience design" = sum(dev.ux),
"Quality Management" = sum(dev.qual)) %>%
kable()
roadmap.mat_level | n | Engineering Management | Project Management | Project requirements engineering | User experience design | Quality Management |
---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 0 | 1 |
2 | 2 | 1 | 0 | 0 | 0 | 1 |
3 | 25 | 9 | 16 | 9 | 18 | 13 |
4 | 35 | 9 | 22 | 16 | 18 | 12 |
5 | 8 | 4 | 6 | 3 | 4 | 3 |
%>%
practices select(roadmap.mat_level, mar.plan,mar.cust, mar.oppomgmt, mar.mix, mar.gtm,mar.ops ) %>%
group_by(roadmap.mat_level) %>%
summarise("n" = n(),
"Marketing planning" = sum(mar.plan),
"Customer analysis" = sum(mar.cust),
"Opportunity Management" = sum(mar.oppomgmt),
"Marketing mix optimisation" = sum(mar.mix),
"Product launches (GTM)" = sum(mar.gtm),
"Operational marketing" = sum(mar.ops)) %>%
kable()
roadmap.mat_level | n | Marketing planning | Customer analysis | Opportunity Management | Marketing mix optimisation | Product launches (GTM) | Operational marketing |
---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
2 | 2 | 1 | 1 | 1 | 0 | 0 | 0 |
3 | 25 | 8 | 16 | 8 | 4 | 0 | 6 |
4 | 35 | 12 | 21 | 12 | 8 | 0 | 5 |
5 | 8 | 2 | 5 | 1 | 0 | 0 | 0 |
%>%
practices select(roadmap.mat_level, sd.salesplan, sd.chanelprep, sd.crm, sd.salesops, sd.opdistro ) %>%
group_by(roadmap.mat_level) %>%
summarise("n" = n(),
"Sales planning" = sum(sd.salesplan),
"Channel prep" = sum(sd.chanelprep),
"CRM" = sum(sd.crm),
"Operational sales" = sum(sd.salesops),
"Operational distribution" = sum(sd.opdistro)) %>%
kable()
roadmap.mat_level | n | Sales planning | Channel prep | CRM | Operational sales | Operational distribution |
---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 0 | 0 | 0 |
2 | 2 | 2 | 1 | 1 | 0 | 0 |
3 | 25 | 3 | 6 | 12 | 3 | 4 |
4 | 35 | 8 | 9 | 12 | 5 | 2 |
5 | 8 | 1 | 1 | 5 | 0 | 0 |
%>%
practices select(roadmap.mat_level, ss.serviceplan, ss.serviceprov, ss.techsupport, ss.marsupport, ss.salessupport) %>%
group_by(roadmap.mat_level) %>%
summarise("n" = n(),
"Service planning and preparation" = sum(ss.serviceplan),
"Service provisioning" = sum(ss.serviceprov),
"Technical support" = sum(ss.techsupport),
"Marketing support" = sum(ss.marsupport),
"Sales support" = sum(ss.salessupport)) %>%
kable()
roadmap.mat_level | n | Service planning and preparation | Service provisioning | Technical support | Marketing support | Sales support |
---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 1 | 1 |
2 | 2 | 0 | 1 | 0 | 0 | 1 |
3 | 25 | 14 | 8 | 7 | 5 | 4 |
4 | 35 | 9 | 4 | 19 | 12 | 15 |
5 | 8 | 4 | 2 | 3 | 2 | 1 |
Looking at the transmission of theory to practice, where do people go to get answers? Which communities are they a part of?
Where do people go to get their information?
Job.title | n | Events and conferences | Blogs | Books | Online Communities | Professional Bodies | Professional Certification | Professional Training | Tool Vendor material | |
---|---|---|---|---|---|---|---|---|---|---|
Associate/Junior Product Manager | 5 | 2 | 3 | 1 | 2 | 0 | 2 | 1 | 0 | 0 |
CEO | 6 | 3 | 2 | 1 | 3 | 1 | 0 | 1 | 1 | 0 |
Continuous improvement specialist | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
CTO | 5 | 3 | 3 | 3 | 3 | 1 | 1 | 1 | 2 | 0 |
Director of Product Design | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Engineering Manager | 2 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
FP&A | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
Freelancer ( Products & Growth ) | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
Head of Product/VP/Director/CPO | 11 | 2 | 9 | 5 | 9 | 0 | 0 | 0 | 1 | 0 |
Lead Product Manager | 6 | 4 | 5 | 4 | 3 | 0 | 0 | 0 | 2 | 0 |
Operational Manager | 2 | 2 | 0 | 0 | 2 | 0 | 2 | 0 | 0 | 0 |
Product Consultant | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
Product Manager | 15 | 6 | 13 | 10 | 12 | 1 | 1 | 4 | 5 | 0 |
Product Marketing Manager | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Senior Product Manager | 12 | 7 | 8 | 10 | 9 | 1 | 1 | 0 | 5 | 0 |
Senior Product Marketing Manager | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 |
Which professional bodies are they members of?
Job.title | n | ACM | AIPMM | BCS | ISPMA | PDMA | MTP | WiP | None |
---|---|---|---|---|---|---|---|---|---|
Associate/Junior Product Manager | 5 | 0 | 0 | 0 | 0 | 0 | 3 | 0 | 2 |
CEO | 6 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 4 |
Continuous improvement specialist | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
CTO | 5 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 4 |
Director of Product Design | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Engineering Manager | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
FP&A | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Freelancer ( Products & Growth ) | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Head of Product/VP/Director/CPO | 11 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 10 |
Lead Product Manager | 6 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 5 |
Operational Manager | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
Product Consultant | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Product Manager | 15 | 0 | 0 | 1 | 0 | 0 | 3 | 1 | 11 |
Product Marketing Manager | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Senior Product Manager | 12 | 0 | 0 | 0 | 0 | 0 | 2 | 2 | 9 |
Senior Product Marketing Manager | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
There were a spread of responses, but generally skewing to the right. In the charts below the least “mature” practices are to the left and the highest scoring, mature processes to the right. (According to DEEP Product Maturity Model V1.1 By Munch, Trieflinger and Lang.)
How mature were the roadmap processes by job title of respondent?
Job.title | n | roadmap.DEEPScore | roadmap.mat_level |
---|---|---|---|
Associate/Junior Product Manager | 5 | 47 | 3.0 |
CEO | 6 | 50 | 3.2 |
Continuous improvement specialist | 1 | 62 | 4.0 |
CTO | 5 | 60 | 3.6 |
Director of Product Design | 1 | 64 | 4.0 |
Engineering Manager | 2 | 65 | 4.0 |
FP&A | 1 | 43 | 3.0 |
Freelancer ( Products & Growth ) | 1 | 69 | 4.0 |
Head of Product/VP/Director/CPO | 11 | 66 | 3.8 |
Lead Product Manager | 6 | 78 | 4.3 |
Operational Manager | 2 | 32 | 3.0 |
Product Consultant | 1 | 80 | 4.0 |
Product Manager | 15 | 61 | 3.8 |
Product Marketing Manager | 1 | 61 | 4.0 |
Senior Product Manager | 12 | 56 | 3.5 |
Senior Product Marketing Manager | 1 | 68 | 4.0 |
Distribution of DEEP scores.
cat("All responses")
All responses
xtable(t(summary(clean_responses[,"roadmap.DEEPScore"])))
Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
---|---|---|---|---|---|
9 | 48 | 61 | 60 | 74 | 94 |
cat("Product responses")
Product responses
xtable(t(summary(prod_responses[,"roadmap.DEEPScore"])))
Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
---|---|---|---|---|---|
9 | 52 | 63 | 62 | 77 | 92 |
cat("Non-product responses")
Non-product responses
xtable(t(summary(nonprod_responses[,"roadmap.DEEPScore"])))
Min. | 1st Qu. | Median | Mean | 3rd Qu. | Max. |
---|---|---|---|---|---|
20 | 36 | 52 | 53 | 62 | 94 |
What kind of tools did the respondents use?
Percentage of tools types used
%>%
tools select(custom , office , product , project ) %>%
summarise("Custom Tools" = sum(custom)/n()*100,
"Office Tools" = sum(office)/n()*100,
"Specialist Product Tools" = sum(product)/n()*100,
"Project management tools" = sum(project)/n()*100) %>%
kable(digits = 2, title = "Percentage of tools types used")
Custom Tools | Office Tools | Specialist Product Tools | Project management tools |
---|---|---|---|
5.6 | 42 | 24 | 46 |
cat("count of tools broken out by category")
count of tools broken out by category
<- data.frame(category = "Custom",
toolsBreakdown tool = "custom",
count = sum(tools[,"custom"]))
<- rbind(toolsBreakdown,data.frame(category = "Project",
toolsBreakdown tool = "ATLASSIAN: Jira/Confluence",
count = length(grep("Jira", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Office",
toolsBreakdown tool = "Google Sheets",
count = length(grep("sheets", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Office",
toolsBreakdown tool = "Microsoft Excel",
count = length(grep("Excel", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Office",
toolsBreakdown tool = "Google Slides",
count = length(grep("Google Slides", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Office",
toolsBreakdown tool = "MICROSOFT: PowerPoint",
count = length(grep("PowerPoint", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Project",
toolsBreakdown tool = "MICROSOFT: Project Server",
count = length(grep("MICROSOFT: Project Server", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Project",
toolsBreakdown tool = "taskstreamer",
count = length(grep("taskstreamer", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Project",
toolsBreakdown tool = "ServiceNow",
count = length(grep("ServiceNowr", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Project",
toolsBreakdown tool = "Planview",
count = length(grep("Planview", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Project",
toolsBreakdown tool = "Trello",
count = length(grep("Trello", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Product",
toolsBreakdown tool = "ITONICS: Roadmapping-Engine",
count = length(grep("roadmap", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Product",
toolsBreakdown tool = "AHA!",
count = length(grep("AHA", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Product",
toolsBreakdown tool = "Roadmunk",
count = length(grep("Roadmunk", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Product",
toolsBreakdown tool = "ProductPlan",
count = length(grep("ProductPlan", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Product",
toolsBreakdown tool = "Productboard",
count = length(grep("Productboard", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Product",
toolsBreakdown tool = "Pendo",
count = length(grep("Pendo", tools[,7], ignore.case = TRUE))))
<- rbind(toolsBreakdown,data.frame(category = "Product",
toolsBreakdown tool = "ProdPad",
count = length(grep("ProdPad", tools[,7], ignore.case = TRUE))))
%>%
toolsBreakdown group_by(category, tool, count) %>%
arrange(category, tool, desc(count)) %>%
kable
category | tool | count |
---|---|---|
Custom | custom | 4 |
Office | Google Sheets | 8 |
Office | Google Slides | 2 |
Office | Microsoft Excel | 23 |
Office | MICROSOFT: PowerPoint | 13 |
Product | AHA! | 2 |
Product | ITONICS: Roadmapping-Engine | 1 |
Product | Pendo | 0 |
Product | ProdPad | 8 |
Product | Productboard | 4 |
Product | ProductPlan | 2 |
Product | Roadmunk | 1 |
Project | ATLASSIAN: Jira/Confluence | 30 |
Project | MICROSOFT: Project Server | 4 |
Project | Planview | 0 |
Project | ServiceNow | 0 |
Project | taskstreamer | 1 |
Project | Trello | 1 |
Percentage of tools types used
Custom Tools | Office Tools | Specialist Product Tools | Project management tools |
---|---|---|---|
3.7 | 39 | 22 | 50 |
popularity of tool combinations
roadmap.tools | n |
---|---|
ATLASSIAN: Jira/Confluence | 13 |
4 | |
PRODPAD: ProdPad | 4 |
ATLASSIAN: Jira/Confluence;MICROSOFT: Excel | 3 |
ATLASSIAN: Jira/Confluence;MICROSOFT: Excel;MICROSOFT: PowerPoint | 3 |
MICROSOFT: Excel | 3 |
ATLASSIAN: Jira/Confluence;GOOGLE: Google Sheets | 2 |
MICROSOFT: Excel;MICROSOFT: PowerPoint | 2 |
AHA LABS: AHA!;PRODUCTBOARD: Productboard | 1 |
ATLASSIAN: Jira/Confluence;Google sheets | 1 |
ATLASSIAN: Jira/Confluence;GOOGLE: Google Sheets;PRODUCTBOARD: Productboard | 1 |
ATLASSIAN: Jira/Confluence;PRODPAD: ProdPad | 1 |
Google Slides | 1 |
Google Slides & Google Sheets | 1 |
GOOGLE: Google Sheets | 1 |
GOOGLE: Google Sheets;Clubhouse | 1 |
in house solution | 1 |
ITONICS: Roadmapping-Engine | 1 |
JIRA | 1 |
MICROSOFT: Excel;MICROSOFT: PowerPoint;MICROSOFT: Project Server | 1 |
MICROSOFT: Excel;MICROSOFT: PowerPoint;PRODUCTPLAN: ProductPlan | 1 |
MICROSOFT: Excel;MICROSOFT: Project Server | 1 |
MICROSOFT: Excel;PRODPAD: ProdPad | 1 |
Own platform | 1 |
PRODUCTBOARD: Productboard | 1 |
Roadmunk | 1 |
ServiceNow | 1 |
Trello, Wrike | 1 |
Did perception of roadmap process effectiveness correlate to a higher maturity score?
Call: lm(formula = roadmap.happiness ~ roadmap.DEEPScore, data = prod_responses)
Residuals: Min 1Q Median 3Q Max -2.5075 -0.6308 0.0314 0.6473 1.2995
Coefficients: Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.37066 0.47436 5.00 6.9e-06 * roadmap.DEEPScore 0.02145 0.00734 2.92 0.0051 — Signif. codes: 0 ‘’ 0.001 ’’ 0.01 ’’ 0.05 ‘.’ 0.1 ’ ’ 1
Residual standard error: 0.95 on 52 degrees of freedom Multiple R-squared: 0.141, Adjusted R-squared: 0.125 F-statistic: 8.54 on 1 and 52 DF, p-value: 0.00513
Df | Sum Sq | Mean Sq | F value | Pr(>F) | |
---|---|---|---|---|---|
roadmap.DEEPScore | 1 | 7.8 | 7.79 | 8.5 | 0.01 |
Residuals | 52 | 47.5 | 0.91 |
> `geom_smooth()` using formula 'y ~ x'
> `geom_smooth()` using formula 'y ~ x'
> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
> Warning: Removed 54 rows containing missing values (geom_text).
> Warning: Removed 1 rows containing missing values (geom_point).