<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://blog.dask.org</id>
  <title>Dask Working Notes - Posts by Matthew Rocklin and Tom Augspurger</title>
  <updated>2026-03-05T15:05:20.208447+00:00</updated>
  <link href="https://blog.dask.org"/>
  <link href="https://blog.dask.org/blog/author/matthew-rocklin-and-tom-augspurger/atom.xml" rel="self"/>
  <generator uri="https://ablog.readthedocs.io/" version="0.11.12">ABlog</generator>
  <entry>
    <id>https://blog.dask.org/2018/09/27/docs-refactor/</id>
    <title>Refactor Documentation</title>
    <updated>2018-09-27T00:00:00+00:00</updated>
    <author>
      <name>Matthew Rocklin and Tom Augspurger</name>
    </author>
    <content type="html">&lt;p&gt;&lt;em&gt;This work is supported by &lt;a class="reference external" href="http://anaconda.com"&gt;Anaconda Inc&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 11)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;section id="summary"&gt;

&lt;p&gt;We recently changed how we organize and connect Dask’s documentation.
Our approach may prove useful for other umbrella projects that spread
documentation across many different builds and sites.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 17)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="dask-splits-documentation-into-many-pages"&gt;
&lt;h1&gt;Dask splits documentation into many pages&lt;/h1&gt;
&lt;p&gt;Dask’s documentation is split into several different websites, each managed by
a different team for a different sub-project:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://dask.pydata.org"&gt;dask.pydata.org&lt;/a&gt; : Main site&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://distributed.readthedocs.org"&gt;distributed.readthedocs.org&lt;/a&gt; : Distributed scheduler&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://dask-ml.readthedocs.io"&gt;dask-ml.readthedocs.io&lt;/a&gt; : Dask for machine learning&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://dask-kubernetes.readthedocs.io"&gt;dask-kubernetes.readthedocs.io&lt;/a&gt; : Dask on Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://dask-jobqueue.readthedocs.io"&gt;dask-jobqueue.readthedocs.io&lt;/a&gt; : Dask on HPC systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://dask-yarn.readthedocs.io"&gt;dask-yarn.readthedocs.io&lt;/a&gt; : Dask on Hadoop systems&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://dask-examples.readthedocs.io"&gt;dask-examples.readthedocs.io&lt;/a&gt; : Examples that use Dask&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://matthewrocklin.com/blog"&gt;matthewrocklin.com/blog&lt;/a&gt;,
&lt;a class="reference external" href="https://jcrist.github.io"&gt;jcrist.github.io&lt;/a&gt;,
&lt;a class="reference external" href="https://tomaugspurger.github.io"&gt;tomaugspurger.github.io&lt;/a&gt;,
&lt;a class="reference external" href="https://martindurant.github.io/blog"&gt;martindurant.github.io/blog&lt;/a&gt; :
Developers’ personal blogs&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This split in documentation matches the split in development teams. Each of
sub-project’s team manages its own docs in its own way. They release at their
own pace and make their own decisions about technology. This makes it much
more likely that developers maintain the documentation as they develop and
change software libraries.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We make it easy to write documentation. This choice causes many different documentation systems to emerge.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This approach is common. A web search for Jupyter Documentation yields the
following list:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://jupyter.readthedocs.io/en/latest/"&gt;jupyter.readthedocs.io/en/latest/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://jupyter-notebook.readthedocs.io/en/stable/"&gt;jupyter-notebook.readthedocs.io/en/stable/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://jupyter.org/"&gt;jupyter.org/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://jupyterhub.readthedocs.io/en/stable/"&gt;jupyterhub.readthedocs.io/en/stable/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://nteract.io/"&gt;nteract.io/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://ipython.org/"&gt;ipython.org/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Different teams developing semi-independently create different web pages. This
is inevitable. Asking a large distributed team to coordinate on a single
cohesive website adds substantial friction, which results in worse
documentation coverage.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 58)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="problem"&gt;
&lt;h1&gt;Problem&lt;/h1&gt;
&lt;p&gt;However, while using separate websites results in excellent coverage, it
also fragments the documentation. This makes it harder for users to smoothly
navigate between sites and discover appropriate content.&lt;/p&gt;
&lt;p&gt;Monolithic documentation is good for readers,
modular documentation is good for writers.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 67)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="our-solutions"&gt;
&lt;h1&gt;Our Solutions&lt;/h1&gt;
&lt;p&gt;Over the last month we took steps to connect our documentation and make it more
cohesive, while still enabling independent development. This post outlines the
following steps:&lt;/p&gt;
&lt;ol class="arabic simple"&gt;
&lt;li&gt;&lt;p&gt;Organize under a single domain, dask.org&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Develop a sphinx template project for uniform style&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Include a cross-project navbar in addition to the within-project
table-of-contents&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We did some other things along the way that we find useful, but are probably
more specific to just Dask.&lt;/p&gt;
&lt;ol class="arabic simple" start="4"&gt;
&lt;li&gt;&lt;p&gt;We moved this blog to blog.dask.org&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We improved our example notebooks to host both a static site and also a live Binder&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 84)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="organize-under-a-single-domains-dask-org"&gt;
&lt;h1&gt;1: Organize under a single domains, Dask.org&lt;/h1&gt;
&lt;p&gt;Previously we had some documentation under &lt;a class="reference external" href="https://rtfd.org"&gt;readthedocs&lt;/a&gt;,
some under the &lt;a class="reference external" href="https://dask.pydata.org"&gt;dask.pydata.org&lt;/a&gt; subdomain (thanks
NumFOCUS!) and some pages on personal websites, like
&lt;a class="reference external" href="https://matthewrocklin.com/blog"&gt;matthewrocklin.com/blog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While looking for a new dask domain to host all of our content we noticed that
&lt;a class="reference external" href="https://dask.org"&gt;dask.org&lt;/a&gt; redirected to
&lt;a class="reference external" href="https://anaconda.org"&gt;anaconda.org&lt;/a&gt;, and were pleased to learn that someone at
&lt;a class="reference external" href="https://anaconda.com"&gt;Anaconda Inc&lt;/a&gt; had the foresight to register the domain
early on.&lt;/p&gt;
&lt;p&gt;Anaconda was happy to transfer ownership of the domain to NumFOCUS, who helps
us to maintain it now. Now all of our documentation is available under that
single domain as subdomains:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://dask.org"&gt;dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://docs.dask.org"&gt;docs.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://distributed.dask.org"&gt;distributed.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://ml.dask.org"&gt;ml.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://kubernetes.dask.org"&gt;kubernetes.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://yarn.dask.org"&gt;yarn.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://jobqueue.dask.org"&gt;jobqueue.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://examples.dask.org"&gt;examples.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://examples.dask.org"&gt;stories.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://blog.dask.org"&gt;blog.dask.org&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This uniformity means that the thing you want is probably at that-thing.dask.org, which is a bit easier to guess than otherwise.&lt;/p&gt;
&lt;p&gt;Many thanks to &lt;a class="reference external" href="https://andy.terrel.us/"&gt;Andy Terrel&lt;/a&gt; and &lt;a class="reference external" href="https://tomaugspurger.github.io"&gt;Tom
Augspurger&lt;/a&gt; for managing this move, and to
Anaconda for generously donating the domain.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 118)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="cross-project-navigation-bar"&gt;
&lt;h1&gt;2: Cross-project Navigation Bar&lt;/h1&gt;
&lt;p&gt;We wanted a way for readers to quickly discover the other sites that were
available to them. All of our sites have side-navigation-bars to help readers
navigate within a particular site, but now they also have a top-navigation-bar
to help them navigate between projects.&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/docs-navbar-sidebar.png"
     width="100%"
     alt="adding a navbar to dask docs"&gt;&lt;/p&gt;
