template.html.haml 6.07 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
---
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"
description: "To convey the state of our GitLab feature set and be transparent, we have developed a maturity framework for categories, application types, and stages."
canonical_path: "/direction/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 that considers both adoption and user experience. 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-processes/#product-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/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
                            - if category.new_maturity
                              %a.new-maturity{ href: "##{category.key}"}
                                = partial "/images/maturity/#{maturity(category, Date.today)}.svg"
                            - else 
                              %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 })

    %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