{"id":18658,"date":"2020-10-12T13:41:41","date_gmt":"2020-10-12T21:41:41","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/powershell\/?p=18658"},"modified":"2020-10-14T16:55:07","modified_gmt":"2020-10-15T00:55:07","slug":"powershell-working-groups","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/powershell-working-groups\/","title":{"rendered":"PowerShell Working Groups"},"content":{"rendered":"<div class=\"markdown-body\" itemprop=\"mainContentOfPage\">\n<p>Since we open sourced PowerShell in 2016, PowerShell has been an immensely popular project on GitHub.\n<a href=\"https:\/\/aka.ms\/PSGitHubBI\" rel=\"nofollow\">Every year<\/a>,\n700-1000 PRs and 1300-1500 issues are submitted to the PowerShell repo,\nwith roughly half of the PRs and 90% of the issues filed from the community.<\/p>\n<p>We realize that some of these issues and PRs have been piling up and,\nas the project has grown in popularity and community activity,\nwe sometimes struggle with the sheer volume of them.\nThose of us on the PowerShell Committee have been discussing some ways that we think\nwe might be able to improve the efficiency of our decision-making process,\nand to reduce bottlenecks that may be causing the increase in our overall backlog.<\/p>\n<p>We set out with a couple of goals:<\/p>\n<p>First, we wanted to increase the velocity of innovation in PowerShell,\nbut without compromising the stability of the engine and language that so many depend upon\nwithin their critical infrastructure and automation environments.\nIt&#8217;s critical that anything we do in changing the management of the PowerShell project not jeopardize this.<\/p>\n<p>We also noticed that a lot of contributor time is being spent on contributions and discussions that\nare ultimately rejected by Maintainers or the Committee.\nDespite being rejected for legitimate reasons (e.g. risky breaking changes),\nwe recognize that the rejection could happen before the contributor spends considerable time and effort.<\/p>\n<p>To that end, we want to:<\/p>\n<ol>\n<li>increase the number of people who can make approve or reject proposals,\nespecially where those people have domain-specific knowledge about a topic<\/li>\n<li>make those approvals and rejections more explicit, giving contributors confidence in moving forward<\/li>\n<li>make approvals and rejections earlier in the process to avoid unnecessary work for contributors and maintainers<\/li>\n<\/ol>\n<h2>\n<a id=\"user-content-working-groups\" class=\"anchor\" href=\"#working-groups\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a>Working Groups<\/h2>\n<p>To meet these goals, we are introducing the concept of Working Groups (WGs) within the PowerShell project\n(including those repositories that contribute their modules into the PowerShell package).\nYou can think of WGs as subcommittees for specific areas within the PowerShell project.\nSome of their responsibilities include:<\/p>\n<ol>\n<li>Fostering discussions in issues and pull requests<\/li>\n<li>Deciding whether feature proposals need request-for-comment (RFC) docs to be approved by the Committee<\/li>\n<li>Approving or rejecting feature proposals in issues<\/li>\n<li>Offering guidance and expertise in RFC discussions<\/li>\n<li>Triaging bugs filed as issues<\/li>\n<li>Reviewing code in pull requests<\/li>\n<\/ol>\n<p>Initially, working groups will only consist of PowerShell Team members,\nbut we will be reaching out to high-impact community contributors over the next few months\nto gauge their interest in joining WGs.<\/p>\n<h2>\n<a id=\"user-content-issue-flow\" class=\"anchor\" href=\"#issue-flow\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a>Issue Flow<\/h2>\n<p>There are two primary categories of issues that get filed in the PowerShell repository:\nbugs and feature proposals.\nBugs and features will each be handled differently going forward.<\/p>\n<h3>\n<a id=\"user-content-bugs\" class=\"anchor\" href=\"#bugs\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a>Bugs<\/h3>\n<p>Bugs are the easy case. At a high-level, when a bug gets filed:<\/p>\n<ol>\n<li>A Maintainer will label the issue with the appropriate Working Group(s)<\/li>\n<li>Working Group members for those labels will review the bug to determine if it is a legitimate bug,\nby-design, external to the project, and\/or worth spending time to fix\n(based on the value, complexity, risk, etc.)<\/li>\n<li>When a bug has been established as legitimate, Working Group members will establish the severity of the bug\n(i.e. the importance of fixing it)<\/li>\n<li>If and when a PowerShell Team member or contributor files a PR to fix the bug,\nat least one Working Group member will be responsible for reviewing the PR.<\/li>\n<\/ol>\n<p>In practice, this is similar to how bugs are already handled today.\nHowever, we&#8217;re hopeful that the addition of Working Group members outside of the PowerShell Team\nwill enable a greater number of bugs to be triaged and resolved appropriately,\nas well as to unblock a number of bug fixes in PR that are of a lower priority.<\/p>\n<h3>\n<a id=\"user-content-feature-proposals\" class=\"anchor\" href=\"#feature-proposals\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a>Feature Proposals<\/h3>\n<p>Feature proposals are a little more complicated.<\/p>\n<p>First and foremost, any new feature proposals should initially be filed\nas issues, specifically using the <a href=\"https:\/\/github.com\/PowerShell\/PowerShell\/blob\/master\/.github\/ISSUE_TEMPLATE\/Feature_Request.md\">issue template for feature\nrequests<\/a>\n(subject to some ongoing changes). This issue must include:<\/p>\n<ul>\n<li>a description of the feature being proposed<\/li>\n<li>the scenario for using the feature (i.e. why is the feature useful\nin the real world)<\/li>\n<li>examples of how the feature might work in practice (including mandatory example script blocks and output)<\/li>\n<\/ul>\n<p>Again, Maintainers will label the issue for the appropriate WGs in order to bring them into the issue for discussion.\nWorking Group members will facilitate a discussion with the community around the utility and design of the proposal,\nas well as contributing their expertise on the feasibility and design consistency of implementing the proposal.<\/p>\n<p>One pattern that we are noticing within the PowerShell repo today is the large number of proposals that could\nbe implemented outside of PowerShell itself (usually via external modules).\nIn keeping with our goal of maintaining stability in PowerShell,\nwe&#8217;d prefer that this experimentation happens via the PowerShell Gallery,\nwhere modules can be published as prerelease,\nand where <a href=\"https:\/\/semver.org\/\" rel=\"nofollow\">semantic versioning<\/a> can be used to communicate breaking changes.\nTherefore, WGs will aggressively reject any feature proposals that can be implemented\nexternally from the repo.<\/p>\n<p>WGs will also decide whether they believe the feature proposal requires an RFC,\nbased on the complexity, size, and potential impact of the proposal.\nWhere RFCs are not required, WGs will approve the proposal and then will review the eventual PR to implement it.\nWhere RFCs <em>are<\/em> required, contributors will be asked to submit RFCs.\nWorking Group members will participate heavily in the RFC discussion,\ncontributing their expertise to help the Committee make decisions on whether to accept the proposal.<\/p>\n<h3>\n<a id=\"user-content-experimental-features\" class=\"anchor\" href=\"#experimental-features\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a>Experimental Features<\/h3>\n<p>Experimental features are features shipped in PowerShell that are not officially supported as they may be\nunstable or subject to change in the future.\n(They&#8217;re turned on by default in preview branches and off by default in officially supported versions,\nincluding release candidates.)<\/p>\n<p>We introduced experimental features as a way to accelerate development and gather feedback in situations where\nwe&#8217;re unsure whether a specific approach is best,\nand where we may want to change the behavior before users start depending on it in production.<\/p>\n<p>In the past, we&#8217;ve largely used experimental features for new behavior that we already have a strong intent to eventually merge.\nWhile we&#8217;ve caught certain issues that have prevented experimental features from being accepted as stable,\nwe believe the current perception is that these features will eventually become stable.<\/p>\n<p>In the <em>future<\/em>, we&#8217;d like to use experimental features for <em>experimenting<\/em>\nand gathering user feedback on whether a feature should exist at all,\nwith a more explicit assertion that many of them will never find their way to a supported GA release.\nThis means that we may be accepting more PRs into PowerShell as experimental features,\nbut that this acceptance is not necessarily long-term acceptance into PowerShell.<\/p>\n<p>Instead, the RFC process will be used to convey full acceptance,\nsomething that may happen long after code has been accepted as experimental.\nAnd in fact, the feedback received around the experimental will be used by the Committee to inform the RFC decision.<\/p>\n<h2>\n<a id=\"user-content-whats-next\" class=\"anchor\" href=\"#whats-next\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a>What&#8217;s next?<\/h2>\n<p>Similar to the way we roll out functionality in PowerShell,\nwe&#8217;ll be taking a staged approach to rolling out these governance changes, taking feedback along the way.<\/p>\n<p>In the near term, members of the PowerShell Team have been added to preliminary WGs,\nand you&#8217;ll see <code>Area<\/code> issue labels change to reflect these WGs as we&#8217;ve defined them.\nMembers of these WGs will be responsible for triaging new issues under those labels,\nreviewing PRs under those labels, and (eventually) working through the backlog of existing issues.\nWGs will also be experimenting with various ways of organizing themselves,\nincluding how they divvy up issues\/PRs and how much consensus amongst themselves to make a decision.<\/p>\n<p>Over the next couple months, we&#8217;ll introduce more of this process as official governance proposals within the RFC repo,\nand update our existing governance language to reflect the new changes.\nThese changes may continue to evolve as we learn more about what does and doesn&#8217;t work.<\/p>\n<p>The Committee will address existing RFCs on a case-by-case basis.\nSome have already been extensively discussed as issues and\/or RFC discussions,\nand we may choose to move forward with experimental implementations or reject them altogether.<\/p>\n<p>If folks feel that issues, pull requests, or RFCs aren&#8217;t being adequately addressed by WGs,\nthey should still feel free to mention <code>@PowerShell\/powershell-committee<\/code>\nor to request that a <code>Review-Committee<\/code> label be added.\nIn the future, we&#8217;ll have more guidance on how escalations and Committee reviews will work.<\/p>\n<p>Eventually, we&#8217;ll reach out to contributors who may be interested in joining these Working Groups,\ncompleting our original goal of increasing the number of people who can make decisions about specific areas of\nPowerShell.<\/p>\n<h2>\n<a id=\"user-content-thank-you\" class=\"anchor\" href=\"#thank-you\" aria-hidden=\"true\"><span aria-hidden=\"true\" class=\"octicon octicon-link\"><\/span><\/a>Thank you!<\/h2>\n<p>Thanks to our contributors and users for continuing to submit issues, pull requests, and RFCs to the PowerShell repo.\nWe appreicate your patience as we work towards this new model, and we encourage you to provide feedback as issues\nin the <a href=\"https:\/\/github.com\/powershell\/powershell-rfc\">PowerShell-RFC repo<\/a> as we continue on this journey.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Since we open sourced PowerShell in 2016, PowerShell has been an immensely popular project on GitHub. Every year, 700-1000 PRs and 1300-1500 issues are submitted to the PowerShell repo, with roughly half of the PRs and 90% of the issues filed from the community. We realize that some of these issues and PRs have been [&hellip;]<\/p>\n","protected":false},"author":657,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-18658","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>Since we open sourced PowerShell in 2016, PowerShell has been an immensely popular project on GitHub. Every year, 700-1000 PRs and 1300-1500 issues are submitted to the PowerShell repo, with roughly half of the PRs and 90% of the issues filed from the community. We realize that some of these issues and PRs have been [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/18658","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/657"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=18658"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/18658\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=18658"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=18658"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=18658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}