&lt;p&gt;This navigation bar is managed independently from all of the documentation projects at
our new Sphinx theme.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 132)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="dask-sphinx-theme"&gt;
&lt;h1&gt;3: Dask Sphinx Theme&lt;/h1&gt;
&lt;p&gt;To give a uniform sense of style we developed our own Sphinx HTML theme. This
inherits from ReadTheDocs’ theme, but with changed styling to match Dask color
and visual style. We publish this theme as a &lt;a class="reference external" href="https://pypi.org/project/dask-sphinx-theme/"&gt;package on
PyPI&lt;/a&gt; that all of our projects’
Sphinx builds can import and use if they want. We can change style in this one
package and publish to PyPI and all of the projects will pick up those changes
on their next build without having to copy stylesheets around to different
repositories.&lt;/p&gt;
&lt;p&gt;This allows several different projects to evolve content (which they care
about) and build process separately from style (which they typically don’t care
as much about). We have a single style sheet that gets used everywhere easily.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 147)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="move-dask-blogging-to-blog-dask-org"&gt;
&lt;h1&gt;4: Move Dask Blogging to blog.dask.org&lt;/h1&gt;
&lt;p&gt;Previously most announcements about Dask were written and published from one of
the maintainers’ personal blogs. This split information about the project and
made it hard for people to discover good content. There also wasn’t a good way
for a community member to suggest a blog for distribution to the general
community, other than by starting their own.&lt;/p&gt;
&lt;p&gt;Now we have an official blog at &lt;a class="reference external" href="https://blog.dask.org"&gt;blog.dask.org&lt;/a&gt; which
serves files submitted to
&lt;a class="reference external" href="https://github.com/dask/dask-blog"&gt;github.com/dask/dask-blog&lt;/a&gt;. These posts
are simple markdown files that should be easy for people to generate. For
example the source for this post is available at
&lt;a class="reference external" href="https://github.com/dask/dask-blog/blob/gh-pages/_posts/2018-09-27-docs-refactor.md"&gt;&lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;github.com/dask/dask-blog/blob/gh-pages/_posts/2018-09-27-docs-refactor.md&lt;/span&gt;&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We encourage community members to share posts about work they’ve done with Dask
by submitting pull requests to that repository.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 165)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="host-examples-as-both-static-html-and-live-binder-sessions"&gt;
&lt;h1&gt;5: Host Examples as both static HTML and live Binder sessions&lt;/h1&gt;
&lt;p&gt;The Dask community maintains a set of example notebooks that show people how to
use Dask in a variety of ways. These notebooks live at
&lt;a class="reference external" href="https://github.com/dask/dask-examples"&gt;github.com/dask/dask-examples&lt;/a&gt; and are
easy for users to download and run.&lt;/p&gt;
&lt;p&gt;To get more value from these notebooks we now expose them in two additional
ways:&lt;/p&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;&lt;p&gt;As static HTML at &lt;a class="reference external" href="https://examples.dask.org"&gt;examples.dask.org&lt;/a&gt;, rendered
with the &lt;a class="reference external" href="https://nbsphinx.readthedocs.io/en/latest/"&gt;nbsphinx&lt;/a&gt; plugin.&lt;/p&gt;
&lt;p&gt;Seeing them statically rendered and being able to quickly navigate between
them really increases the pleasure of exploring them. We hope that this
encourages users to explore more broadly.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As live-runnable notebooks on the cloud using &lt;a class="reference external" href="https://mybinder.org"&gt;mybinder.org&lt;/a&gt;.
You can play with any of these notebooks by clicking on this button:
&lt;a class="reference external" href="https://mybinder.org/v2/gh/dask/dask-examples/main?urlpath=lab"&gt;&lt;img alt="Binder" src="https://mybinder.org/badge.svg" /&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This allows people to explore more deeply. Also, because we’ve connected
up the Dask JupyterLab extension to this environment, users get an
immediate instinctual experience of what parallel computing feels like (if
you haven’t used the dask dashboard during computation you really should
give that link a try).&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now that these examples get much more exposure we hope that this encourages
community members to submit new examples. We hope that by providing
infrastructure more content creators will come as well.&lt;/p&gt;
&lt;p&gt;We also encourage other projects to take a look at what we’ve done in
&lt;a class="reference external" href="https://github.com/dask/dask-examples"&gt;github.com/dask/dask-examples&lt;/a&gt;. We
think that this model might be broadly useful across other projects.&lt;/p&gt;
&lt;aside class="system-message"&gt;
&lt;p class="system-message-title"&gt;System Message: WARNING/2 (&lt;span class="docutils literal"&gt;/opt/build/repo/2018/09/27/docs-refactor.md&lt;/span&gt;, line 200)&lt;/p&gt;
&lt;p&gt;Document headings start at H2, not H1 [myst.header]&lt;/p&gt;
&lt;/aside&gt;
&lt;/section&gt;
&lt;section id="conclusion"&gt;
&lt;h1&gt;Conclusion&lt;/h1&gt;
&lt;p&gt;Thank you for reading. We hope that this post pushes readers to re-explore
Dask’s documentation, and that it pushes developers to consider some of the
approaches above for their own projects.&lt;/p&gt;
&lt;/section&gt;
</content>
    <link href="https://blog.dask.org/2018/09/27/docs-refactor/"/>
    <summary>This work is supported by Anaconda Inc</summary>
    <category term="Programming" label="Programming"/>
    <category term="Python" label="Python"/>
    <category term="dask" label="dask"/>
    <category term="scipy" label="scipy"/>
    <published>2018-09-27T00:00:00+00:00</published>
  </entry>
</feed>
