<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<rfc
    xmlns:xi="http://www.w3.org/2001/XInclude"
    ipr="trust200902"
    docName="draft-mahesh-opsawg-veloce-yang-01"
    category="exp"
    consensus="true"
    submissionType="IETF"
    tocInclude="true"
    sortRefs="true"
    symRefs="true"
    version="3">
  <front>
    <title abbrev="VELOCE">YANG deVELpment PrOCEss and maintenance (VELOCE)</title>
    <author fullname="Mahesh Jethanandani">
      <organization>Arrcus, Inc</organization>
      <address>
	<postal>
	  <country>US</country>
	</postal>
        <email>mjethanandani@gmail.com</email>
      </address>
    </author>
    
    <date/>
    <keyword>YANG GitHub</keyword>
    <abstract>
      <t>
	This document describes a YANG deVELpment PrOCEss and
	maintenance (VELOCE) that is more suitable for the development
	of YANG modules or YANG modules update within the IETF.
      </t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>
	Source for this draft and an issue tracker can be found at
	<eref target="https://github.com/mjethanandani/veloce"/>.
      </t>
    </note>
  </front>
  <middle>

    <section anchor="introduction" title="Introduction">
      <t>
	IETF has used RFCs to publish its documents. However, RFCs,
	which are text documents, are not well-suited for iterative
	development of YANG modules that come in the form of source
	code.
      </t>
      <t>
	This document proposes a new approach for documenting and
	publishing IETF YANG modules.  While this document mainly
	focuses on the IETF modules, IANA modules that are included in
	drafts, and removed ultimately on publication, can follow a
	similar process during the development of the IANA module.
      </t>
      <t>
	This document proposes that the publishing of a YANG module
	should be split into two parts: the text portion, hereby
	referred to as the prose, and the YANG module. The prose
	SHOULD continue to be used for describing the model, defining
	IANA Considerations, defining the Security Considerations,
	describing any Operational Considerations, capturing the
	Normative and the Informative References, etc. The YANG module,
	along with any related files such as YANG SID files,
	should be developed and maintained in a separate Source Code
	Mechanism (SCM) repository such as GitHub. The SCM SHOULD
	provide a stable link to the YANG module, which should then be
	included as a reference in the document.
      </t>
      <t>
	There are several reasons to develop the YANG module in an
	SCM. SCM provides version control and improves traceability of
	changes. Modern SCM provides the ability for Continuous
	Integration/Continuous Development (CI/CD). YANG modules can
	be fully validated before they are published. Changes to the
	module can be submitted by providing changes to the affected
	portions of the source code instead of the entire
	module. Reviews and comments can be gathered on the changes
	being proposed. This iterative approach lends itself to faster
	development and fixing of issues in YANG modules.
      </t>
      <t>
	Guidance for writing YANG modules is discussed in <xref
	target="RFC9907"/>. Guidelines related to
	code components (<xref section="3.2" sectionFormat="of"
	target="RFC9907"/>) or citations to
	references listed in the YANG module do not apply to VELOCE.
      </t>
      <section anchor="conventions-and-definitions" title="Conventions and Definitions">
	<t>
	  The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST
	  NOT</bcp14>", "<bcp14>REQUIRED</bcp14>",
	  "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
	  "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
	  "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT
	  RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
	  "<bcp14>OPTIONAL</bcp14>" in this document are to be
	  interpreted as described in BCP 14 <xref target="RFC2119"/>
	  <xref target="RFC8174"/> when, and only when, they appear in
	  all capitals, as shown here.
	</t>
      </section>
    </section>
    <section anchor="veloce-procedure" title="VELOCE Procedure">
      <t>
	The following practices should provide the necessary guidance
	on how a WG develops a new YANG module or updates an existing
	YANG module:
      </t>
      <t>
	It is <bcp14>RECOMMENDED</bcp14> that IETF-hosted repositories
	be used. See <xref section="1.3" sectionFormat="of"
	target="RFC8874">Working Group GitHub Usage
	Guidance</xref>. Integration using third-party hosted
	repositories <bcp14>MAY</bcp14> be used for experimentation
	purposes.
      </t>
      <t>
	A new repository <bcp14>MUST</bcp14> be created by the WG
	Chairs following the procedure in <xref section="3.2"
	sectionFormat="of" target="RFC8874">Working Group GitHub Usage
	Guidance</xref> to develop or maintain a YANG Module. For a
	new module, this <bcp14>SHOULD</bcp14> happen when the module
	is adopted as a WG item. It <bcp14>MAY</bcp14> happen for
	individual drafts, and that is left to the discretion of the
	chairs. However, once the document is adopted as a WG item,
	the repository <bcp14>SHOULD</bcp14> reside under the auspecies
	of IETF controlled repository and managed by the WG. The
	name of the repository <bcp14>SHOULD</bcp14> reflect the name
	of the draft. In addition, the chairs <bcp14>MAY</bcp14> make
	sure that an appropriate CI/CD YANG validation is in place.  It
	is <bcp14>RECOMMENDED</bcp14> that a containerized build
	environment be provided in the repository to enable local
	validation of YANG modules (e.g., via yanglint) independently of
	the CI/CD pipeline, and to ensure a consistent development
	environment across all contributors.
      </t>
      <t>
	The procedure for managing WG documents (e.g., assign editors)
	applies for managing YANG modules (<xref section="6.1"
	sectionFormat="of" target="RFC2418">IETF Working Group
	Guidelines and Procedures</xref>). For considerations related
	to granting editors write and administrators' right refer to
	<xref section="3.3" sectionFormat="of"
	target="RFC8874">Working Group GitHub Usage Guidance</xref>.
      </t>
      <t>
	Other administrative policies as they relate to migration,
	personal change or the WG closing is defined in the <xref
	target="RFC8875">Working Group GitHub Administration</xref>.
      </t>
      <t>
	A release tagging mechanism should be defined to track the
	intermediate versions referenced by WG I-Ds and by the RFC,
	once published. This can come in the form of a 'git tag' or by
	having a branch that corresponds to the version of the draft.
      </t>
      <t>
	Contribution methods for the YANG module are similar to those
	defined in <xref section="4" sectionFormat="of"
	target="RFC8874">Working Group GitHub Usage
	Guidance</xref>. This includes the use of Issues to track open
	issues regarding the module. They, along with corresponding
	links to the Pull Request (PR), are a useful way to record
	decisions made by the WG.
      </t>
      <t>
	PR allow for a user to request a change to the repository. A
	user does not need to have write access to the repository. A
	fork of the repository allows the user to make changes,
	validate them, and post the changes as a PR against the WG
	repository. Editors of the YANG module are encouraged not to
	accept changes into the "main" or "master" branch of the
	repository. Instead, they should be directed to a branch
	that is used for development. This allows the editors to review
	the changes and make sure that they are in line with the WG
	consensus before they are merged into the main branch. 
	This also allows the editors to make sure that the changes are properly
	validated before they are merged into the main branch.
      </t>
      <t>
	A procedure for assessing consensus is discussed in <xref
	section="7" sectionFormat="of" target="RFC8874">Working Group
	GitHub Usage Guidance</xref> and <bcp14>SHOULD</bcp14> be
	followed when accepting changes to the module.
      </t>
      <t>
	The YANG module <bcp14>MUST NOT</bcp14> be inserted in the
	document; instead, a link to the above repository
	<bcp14>MUST</bcp14> be included in the document.  The link
	<bcp14>MUST</bcp14> point to a specific tagged version of the
	YANG module (e.g., a git tag or commit hash), not to the HEAD of
	a branch, so that the module's contents at RFC publication time
	are permanently retrievable and verifiable.
      </t>
      <t>
	YANG SID files <xref target="RFC9595"/>, when applicable (e.g.,
	for YANG/CBOR encoding), <bcp14>SHOULD</bcp14> reside in the
	SCM repository rather than in the document.  The use of RFC 8792
	folding for SID files in Internet-Drafts is discouraged, as it
	is not compatible with current YANG Doctor tooling.
      </t>
      <t>
	A bis version of the initial RFC <bcp14>MAY</bcp14> be
	considered if a major change needs to be added in the
	document. Such a decision is left to the WG. WG may
	decide to update an adopted YANG module in the IETF
	repository and only update the RFC to change the reference
	to the YANG module.
      </t>
    </section>
    <section anchor="experimental-plan" title="Experimental Plan">
      <t>
	Much like other experimental documents, this document tries to
	answer the following four questions as they relate to
	experimental documents.
      </t>
      <section anchor="what-is-the-goal" title="What is the goal">
	<t>
	  The goal of the experiment is to determine how YANG modules
	  can be developed outside of an RFC, while making sure that
	  all IETF processes are followed, including WG involvement in
	  the development of the module, and rough consensus of the WG
	  and the IETF as a whole, before it is "published".
	</t>
	<t>
	  A key objective is to balance speed, quality, and community
	  contribution.  The experiment should demonstrate a faster
	  path to delivering well-formed YANG modules, while not
	  sacrificing the quality and the community involvement that
	  the IETF process requires.  In particular, the experiment
	  aims to address the pain point of the -bis revision process,
	  where re-publishing a large document just to update a small
	  portion of the YANG module creates unnecessary delays due to
	  review comments on otherwise unchanged sections.
	</t>
      </section>
      <section anchor="how-will-the-experiment-be-conducted" title="How will the experiment be conducted">
	<t>
	  YANG modules developed in the IETF fall broadly into two
	  categories. They can be new modules, or they can be a "bis"
	  version of the module. The experiment will consist of two or
	  more YANG modules, such that at least one of them is a new
	  YANG module, and the other is a "bis" version of the YANG
	  module. This is being done to make sure that the experiment
	  covers all the IETF processes related to the development of
	  YANG modules.
	</t>
	<t>
	  Participants in the experiment are encouraged to document
	  their overall experience, including whether the SCM-based
	  approach genuinely improved participation and velocity, or
	  whether observed speed gains were attributable to other
	  factors such as low contention on a specific module.  This
	  qualitative feedback is as important to the experiment as
	  the publication outcome itself.
	</t>
      </section>
      <section anchor="how-will-success-be-determined" title="How will success be determined">
	<t>
	  The primary "exit criteria" for the experiment will be
	  successful publication of the YANG modules identified as
	  part of the experiment, within the timelines defined in
	  <xref target="what-is-the-anticipated-timeline"/>.
	</t>
	<t>
	  Beyond publication, success will also be evaluated based on
	  whether the process improved community participation in YANG
	  module development, and whether participants found the SCM-
	  based workflow reduced friction compared to the traditional
	  RFC-embedded approach.  A report documenting the overall
	  experience and outcomes of the experiment SHOULD be produced
	  at the conclusion of the experiment.
	</t>
      </section>
      <section anchor="what-is-the-anticipated-timeline" title="What is the anticipated timeline">
	<t>
	  YANG modules have traditionally taken a long time to develop,
	  sometimes taking over four years. However, for the purpose
	  of this experiment, and since the idea is to demonstrate a
	  faster way for a new YANG module to be developed, the
	  timelines for the experiment are as follows:
	</t>
	<ul>
	  <li>A new YANG module should be published within two years
	  of the start of the experiment.</li>
	  <li>A "bis" version of an existing YANG module, where the
	  primary motivation is incremental updates rather than a
	  ground-up redesign, should be published within one year.</li>
	</ul>
	<t>
	  If the experiment takes longer than these timelines, the
	  experiment should be deemed to have failed.  At that time,
	  an analysis can be done as to why it failed and determine
	  if the experiment should be repeated.
	</t>
	<t>
	  If the experiment succeeds, then this document can be
	  classified as a BCP, and the process be followed for all
	  YANG modules developed in IETF.
	</t>
      </section>
    </section>
    <section anchor="operational-considerations" title="Operational Considerations">
      <t>
	The separation of YANG modules from their companion documents has
	implications for the YANG review process.  YANG Doctors
	<bcp14>SHOULD</bcp14> review the YANG module at the specific
	tagged version referenced by the document, using tooling that
	can retrieve and validate modules directly from the SCM
	repository.
      </t>
      <t>
	Working Groups adopting VELOCE are encouraged to define
	milestone-based development targets for YANG modules.  A phased
	approach, where an initial version covering core functionality is
	published within a defined timeframe, with subsequent updates
	published as needed, is preferable to indefinitely delaying
	publication while pursuing completeness.
      </t>
    </section>
    <section anchor="security-considerations" title="Security Considerations">
      <t>
	The security considerations discussed in <xref section="10"
	sectionFormat="of" target="RFC8874"/> apply here.
      </t>
    </section>
    <section anchor="iana-considerations" title="IANA Considerations">
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="references" title="References">
      <references anchor="normative-references" title="Normative References">
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9907.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2418.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8874.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8875.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9595.xml"/>
      </references>
      <references anchor="informative-references" title="Informative References">
      </references>
    </references>

    <section numbered="false" anchor="acknowledgments" title="Acknowledgments">
      <t>
	This draft is triggered by the discussion in NEMOPS IAB workshop.
      </t>
      <t>
	Thanks to the participants of OPSAWG for their comments that
	have helped shape this draft.  In particular, thanks to
	Jeffrey Haas, Joe Clarke, Italo Busi, and Mohamed Boucadair
	for their feedback during IETF 125.
      </t>
    </section>
  </back>
</rfc>
