diff --git a/docs/html/development/architecture/configuration-files.rst b/docs/html/development/architecture/configuration-files.rst
new file mode 100644
index 00000000000..c25b25817cc
--- /dev/null
+++ b/docs/html/development/architecture/configuration-files.rst
@@ -0,0 +1,89 @@
+===========================
+Configuration File Handling
+===========================
+
+The ``pip._internal.configuration`` module is responsible for handling
+configuration files (eg. loading from and saving values to) that are used by
+pip. The module's functionality is largely exposed through and coordinated by
+the module's ``Configuration`` class.
+
+.. note::
+
+ This section of the documentation is currently being written. pip
+ developers welcome your help to complete this documentation. If you're
+ interested in helping out, please let us know in the
+ `tracking issue `_.
+
+
+.. _configuration-overview:
+
+Overview
+========
+
+TODO: Figure out how to structure the initial part of this document.
+
+Loading
+-------
+
+#. Determine configuration files to be used (built on top of :pypi:`appdirs`).
+#. Load from all the configuration files.
+ #. For each file, construct a ``RawConfigParser`` instance and read the
+ file with it. Store the filename and parser for accessing / manipulating
+ the file's contents later.
+#. Load values stored in ``PIP_*`` environment variables.
+
+The precedence of the various "configuration sources" is determined by
+``Configuration._override_order``, and the precedence-respecting values are
+lazily computed when values are accessed by a callee.
+
+Saving
+------
+
+Once the configuration is loaded, it is saved by iterating through all the
+"modified parser" pairs (filename and associated parser, that were modified
+in-memory after the initial load), and writing the state of the parser to file.
+
+-----
+
+The remainder of this section is organized by documenting some of the
+implementation details of the ``configuration`` module, in the following order:
+
+* the :ref:`kinds ` enum,
+* the :ref:`Configuration ` class,
+
+
+.. _config-kinds:
+
+kinds
+=====
+
+- used to represent "where" a configuration value comes from
+ (eg. environment variables, site-specific configuration file,
+ global configuration file)
+
+.. _configuration-class:
+
+Configuration
+============
+
+- TODO: API & usage - ``Command``, when processing CLI options.
+ - __init__()
+ - load()
+ - items()
+- TODO: API & usage - ``pip config``, when loading / manipulating config files.
+ - __init__()
+ - get_file_to_edit()
+ - get_value()
+ - set_value()
+ - unset_value()
+ - save()
+- TODO: nuances of ``load_only`` and ``get_file_to_edit``
+- TODO: nuances of ``isolated``
+
+Future Refactoring Ideas
+========================
+
+* Break up the ``Configuration`` class into 2 smaller classes, by use case
+ * ``Command`` use-case (read only) -- ``ConfigurationReader``
+ * ``pip config`` use-case (read / write) -- ``ConfigurationModifier`` (inherit from ``ConfigurationReader``)
+* Eagerly populate ``Configuration._dictionary`` on load.
diff --git a/docs/html/development/architecture/index.rst b/docs/html/development/architecture/index.rst
index 094adeede1d..aef02a306c1 100644
--- a/docs/html/development/architecture/index.rst
+++ b/docs/html/development/architecture/index.rst
@@ -16,10 +16,11 @@ Architecture of pip's internals
.. toctree::
- :maxdepth: 2
+ :maxdepth: 1
overview
anatomy
+ configuration-files
package-finding
upgrade-options