PEP 8002: Add section describing an idealised version of the process used at Microsoft (#772)
This commit is contained in:
parent
18b3312574
commit
e7e2d43069
145
pep-8002.rst
145
pep-8002.rst
|
@ -588,6 +588,151 @@ They retired (`Adrian's post
|
||||||
9 years into the project's history. Following the stepping down,
|
9 years into the project's history. Following the stepping down,
|
||||||
the DEP process was defined.
|
the DEP process was defined.
|
||||||
|
|
||||||
|
Microsoft
|
||||||
|
=========
|
||||||
|
|
||||||
|
Despite the selection process for "relevant projects" described above,
|
||||||
|
it is worthwhile considering how companies that are held financially
|
||||||
|
accountable for their decisions go about making them. This is not
|
||||||
|
intended as a readily-usable model for Python, but as additional insight
|
||||||
|
that may influence the final design or selection.
|
||||||
|
|
||||||
|
This section is not taken from any official documentation, but has been
|
||||||
|
abstracted by Steve Dower, a current Microsoft employee, to reflect the
|
||||||
|
processes that are most applicable to individual projects in the
|
||||||
|
engineering departments. Role titles are used (and defined) rather than
|
||||||
|
identifying specific individuals, and all names are examples and should
|
||||||
|
not be taken as a precise description of the company at any particular
|
||||||
|
time in history.
|
||||||
|
|
||||||
|
This is also highly simplified and idealised. There are plenty of
|
||||||
|
unhealthy teams that do not look like this description, and those
|
||||||
|
typically have high attrition (people leave the team more frequently
|
||||||
|
than other teams). Teams that retain their people are usually closer to
|
||||||
|
the model described here, but ultimately everything involving humans is
|
||||||
|
imperfect and Microsoft is no exception.
|
||||||
|
|
||||||
|
Key people and their functions
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Microsoft has a hierarchy that ultimately reports to the CEO. Below the
|
||||||
|
CEO are a number of organisations, some of which are focused on
|
||||||
|
engineering projects (as opposed to sales, marketing or other functions).
|
||||||
|
These engineering organisations roughly break down into significant
|
||||||
|
product families - for example, there has been a "Windows group", an
|
||||||
|
"Xbox group", and a "server and tools group". These are typically led by
|
||||||
|
*Executive Vice Presidents* (EVPs), who report to the CEO.
|
||||||
|
|
||||||
|
Below each EVP are many *Corporate Vice Presidents* (CVPs), each of which
|
||||||
|
is responsible for one or more products. This level is where the hierarchy
|
||||||
|
becomes relevant for the purposes of this PEP - the CEO and EVPs are
|
||||||
|
rarely involved in most decision processes, but set the direction under
|
||||||
|
which CVPs make decisions.
|
||||||
|
|
||||||
|
Each product under a CVP has a team consisting of *Program Managers*
|
||||||
|
(PMs) and *Engineering Managers*. Engineering Managers have teams of
|
||||||
|
engineers who are largely uninvolved in decision making, though may be
|
||||||
|
used as specialists in some cases. For the rest of this section,
|
||||||
|
*Engineering* refers to anyone from the engineering team who is
|
||||||
|
contributing with a technical-focus, and *PM* refers to anyone from the
|
||||||
|
program management team contributing with a customer-focus. After
|
||||||
|
decisions are made, Engineering does the implementation and testing work,
|
||||||
|
and PM validates with users that their problem has been solved.
|
||||||
|
|
||||||
|
(This is actually a huge simplification, to the point where some people
|
||||||
|
in these roles are offended by this characterisation. In reality, most
|
||||||
|
people in PM or Engineering do work that crosses the boundary between
|
||||||
|
the two roles, and so they should be treated as a term describing the
|
||||||
|
work that somebody is doing in the moment, rather than an identifier or
|
||||||
|
restriction for a person.)
|
||||||
|
|
||||||
|
Teams generally represent a feature, while the CVP represents a product.
|
||||||
|
For example, Visual Studio Code has a CVP who is ultimately responsible
|
||||||
|
for decisions about that product and its overall direction (in the context
|
||||||
|
set by their EVP). But many teams contribute features into Visual Studio
|
||||||
|
Code.
|
||||||
|
|
||||||
|
For complete clarity, the CEO, EVPs, and CVPs do not ever directly
|
||||||
|
modify source code. Their entire role is to provide direction for
|
||||||
|
whoever is immediately below them and to adjudicate on controversial
|
||||||
|
decisions.
|
||||||
|
|
||||||
|
Regular decision process
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Changes to product code that are not visible to external users are made
|
||||||
|
solely by Engineering. Individual engineers will be assigned tasks by a
|
||||||
|
designated engineering manager, or may self-assign. Promotion to
|
||||||
|
increasingly senior positions generally reflects trust in the
|
||||||
|
individual's decision-making ability, and more senior engineers are
|
||||||
|
trusted to make decisions with less validation from the rest of the team.
|
||||||
|
Most bugs are covered by this process (that is, fixing a user-visible
|
||||||
|
problem without changing the intended experience is an Engineering
|
||||||
|
decision).
|
||||||
|
|
||||||
|
Decisions affecting users of a particular feature are made by the PM
|
||||||
|
team for that feature. They will use whatever data sources available to
|
||||||
|
identify an issue, experiment with alternatives, and ultimately prepare
|
||||||
|
a design document. Senior members from PM and Engineering will review
|
||||||
|
designs to clarify the details, and ultimately an artifact is created
|
||||||
|
that the feature team agrees on. Engineering will use this artifact to
|
||||||
|
implement the work, and PM will later use this artifact to validate that
|
||||||
|
the original issue has been resolved.
|
||||||
|
|
||||||
|
Senior members of Engineering and PM teams for a feature are expected to
|
||||||
|
make decisions in the spirit of the direction set by their CVP. Teams
|
||||||
|
have regular meetings with their CVP to discuss recent decisions and
|
||||||
|
ensure consistency. Decisions that are not obviously in line with CVP
|
||||||
|
expectations are escalated to the controversial process.
|
||||||
|
|
||||||
|
Controversial decision process
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
When decisions require cross-team coordination, or do not obviously
|
||||||
|
align with previous CVP guidance, teams will escalate decision making.
|
||||||
|
These often include decisions that involve changing direction,
|
||||||
|
attempting to reach a new or different group of users, deprecating and
|
||||||
|
removing significant features (or on a short timeframe), or changes that
|
||||||
|
require quick releases.
|
||||||
|
|
||||||
|
In general, CVPs are not intimately familiar with all aspects of the
|
||||||
|
feature team's work. As a result, the feature team must provide both a
|
||||||
|
recommendation and sufficient context for the decision that the CVP can
|
||||||
|
decide *without additional knowledge*. Most of the time, the first
|
||||||
|
attempt results in a series of questions from the CVP, which the team
|
||||||
|
will research, answer and attempt the decision again at a later date.
|
||||||
|
|
||||||
|
Common questions asked by CVPs are:
|
||||||
|
|
||||||
|
* how many users are affected by this decision?
|
||||||
|
* what is the plan for minimizing impact on current users?
|
||||||
|
* how will the change be "sold"/described to potential users?
|
||||||
|
|
||||||
|
CVPs are expected to have a strong understanding of the entire field, so
|
||||||
|
that they can evaluate some questions for themselves, such as:
|
||||||
|
|
||||||
|
* what similar decisions have been made by other projects within Microsoft?
|
||||||
|
* what other projects have plans that may impact this decision?
|
||||||
|
* what similar decisions have been made by projects outside Microsoft?
|
||||||
|
* do users need it?
|
||||||
|
* is it in line with the direction set by their EVP?
|
||||||
|
|
||||||
|
Decisions made by CVPs are generally arbitrary and final, though they
|
||||||
|
typically will provide their rationale.
|
||||||
|
|
||||||
|
Planning a new release
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Releases involve coordinating a number of feature teams, and so rarely
|
||||||
|
attempt to include input from all teams. A schedule will be determined
|
||||||
|
based on broader ecosystem needs, such as planned events/conferences or
|
||||||
|
opportunities to take advantage of media attention.
|
||||||
|
|
||||||
|
Teams are informed of the release date, the theme of the release, and
|
||||||
|
make their own plans around it following the above decision making
|
||||||
|
process. Changing the release date is considered a controversial
|
||||||
|
decision.
|
||||||
|
|
||||||
|
|
||||||
Acknowledgements
|
Acknowledgements
|
||||||
================
|
================
|
||||||
|
|
Loading…
Reference in New Issue