{"id":870,"date":"2009-07-30T13:22:24","date_gmt":"2009-07-30T17:22:24","guid":{"rendered":"http:\/\/www.red-sweater.com\/blog\/?p=870"},"modified":"2009-07-30T13:22:27","modified_gmt":"2009-07-30T17:22:27","slug":"easy-features","status":"publish","type":"post","link":"https:\/\/redsweater.com\/blog\/870\/easy-features","title":{"rendered":"Easy Features"},"content":{"rendered":"<p>Brent Simmons writes on the <a href=\"http:\/\/inessential.com\/2009\/07\/30\/anatomy_of_a_feature\">Anatomy Of A Feature<\/a>, using his recent work in <a href=\"http:\/\/www.newsgator.com\/INDIVIDUALS\/NETNEWSWIRE\/\">NetNewsWire<\/a> to add support for the popular <a href=\"http:\/\/www.instapaper.com\/\">Instapaper<\/a> service: <\/p>\n<blockquote><p>It\u2019s tempting to think that adding a feature like this is just about adding the functionality \u2014 but there\u2019s a bunch more to it than that.<\/p><\/blockquote>\n<p>\nHere you see the gory, deliberate details that a responsible developer must consider when adding even what seems like an incredibly &#8220;easy feature.&#8221;\n<\/p>\n<p>\nWithout a doubt, the part of my job that slows me down the most is exactly this kind of consideration. I <em>want<\/em> to add a new feature, but not until I have evaluated how the feature best fits in the structure of the application as it exists today.\n<\/p>\n<p>\nSometimes even an &#8220;easy feature&#8221; requires massive overhaul of the application, so that it doesn&#8217;t feel tacked-on or cheaply done. If the feature is important enough, it&#8217;s worth practically rewriting your application, just to add something that looks like it must have taken all of 10 minutes to do.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Brent Simmons writes on the Anatomy Of A Feature, using his recent work in NetNewsWire to add support for the popular Instapaper service: It\u2019s tempting to think that adding a feature like this is just about adding the functionality \u2014 but there\u2019s a bunch more to it than that. Here you see the gory, deliberate [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42,34,15],"tags":[],"class_list":["post-870","post","type-post","status-publish","format-standard","hentry","category-ideas","category-links","category-programming"],"_links":{"self":[{"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/posts\/870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/comments?post=870"}],"version-history":[{"count":1,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/posts\/870\/revisions"}],"predecessor-version":[{"id":871,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/posts\/870\/revisions\/871"}],"wp:attachment":[{"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/media?parent=870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/categories?post=870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/redsweater.com\/blog\/wp-json\/wp\/v2\/tags?post=870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}