--- layout: default manual_cookiebot: true extra_css: - home.css - maturity.css extra_js: - libs/on-scroll.js - all-clickable.js - libs/moment.min.js - maturity.js title: "Maturity" --- .container %p{style: "padding-top: 15px"} GitLab has a = succeed "," do = link_to "broad scope and vision", "/direction/" and we are constantly = link_to "iterating", "/handbook/values/#iteration" on existing and new features. Some stages and features are more mature than others. To convey the state of our feature set and be = succeed "," do = link_to "transparent", "/handbook/values/#transparency" we have developed a maturity framework for categories, application types, and stages. Contributions from our community are an essential part of achieving this overall vision for GitLab. %a.scroll-anchor{id: "legend"} %table.legend-table %tr %td{style: "width: 50%"} = link_to "Category", "#category-maturity" and = link_to "Application Type", "#application-type-maturity" maturity: = partial "includes/product/maturity_legend" %td{style: "width: 50%"} %p = link_to "Stage", "#maturity-by-stage" lifecycle: %ul - for i in 0..7 %li = lifecycle(i) %p = link_to "Investment Thesis", "/handbook/product/product-management/#investment-thesis" horizons. .container %section.maturity-tables %h2#category-maturity Category maturity %p GitLab features are grouped into a = succeed "," do = link_to "hierarchy", "/handbook/product/categories/#hierarchy" representing increasingly higher level capabilities. Features make up a broader Category, which then belong to a DevOps Stage. Stages are assigned a yearly = succeed "," do = link_to "lifecycle", "#legend" and categories a = succeed "." do = link_to "maturity", "#legend" .sdlc-container.position-relative#maturity-no-padding .sdlc-table - Gitlab::Homepage::Stage.all!.select{|stage| stage.marketing}.each do |stage| .sdlc-column .stage-container %a{href: "##{stage.key}"} = partial "/includes/icons/sdlc-icons/#{stage.key}.svg" %a{href: "##{stage.key}"} %p #{stage.display_name} .solutions-container - active_categories = active_categories(stage.categories) - upcoming_categories = planned_categories(stage.categories) - if active_categories.length >= 1 .current-categories %p.font-bold Since #{stage.established} GitLab added: .stage-column .category-list - active_categories.each do |category| .category .category-cell %a{ href: "##{category.key}"} = partial "/images/maturity/#{maturity(category, Date.today)}.svg" .category-cell - url = category.best_link %a{ href: "#{url}" } #{category.name} .future-categories %p.font-bold Future %br - if upcoming_categories.length >= 1 = succeed ':' do %a.font-bold{ href: "#{stage.direction}"} direction - else %a.font-bold{ href: "#{stage.direction}"} direction .stage-column .category-list - upcoming_categories.each do |category| .category .category-cell %a{ href: "##{category.key}"} = partial "/images/maturity/#{maturity(category, Date.today)}.svg" .category-cell - url = category.best_link %a{ href: "#{url}" } #{category.name} %h2#maturity-plan Planned category maturity %p The maturity framework makes it easy to visualize where GitLab is making investments, and resulting category maturity improvements. As part of the %a{href: "https://about.gitlab.com/handbook/product/#planning-and-strategy"} planning process for each category, the set of features required and expected date to reach the next maturity is maintained. It can also be used to compare historical to planned velocity. A reduction in velocity is %a{href: "https://about.gitlab.com/handbook/leadership/biggest-risks/#loss-of-velocity"} one of our biggest risks. %p Below is a chart which illustrates the aggregate current and future progression of all categories. .drop-shadow .maturity-chart = maturity_chart() %h3#maturity-by-stage DevOps stage maturity - stages = data.stages.stages.select { |stageKey, stage| stage.marketing } = partial('includes/maturity/stage-details.html.haml', locals: { stages: stages }) %h3#non-devops-maturity-by-stage Non-DevOps stage maturity - stages = data.stages.stages.select { |stageKey, stage| !stage.marketing } = partial('includes/maturity/stage-details.html.haml', locals: { stages: stages }) %h2#application-type-maturity Application Type Maturity %p = link_to "Application types", "/handbook/product/application-types" represent different types of projects that people create and manage on GitLab. Much like our product categories, not all application types are at the same level of maturity. See below for where each application type currently stands and when they will reach higher = succeed "." do = link_to "maturity levels", "#legend" .drop-shadow %table.stage-table %tbody %tr %td Application Type %td.text-center Today %td.text-center Q1 %td.text-center Q2 %td.text-center Q3 %td.text-center Q4 %tr %td %i Date %td.text-center %i %span.today %td.text-center %i 2020-04-30 %td.text-center %i 2020-07-31 %td.text-center %i 2020-10-31 %td.text-center %i 2021-01-31 - data.application_types.each do |apptypeKey, apptype| %tr %td - if apptype.direction %a{href: "#{apptype.direction}"} #{apptype.name} - else = apptype.name %td.maturity-cell = partial "/images/maturity/#{maturity(apptype, Date.today)}.svg" %td.maturity-cell = partial "/images/maturity/#{maturity(apptype, Date.new(2020,04,30))}.svg" %td.maturity-cell = partial "/images/maturity/#{maturity(apptype, Date.new(2020,07,31))}.svg" %td.maturity-cell = partial "/images/maturity/#{maturity(apptype, Date.new(2020,10,31))}.svg" %td.maturity-cell = partial "/images/maturity/#{maturity(apptype, Date.new(2021,01,31))}.svg" %h2 Changes %p Learn how to make changes to categories and their maturity on our = succeed "." do %a{ href: "../../handbook/marketing/website/#working-with-category-maturity"} website handbook page