Files
jekyll-build-pages/test_projects/mojombo/_expected/2010/08/23/readme-driven-development.html
T

141 lines
8.3 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Readme Driven Development</title>
<meta name="author" content="Tom Preston-Werner" />
<link href="http://feeds.feedburner.com/tom-preston-werner" rel="alternate" title="Tom Preston-Werner" type="application/atom+xml" />
<meta name="readability-verification" content="QCzSs992GxmRYRKVpPeZ6LE2tS8aYKxsSSQKV8YM"/>
<!-- syntax highlighting CSS -->
<link rel="stylesheet" href="/css/syntax.css" type="text/css" />
<!-- Homepage CSS -->
<link rel="stylesheet" href="/css/screen.css" type="text/css" media="screen, projection" />
<!-- Typekit -->
<script type="text/javascript" src="http://use.typekit.com/jpd0pfm.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
</head>
<body>
<!-- ClickTale Top part -->
<script type="text/javascript">
var WRInitTime=(new Date()).getTime();
</script>
<!-- ClickTale end of Top part -->
<div class="site">
<div class="title">
<a href="/">Tom Preston-Werner</a>
<a class="extra" href="/">home</a>
</div>
<div id="post">
<h1 id="readme-driven-development">Readme Driven Development</h1>
<p class="meta">23 August 2010 - San Francisco</p>
<p>I hear a lot of talk these days about TDD and BDD and Extreme Programming and SCRUM and stand up meetings and all kinds of methodologies and techniques for developing better software, but its all irrelevant unless the software were building meets the needs of those that are using it. Let me put that another way. A perfect implementation of the wrong specification is worthless. By the same principle a beautifully crafted library with no documentation is also damn near worthless. If your software solves the wrong problem or nobody can figure out how to use it, theres something very bad going on.</p>
<p>Fine. So how do we solve this problem? Its easier than you think, and its important enough to warrant its very own paragraph.</p>
<p>Write your Readme first.</p>
<p>First. As in, before you write any code or tests or behaviors or stories or ANYTHING. I know, I know, were programmers, dammit, not tech writers! But thats where youre wrong. Writing a Readme is absolutely essential to writing good software. Until youve written about your software, you have no idea what youll be coding. Between The Great Backlash Against Waterfall Design and The Supreme Acceptance of Agile Development, something was lost. Dont get me wrong, waterfall design takes things way too far. Huge systems specified in minute detail end up being the WRONG systems specified in minute detail. We were right to strike it down. But what took its place is too far in the other direction. Now we have projects with short, badly written, or entirely missing documentation. Some projects dont even have a Readme!</p>
<p>This is not acceptable. There must be some middle ground between reams of technical specifications and no specifications at all. And in fact there is. That middle ground is the humble Readme.</p>
<p>Its important to distinguish Readme Driven Development from Documentation Driven Development. RDD could be considered a subset or limited version of DDD. By restricting your design documentation to a single file that is intended to be read as an introduction to your software, RDD keeps you safe from DDD-turned-waterfall syndrome by punishing you for lengthy or overprecise specification. At the same time, it rewards you for keeping libraries small and modularized. These simple reinforcements go a long way towards driving your project in the right direction without a lot of process to ensure you do the right thing.</p>
<p>By writing your Readme first you give yourself some pretty significant advantages:</p>
<ul>
<li>
<p>Most importantly, youre giving yourself a chance to think through the project without the overhead of having to change code every time you change your mind about how something should be organized or what should be included in the Public API. Remember that feeling when you first started writing automated code tests and realized that you caught all kinds of errors that would have otherwise snuck into your codebase? Thats the exact same feeling youll have if you write the Readme for your project before you write the actual code.</p>
</li>
<li>
<p>As a byproduct of writing a Readme in order to know what you need to implement, youll have a very nice piece of documentation sitting in front of you. Youll also find that its much easier to write this document at the beginning of the project when your excitement and motivation are at their highest. Retroactively writing a Readme is an absolute drag, and youre sure to miss all kinds of important details when you do so.</p>
</li>
<li>
<p>If youre working with a team of developers you get even more mileage out of your Readme. If everyone else on the team has access to this information before youve completed the project, then they can confidently start work on other projects that will interface with your code. Without any sort of defined interface, you have to code in serial or face reimplementing large portions of code.</p>
</li>
<li>
<p>Its a lot simpler to have a discussion based on something written down. Its easy to talk endlessly and in circles about a problem if nothing is ever put to text. The simple act of writing down a proposed solution means everyone has a concrete idea that can be argued about and iterated upon.</p>
</li>
</ul>
<p>Consider the process of writing the Readme for your project as the true act of creation. This is where all your brilliant ideas should be expressed. This document should stand on its own as a testament to your creativity and expressiveness. The Readme should be the single most important document in your codebase; writing it first is the proper thing to do.</p>
<p></p>
<p><a href="http://news.ycombinator.com/item?id=1627246">Discuss this post on Hacker News</a></p>
</div>
<div id="related">
<h2>Related Posts</h2>
<ul class="posts">
<li><span>10 Nov 2016</span> &raquo; <a href="/2016/11/10/snyk.html">Snyk - Automatically Scan and Fix Ruby and Nodejs Vulnerabilities</a></li>
<li><span>19 Jun 2015</span> &raquo; <a href="/2015/06/19/replicated.html">Replicated - An Easier Path from SaaS to Enterprise</a></li>
<li><span>21 Apr 2014</span> &raquo; <a href="/2014/04/21/farewell-github-hello-immersive-computing.html">Farewell GitHub, Hello Immersive Computing</a></li>
</ul>
</div>
<div class="footer">
<div class="contact">
<p>
Tom Preston-Werner
<br />
Cofounder of
<a href="https://codestarter.org/">Codestarter</a>,
<a href="https://github.com/">GitHub</a>
<br />
[email protected]
</p>
</div>
<div class="contact">
<p>
<a href="http://github.com/mojombo/">github.com/mojombo</a><br />
<a href="http://twitter.com/mojombo/">twitter.com/mojombo</a><br />
</p>
</div>
<div class="rss">
<a href="http://feeds.feedburner.com/tom-preston-werner">
<img src="/images/rss.png" alt="Subscribe to RSS Feed" />
</a>
</div>
</div>
</div>
<a href="http://github.com/mojombo"><img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub" /></a>
<!-- ClickTale Bottom part -->
<div id="ClickTaleDiv" style="display: none;"></div>
<script type="text/javascript">
if(document.location.protocol!='https:')
document.write(unescape("%3Cscript%20src='http://s.clicktale.net/WRb.js'%20type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
if(typeof ClickTale=='function') ClickTale(206,0.3,"www03");
</script>
<!-- ClickTale end of Bottom part -->
<!-- Google Analytics -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-6016902-1");
pageTracker._trackPageview();
</script>
<!-- Google Analytics end -->
</body>
</html>