{"id":487,"date":"2013-01-08T19:29:00","date_gmt":"2013-01-09T00:29:00","guid":{"rendered":"https:\/\/www.goer.org\/wordpress\/the_25_percent_rule_for_editing"},"modified":"2013-11-17T05:59:37","modified_gmt":"2013-11-17T05:59:37","slug":"the_25_percent_rule_for_editing","status":"publish","type":"post","link":"https:\/\/www.goer.org\/Journal\/2013\/01\/the_25_percent_rule_for_editing.html","title":{"rendered":"Tech Pubs Tuesday: The 25% Rule for Editing (AKA Be Aggressive. Be-ee Aggressive!)"},"content":{"rendered":"<p>Even for a professional writer, long editing sessions are a challenge. Was I actually editing those last ten pages, or did I nod off around page three?<\/p>\n<p>To help make sure I&#8217;ve been editing aggressively enough, I use a simple checkpoint rule:<\/p>\n<blockquote>\n<p>After editing a first draft, the text should be 25% shorter.<\/p>\n<\/blockquote>\n<p>Cutting 25% probably sounds like a lot. How does this work in practice? Let&#8217;s take a look at two short real-world examples.<\/p>\n<h2>Example 1: jQuery Document Ready<\/h2>\n<p>From the &#8220;How jQuery Works&#8221; tutorial, &#8220;<a href=\"http:\/\/docs.jquery.com\/How_jQuery_Works#Launching_Code_on_Document_Ready\">Launching Code on Document Ready<\/a>&#8220;:<\/p>\n<blockquote>\n<p>The first thing that most Javascript programmers end up doing is adding some code to their program, similar to this:<\/p>\n<p>window.onload = function(){ alert(&#8220;welcome&#8221;); }<\/p>\n<p>Inside of which is the code that you want to run right when the page is loaded. Problematically, however, the Javascript code isn&#8217;t run until all images are finished downloading (this includes banner ads). The reason for using <code>window.onload<\/code> in the first place is that the HTML &#8216;document&#8217; isn&#8217;t finished loading yet, when you first try to run your code.<\/p>\n<\/blockquote>\n<p>Breaking this down step-by-step:<\/p>\n<ol>\n<li>\n<p>&#8220;The first thing that most Javascript programmers end up doing is adding some code to their program, similar to this&#8221; &#8212; Already I&#8217;m not a fan of this intro, as it doesn&#8217;t explain to the poor newbie jQuery developer <em>why<\/em> &#8220;most&#8221; JavaScript programmers do this.<\/p>\n<ul>\n<li>&#8220;The first thing that&#8221; &#8212; This is throat-clearing. Instead lead off with, &#8220;Most JavaScript programmers&#8230;&#8221; or more accurately, &#8220;Many JavaScript programmers&#8230;&#8221;<\/li>\n<li>&#8220;end up doing is&#8221; &#8212; More throat-clearing. Instead, say what the programmers are doing directly.<\/li>\n<li>&#8220;adding some code to their program&#8221; &#8212; Too vague. Replace with something more specific, like &#8220;wrap their code in an <code>onload<\/code> function&#8230;&#8221;<\/li>\n<li>&#8220;similar to this:&#8221; &#8212; Also unnecessary. Launching into an example already implies &#8220;similar to this.&#8221; If you <em>do<\/em> want to have a transition to the example, you can always go with the classic, &#8220;For example:&#8221;<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>&#8220;Inside of which is the code that you want to run right when the page is loaded.&#8221; &#8212; The first paragraph now already says most of this, thanks to the &#8220;wrap their code in an <code>onload<\/code> function.&#8221; The slightly new information is the &#8220;right when the page is loaded.&#8221; Delete this sentence, but remember that last bit&#8230;<\/p>\n<\/li>\n<li>\n<p>&#8220;Problematically, however,&#8221; &#8212; Replace with, &#8220;Unfortunately,&#8221;<\/p>\n<\/li>\n<li>\n<p>&#8220;&#8230; the JavaScript code isn&#8217;t run until all images are finished downloading (this includes banner ads).&#8221; &#8212; Minor stylistic changes: &#8220;isn&#8217;t run&#8221; to &#8220;doesn&#8217;t run&#8221; and &#8220;(this includes banner ads)&#8221; to &#8220;, including banner ads.&#8221; Parenthetical statements are a bit harder to parse, so I try to use them only when necessary.<\/p>\n<\/li>\n<li>\n<p>&#8220;The reason for using <code>window.onload<\/code> in the first place is that the HTML &#8216;document&#8217; isn&#8217;t finished loading yet, when you first try to run your code.&#8221; &#8212; Finally, here is the reasoning we were looking for back in the first paragraph. Why do &#8220;most JavaScript programmers&#8221; use onload? Because they are waiting for the browser to finish loading the document. So let&#8217;s say that, and while we&#8217;re at it, move the concept up to the top of the section. &#8220;To ensure that their code runs after the browser finishes loading the document&#8230;&#8221;<\/p>\n<\/li>\n<\/ol>\n<p>The revised passage is now:<\/p>\n<blockquote>\n<p>To ensure that their code runs after the browser finishes loading the document, many JavaScript programmers wrap their code in an onload function:<\/p>\n<p>window.onload = function(){ alert(&#8220;welcome&#8221;); }<\/p>\n<p>Unfortunately, the code doesn&#8217;t run until all images are finished downloading, including banner ads.<\/p>\n<\/blockquote>\n<h2>Example 2: Facebook API<\/h2>\n<p>From the Facebook Graph API documentation for <a href=\"https:\/\/developers.facebook.com\/docs\/reference\/api\/achievement\/\">Achievement(Instance)<\/a>:<\/p>\n<blockquote>\n<p>The <code>achievement(Instance)<\/code> object represents the achievement achieved by a user for a particular app.<\/p>\n<p>You can read more about achievements <a href=\"https:\/\/developers.facebook.com\/docs\/achievements\/\">here<\/a>.<\/p>\n<p>An app can always access <code>achievement(instance)<\/code> associated with their app with an app or user <code>access_token<\/code> associated with their app. To access achievements for a user for other apps they require <code>user_games_activity<\/code> permission and to access achievements for the user&#8217;s friends, the app requires <code>friends_games_activity<\/code> permission.<\/p>\n<\/blockquote>\n<p>Breaking this down step-by-step:<\/p>\n<ol>\n<li>\n<p>&#8220;&#8230; represents the achievement achieved by a user&#8230;&#8221; &#8212; The obvious weak spot is the &#8220;achievement achieved.&#8221; Eliminating this repetition and changing the clause to active yields, &#8220;represents a user&#8217;s achievement for a particular app.&#8221;<\/p>\n<\/li>\n<li>\n<p>&#8220;You can read more about achievements here.&#8221; &#8212; A &#8220;click here&#8221; sentence! Excellent, a freebie. Just link &#8220;achievement&#8221; above and then nuke this sentence entirely.<\/p>\n<\/li>\n<li>\n<p>&#8220;An app can always access achievement(instance) associated with their app with an app or user <code>access_token<\/code> associated with their app.&#8221; &#8212; This sentence is hopelessly mangled. Without talking to an actual Facebook engineer, my best stab at this sentence is:<\/p>\n<ul>\n<li>&#8220;An app&#8221; &#8212; Shorten to just, &#8220;Apps.&#8221; This is just a minor stylistic change.<\/li>\n<li>&#8220;achievement(instance) associated with their app&#8221; &#8212; Shorten to, &#8220;their own achievements.&#8221; Since this whole section is about the <code>achievement(instance)<\/code> object, it&#8217;s unambiguous here to just refer to them as &#8220;achievements&#8221; most of the time. As a side benefit, it&#8217;s not clear what Facebook&#8217;s convention is around capitalizing <code>achievement(instance)<\/code>, so using &#8220;achievements&#8221; sidesteps this style issue.<\/li>\n<li>&#8220;with an app or user <code>access_token<\/code> associated with their app.&#8221; &#8212; Change to, &#8220;using an app <code>access_token<\/code> or user <code>access_token<\/code>.&#8221; The &#8220;associated with their app&#8221; is implied given the sentence that follows. Also, clarify whether we&#8217;re talking about a single type of access token (a user or app access token), or two types of access tokens (a user access token or an app access token). Here, I&#8217;m guessing it&#8217;s the latter.<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>&#8220;To access achievements for a user for other apps they require <code>user_games_activity<\/code> permission&#8221; &#8212; Break this off into a new sentence, &#8220;Accessing a user&#8217;s achievements in other apps requires <code>user_games_activity<\/code> permission.&#8221;<\/p>\n<ul>\n<li>&#8220;To access&#8221; &#8212; Change to &#8220;Accessing.&#8221; Another minor stylistic change. The main reason I like it better is that it makes it a bit easier to get rid of the &#8220;they&#8221; later on in the sentence.<\/li>\n<li>&#8220;achievements for a user for other apps&#8221; &#8212; Eliminate the double &#8220;for&#8221; and shorten to, a &#8220;user&#8217;s achievements in other apps.&#8221;<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>&#8220;and to access achievements for the user&#8217;s friends, the app requires <code>friends_games_activity<\/code> permission.&#8221; &#8212; Create a parallel sentence to the previous one, &#8220;Accessing a user&#8217;s friend&#8217;s achievements requires <code>friends_games_activity<\/code> permission.&#8221; Saying &#8220;user&#8217;s friend&#8217;s achievements&#8221; is a little dicey, but I can live with it.<\/p>\n<\/li>\n<\/ol>\n<p>The revised passage is now:<\/p>\n<blockquote>\n<p>The <code>achievement(Instance)<\/code> object represents a user&#8217;s <a href=\"https:\/\/developers.facebook.com\/docs\/achievements\/\">achievement<\/a> for a particular app.<\/p>\n<p>Apps can always access their own achievements using an app <code>access_token<\/code> or user <code>access_token<\/code>. Accessing a user&#8217;s achievements in other apps requires <code>user_games_activity<\/code> permission. Accessing a user&#8217;s friend&#8217;s achievements requires <code>friends_games_activity<\/code> permission.<\/p>\n<\/blockquote>\n<h1>Conclusion<\/h1>\n<pre><code>$ wc \/tmp\/*.txt\n5 67 475 \/tmp\/facebook-orig.txt\n3 43 354 \/tmp\/facebook-revised.txt\n5 85 522 \/tmp\/jquery-orig.txt\n5 42 301 \/tmp\/jquery-revised.txt\n18 237 1652 total\n<\/code><\/pre>\n<p>There are a couple of takeaways here.<\/p>\n<p>The first is that you won&#8217;t reach the 25% by tinkering at the margins, fixing little issues around grammar and wordiness. You need to dive in and rework entire sentences, paragraphs, and sections. Don&#8217;t worry &#8212; in a first draft you will always, always find sections that you can delete or radically shorten. The 25% Rule is there to force you to do the harder, more important work of rethinking the text.<\/p>\n<p>The second is that the overall idea is not, &#8220;Whoever reduces the text the most WINS AT TECH WRITING!&#8221; The idea is only that <em>if<\/em> you are editing a first draft aggressively enough, <em>then<\/em> you should probably see a reduction of around 25% or more.<\/p>\n<p>In other words, the 25% Rule is just a rough self-check for your edit. If you&#8217;ve crossed the 25% threshold, you&#8217;re probably doing okay. There are no &#8220;extra points&#8221; for going further.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The overall idea is not, &#8220;Whoever reduces the text the most WINS AT TECH WRITING!&#8221; It&#8217;s that *if* you are editing a first draft aggressively enough, *then* you should probably see a reduction of around 25% or more.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-487","post","type-post","status-publish","format-standard","hentry","category-technical-writing"],"_links":{"self":[{"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/posts\/487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/comments?post=487"}],"version-history":[{"count":5,"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/posts\/487\/revisions"}],"predecessor-version":[{"id":562,"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/posts\/487\/revisions\/562"}],"wp:attachment":[{"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/media?parent=487"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/categories?post=487"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.goer.org\/Journal\/wp-json\/wp\/v2\/tags?post=487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}