引入子问题:增强GitHub上的问题管理
最近我们推出了子问题功能,该功能旨在解决复杂的问题管理场景。这篇博客文章深入探讨了构建子问题的历程、我们在此过程中的学习收获、如何实现子问题,以及使用子问题来构建自身功能的好处。
什么是子问题?
子问题是将较大问题分解为更小、更易管理任务的一种方式。通过此功能,您现在可以在单个问题中创建分层列表,从而更轻松地跟踪进度和依赖关系。通过提供清晰的结构,子问题帮助团队保持组织有序并专注于目标。
例如,我经常意识到一批工作需要多个步骤,比如在不同的代码库中实现代码。将此任务分解为离散的子问题使得跟踪进度更容易,并更清晰地定义我需要完成的工作。在实践中,我们注意到这有助于使关联的拉取请求更加简洁且更易于审查。
简要历史
问题长期以来一直是GitHub上项目管理的核心。从跟踪错误到规划功能开发,问题为团队提供了一种灵活且协作的方式来组织工作。随着时间的推移,我们通过标签、里程碑和任务列表等工具丰富了这一基础,所有这些都旨在使项目管理更加直观和强大。
我们着手解决的关键挑战之一是如何更好地表示和管理问题中的分层任务。随着项目复杂性的增加,将工作分解为更小、可操作的步骤变得至关重要。我们希望使用户能够无缝管理这些嵌套关系,同时保持GitHub所著称的简洁性和清晰性。
构建子问题
为了构建子问题,我们首先设计了任务的新分层结构,而不是修改现有的任务列表功能。我们引入了在任务内嵌套任务的能力,创建了一个分层结构。这需要更新我们的数据模型和渲染逻辑以支持嵌套子问题。
从数据建模的角度来看,子问题表存储了父问题和子问题之间的关系。例如,如果问题X是问题Y的父级,子问题表将存储此链接,确保分层关系得以维护。
此外,我们将子问题完成信息汇总到一个子问题列表表中。这使我们能够高效地获取进度,而无需遍历子问题列表。例如,当问题Y完成时,系统会自动更新问题X的进度,消除了手动检查所有子问题状态的需要。
我们希望在MySQL中有一个简单的子问题关系表示。这种方法提供了几个好处,包括在GitHub Enterprise Server和GitHub Enterprise Cloud等环境中更轻松地支持子问题,并满足数据驻留要求。
我们还专注于提供直观的控件来创建、编辑和管理子问题。为此,我们与可访问性设计师和构建支持子问题的列表视图的GitHub共享组件团队密切合作。
我们的目标是使用户尽可能轻松地分解任务,而不会中断他们的工作流程。
在实践中使用子问题
内部使用是GitHub的最佳实践,也是我们构建GitHub的方式!我们在公司内部的团队中广泛使用子问题来管理复杂项目和跟踪进度。拥有一个离散的区域来管理我们的问题层次结构带来了更简单、更高效的体验。通过这种实践经验,我们确定了需要改进的领域,并确保该功能满足我们的高标准。
我们的团队发现,子问题显著提高了他们管理大型项目的能力。通过将任务分解为更小、可操作的项,他们更好地保持了对工作的可见性和控制。分层结构还使得识别依赖关系更容易,并确保没有任何遗漏。
收集早期反馈
构建子问题是一项团队努力。来自我们测试版的反馈对塑造最终产品并确保其满足我们社区的需求起到了重要作用。例如,了解在子问题列表中显示多少元数据至关重要。我们最初只显示问题标题,但最终添加了问题编号和仓库名称(如果问题来自另一个仓库)。
这些经验教训在改进子问题以及塑造我们未来功能开发方法方面非常宝贵。通过早期让用户参与并积极使用我们自己的功能,我们可以继续构建真正满足我们社区需求的产品。这些实践对我们未来的开发过程非常重要,确保我们交付高质量、以用户为中心的解决方案。
行动号召
子问题旨在帮助您将复杂任务分解为可管理的部分,为工作流程提供清晰度和结构。无论您是跟踪依赖关系、管理进度还是组织跨仓库工作,子问题都提供了一种强大的方式来掌控项目。
我们希望您尝试子问题,并看看它们如何改善您的工作流程。您的反馈对于帮助我们改进和增强此功能非常宝贵。加入我们的社区讨论,分享您的想法、经验和建议。
感谢您成为GitHub社区不可或缺的一部分。我们共同塑造协作开发的未来!