---
title: "Roadmap"
description: >
  The goals and roadmap for DevLake
sidebar_position: 3
---

## Goals

DevLake has joined the Apache Incubator and is aiming to become a top-level project. To achieve this goal, the Apache DevLake (Incubating) community will continue to make efforts in helping development teams to analyze and improve their engineering productivity. In this roadmap, we have summarized three major goals followed by the feature breakdown to invite the broader community to join us and grow together.

1. As a dev data analysis application, discover and implement 3 (or even more!) usage scenarios:
   - A collection of metrics to track the contribution, quality and growth of open-source projects
   - DORA metrics for DevOps engineers
   - To be decided ([let us know](https://join.slack.com/t/devlake-io/shared_invite/zt-17b6vuvps-x98pqseoUagM7EAmKC82xQ) if you have any suggestions!)
2. As dev data infrastructure, provide robust data collection modules, customizable data models, and data extensibility.
3. Design better user experience for end-users and contributors.

## Feature Breakdown

Apache DevLake is currently under rapid development. You are more than welcome to use the following table to explore your intereted features and make contributions. We deeply appreciate the collective effort of our community to make this project possible!

| Category | Features |
| -------- | -------- |
| More data sources across different DevOps domains (Goal No.1 & 2). See [existing data sources](/docs/Overview/SupportedDataSources.md) | Issue Tracking: <ul><li>Jira (cloud) [#886 (Done)](https://github.com/apache/incubator-devlake/issues/886)</li><li>Jira (server/data center) [#1687 (Done)](https://github.com/apache/incubator-devlake/issues/1687)</li><li>GitHub Issues [#407 (Done)](https://github.com/apache/incubator-devlake/issues/407)</li><li>GitLab Issues [#715 (Done)](https://github.com/apache/incubator-devlake/issues/715)</li><li>TAPD [#560 (Beta)](https://github.com/apache/incubator-devlake/issues/560)</li><li>Zentao [#2961 (Beta)](https://github.com/apache/incubator-devlake/issues/2961)</li><li>Teambition [#1882 (Beta)](https://github.com/apache/incubator-devlake/issues/1882)</li><li>Trello [#1881 (Pending)](https://github.com/apache/incubator-devlake/issues/1881)</li><li>Ones [#1884 (Pending)](https://github.com/apache/incubator-devlake/issues/1884)</li></ul> Source Code Management: <ul><li>GitHub (Done)</li><li>GitLab (Done)</li><li>BitBucket [#2100 (Supported from v0.16)](https://github.com/apache/incubator-devlake/issues/2100)</li><li>Azure DevOps [#2604 (Supported from v0.16)](https://github.com/apache/incubator-devlake/issues/2604)</li><li>Gitee [#1883 (WIP)](https://github.com/apache/incubator-devlake/issues/1883)</li><li>Coder [#3447 (Pending)](https://github.com/apache/incubator-devlake/issues/3447)</li></ul> Code Review: <ul><li>GitHub PRs (Done)</li><li>GitLab MRs (Done)</li><li>BitBucket PRs [#2100 (Supported from v0.16)](https://github.com/apache/incubator-devlake/issues/2100)</li><li>Azure DevOps PRs [#2604 (Supported from v0.16)](https://github.com/apache/incubator-devlake/issues/2604)</li><li>Phabricator (Pending)</li><li>Gerrit (Pending)</li></ul> CI/CD: <ul><li>GitHub Action [#2584 (Done)](https://github.com/apache/incubator-devlake/issues/2584)</li><li>GitLab CI [#2583 (Done)](https://github.com/apache/incubator-devlake/issues/2583)</li><li>Jenkins [#2637 (Done)](https://github.com/apache/incubator-devlake/issues/2637)</li><li>Bamboo CI [#3322 (WIP)](https://github.com/apache/incubator-devlake/issues/3322)</li><li>Argo CI [#2585 (Pending)](https://github.com/apache/incubator-devlake/issues/2584)</li><li>Argo CD [#4221 (Pending)](https://github.com/apache/incubator-devlake/issues/4221)</li><li>TeamCity (Pending)</li></ul>Code Quality: <ul><li>SonarQube [#2305 (Supported from v0.16)](https://github.com/apache/incubator-devlake/issues/2305)</li><li>Coverity (Pending)</li></ul> Incident Management: <ul><li>PagerDuty [#3498 (WIP)](https://github.com/apache/incubator-devlake/issues/3498)</li><li>ServiceNow [#4234 (Planned)](https://github.com/apache/incubator-devlake/issues/4234)</li></ul> QA: <ul><li>Selenium (Pending)</li><li>Junit (Pending)</li><li>JMeter (Pending)</li><li>Cucumber Test (Pending)</li></ul> Documentation: <ul><li>Google Docs (Pending)</li><li>Lark Docs (Pending)</li><li>Tencent Docs (Pending)</li></ul> Calendar: <ul><li>Lark Calendar [#261 (Done)](https://github.com/apache/incubator-devlake/issues/261)</li><li>Google Calendar (Pending)</li><li>Zoom Calendar (Pending)</li><li>Tencent Calendar (Pending)</li></ul> OSS Community Metrics: <ul><li>GitHub stars, clones, watches [#3721 (WIP)](https://github.com/apache/incubator-devlake/issues/3721)</li></ul> Instant Messaging: <ul><li>Slack (Pending)</li><li>Discord (Pending)</li><li>Lark messages (Pending)</li></ul> |
| Improved data collection, [data models](../DataModels/DevLakeDomainLayerSchema.md) and data extensibility (Goal No.2) | Data Collection: <br/> <ul><li>Complete the logging system</li><li>Implement a good error handling mechanism during data collection</li></ul> Data Models:<ul><li>Introduce DBT to allow users to create and modify the domain layer schema. [#1479 (Done)](https://github.com/apache/incubator-devlake/issues/1479)</li><li>Design the data models for 6 new domains, please refers to the data models of the tools under each domain (see the cell above):<ul><li>Code Quality (WIP)</li><li>Testing</li><li>Calendar</li><li>Documentation</li><li>OSS Community Metrics (WIP)</li><li>Instant messaging</li></ul></li><li>Polish the data models for [existing domains](../DataModels/DevLakeDomainLayerSchema.md): Issue/Task Management, Source Code Management, Code Review and CI/CD.</li></ul> Data Extensibility: <ul><li>Enhance the performance of data application under large-scaled usage scenarios</li><li>Support OLAP databases for more flexible data storage options</li></ul>|
| Better user experience (Goal No.3)                                                                                    | For new users: <ul><li> Iterate on a clearer step-by-step guide to improve the pre-configuration experience.</li><li>Provide a new Config UI to reduce frictions for data configuration [#1700 (Done)](https://github.com/apache/incubator-devlake/issues/1700)</li><li> Showcase dashboard live demos to let users explore and learn about the dashboards. [#1784 (Done)](https://github.com/apache/incubator-devlake/issues/1784)</li></ul>For returning users: <ul><li>Provide detailed guides to help users customize Grafana dashboards.</li><li>Work on the documentation for advanced features in the Config UI, such as the usage of Advanced Mode and replacements of old auth tokens for data connections.</li></ul>For contributors:<ul><li>Add more guide to set up DevLake in different operating system.</li><li>Provide clearer docs for contributors to get on board easier.</li><li>Add Swagger to document API [#292 (Done)](https://github.com/apache/incubator-devlake/issues/292)</li><li>More docs about raw/tool/domain data models</li></ul>                                                                                                                                
                                                                                                                           
## How to Influence the Roadmap

A roadmap is only useful when it captures real user needs. We are glad to hear from you if you have specific use cases, feedback, or ideas. You can submit an issue to let us know!
Also, if you plan to work (or are already working) on a new or existing feature, tell us, so that we can update the roadmap accordingly. We are happy to share knowledge and context to help your feature land successfully.
<br/><br/><br/>
