Most of us understand that if we run out one day
and buy a cello, we won’t be able to play music like Yo-Yo Ma that same day. To
be able to play something that resembles music you would need training,
practice, and a safe place to store the cello. However, sometimes we don’t
think about what’s necessary to achieve a new capability beyond just buying
something like a new piece of software. To help understand the different types
of changes that need to be made for successful technology injection, the US
military uses the acronym DOTMLPF-P (pronounced Dot-M-L-P-F-P) that stands for
Doctrine, Organization, Materiel, Leadership, Personnel, Facilities, and
Policy.
Let’s say I want to change a team from doing
deployments once a quarter to deploy once a week. Could I just install Jenkins
and declare victory? That approach is unlikely to be successful because you
will need to plan for personnel to configure Jenkins. You may need to train
people on configuring and using Jenkins. You may need an organizational change
to form a DevOps team to design and build out the initial deployment pipelines. To get the resources to do this
and people focused on it, you will need to provide leadership. You may
also need additional equipment like a new server to host Jenkins. You
might rethink your change management policy if it can’t accommodate
frequent releases. You may need to change the doctrine you follow, the way you
develop and test software, by emphasizing smaller, quicker releases, changing
your branching structure, using feature flags, and implementing automating
tests. For this one change, you had to think about not just obtaining and
installing the software but the doctrine, organization, training, materials
(software & hardware), leadership, personnel, and policy -- seven
components of DOTMLPF-P.
Below is the military definition of each element
of DOTMLPF-P along with my own translation for a software developer or other IT
professional.
Doctrine
Military Definition: “the way we fight (e.g.,
emphasizing maneuver warfare, combined air-ground campaigns).”
Developer Definition: The high level approached
based on a set of general principles that we use to deliver software. Think
agile as guided by the agile manifesto, RUP, or waterfall as different
doctrines. Software delivery has predominantly shifted to small
multi-disciplinary teams producing small and quick releases to production.
Organization
Military Definition: “how we organize to fight
(e.g., divisions, air wings, Marine-Air Ground Task Forces)”
Developer Definition: How we divide into teams
to deliver working software (feature teams, project teams, separate functional
dev and test teams).
Training
Military Definition: “how we prepare to fight
tactically (basic training to advanced individual training, unit training,
joint exercises, etc).”
Developer Definition: How we learn to deliver software. Training in programming
languages, new technologies, agile practices, security and other software and
system engineering competencies. This may include formal training classes like
a certification bootcamps, peer training, college courses, etc.
Materiel
Military Definition: “all the ‘stuff’ necessary
to equip our forces.” When considering a new purchase, the definition is
restricted to equipment “that DOES NOT require a new development effort
(weapons, spares, test sets, etc that are ‘off the shelf’ both commercially and
within the government)” to focus on considering existing solutions to
potentially fill a capability gap.
Developer Definition: Your tools. This may include servers, workstation, Visual
Studio, Eclipse, Emacs, etc.
Leadership and education
Military Definition: “how we prepare our leaders
to lead the fight (squad leader to 4-star general/admiral - professional
development)”
Developer Definition: Leadership is necessary to
bring people together to focus on solving a problem. If you are using 10 year
old development tools and techniques or everyone thinks your processes don’t
make sense but nobody does anything about it, it’s probably because your team
lacks leadership. Leadership doesn’t have to come from formal managers. Indeed,
to move up in the ranks, showing initiative, drive and leading even small
changes like upgrading Visual Studio across the whole development team goes a
long way to distinguish you as someone who is engaged, cares about the team,
and can drive change.
Personnel
Military Definition: “availability of qualified
people for peacetime, wartime, and various contingency operations”
Developer Definition: The people you have on
your team(s).
Facilities
Military Definition: “real property,
installations, and industrial facilities (e.g., government owned ammunition
production facilities)”
Developer Definition: The physical space where
your team works and the physical space where your servers are hosted. If you
are hosting servers in your own facility, you have to think about heating and
cooling, fire suppression systems, access controls and other physical security
issues. If you are forming a new team or rearranging teams you may also think
about how your office space is laid out to allow for collaboration and for
quiet time.
Policy
Military Definition: “DoD, interagency, or
international policy that impacts the other seven non-materiel elements”
Developer Definition: The rules you must follow
as part of your software delivery process. For example, all changes must be
approved by the Configuration Change Board prior to deploying to production.