{"id":196,"date":"2005-07-18T10:08:30","date_gmt":"2005-07-18T09:08:30","guid":{"rendered":"http:\/\/www.andrewj.com\/blog\/index.php\/2005\/interfaces-and-document-ids-a-rant\/"},"modified":"2005-07-18T10:08:30","modified_gmt":"2005-07-18T09:08:30","slug":"interfaces-and-document-ids-a-rant","status":"publish","type":"post","link":"https:\/\/www.andrewj.com\/blog\/2005\/interfaces-and-document-ids-a-rant\/","title":{"rendered":"Interfaces and Document IDs &#8211; A Rant"},"content":{"rendered":"<p>Please forgive me if this sounds like a rant, but I&#8217;m very annoyed. Someone who should know better has without warning changed a public interface, with the inevitable effect that dependent systems, in particular my blog, have broken. The offender? The mighty Microsoft. <\/p>\n<p>Regular readers will know that I&#8217;ve highlighted several articles published in Microsoft&#8217;s Architecture Journal. A week ago I went to post a note on another article, to find that all my previous hyperlinks were broken. Thanks to my regular correspondents Richard Veryard and Arnon Rotem-Gal-Oz I discovered that the cause is an internal reorganisation within Microsoft, and there is a new web location for the journal, although it wouldn&#8217;t surprise me if that changes again. (To add insult to injury, the new URLs are very cryptic, and don&#8217;t paste easily into my blog!) <\/p>\n<p>Now if you follow Microsoft&#8217;s advice when building systems, interfaces should be immutable. Otherwise you just don&#8217;t know what will break. The Microsoft advice is to never change an existing interface &#8211; if you need a different one, create a new interface, or at least a different version. And maintain the old one as long as dependent systems need it. <\/p>\n<p>Microsoft are actually very good (not perfect, but quite good) at following this rule in their software systems. But they don&#8217;t seem to understand that the same rule should apply to that big public interface called the website. There are, of course, perfectly good strategies which would avoid this problem.<\/p>\n<p>First, don&#8217;t try to reflect internal structural changes in the MSDN website. Doing so is like changing a system&#8217;s interface just because the implementation has been updated &#8211; the opposite of good practice. The public interface should be independent of implementation details. <\/p>\n<p>Second, if you must create a new interface, keep the old one working. In systems, you can usually wrap the new interface to mimic the old. The same is true for a website. A set of auto-redirect pages at the old addresses, and I would never have even noticed the change. <\/p>\n<p>Unfortunately Microsoft have done neither of these. And they seem to have a corporate blindness to the fact that documents are interfaces too. MS SharePoint is based on a web idiom, in which documents are identified by their position in a hierarchy. Re-arrange the hierarchy, and any external references or cross-references suddenly break. <\/p>\n<p>Professional-quality document management systems don&#8217;t do this. They identify and control documents via a unique, immutable key into the underlying repository, and the primary document access via this key is guaranteed. Of course, you also want to show the document in a hierarchical structure, but any such entry is just a pointer to the underlying document. And if you want to change the hierarchy, or expose the same underlying document at multiple places in multiple hierarchies, it&#8217;s easy to do. The world of blogging has a similar concept, with &#8220;permalinks&#8221; which (should) survive a reorganisation. <\/p>\n<p>Memo to Microsoft: <em>links are interfaces too!<\/em> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Please forgive me if this sounds like a rant, but I&#8217;m very annoyed. Someone who should know better has without warning changed a public interface, with the inevitable effect that dependent systems, in particular my blog, have broken. The offender? &hellip; <a href=\"https:\/\/www.andrewj.com\/blog\/2005\/interfaces-and-document-ids-a-rant\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"_links":{"self":[{"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/posts\/196"}],"collection":[{"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/comments?post=196"}],"version-history":[{"count":0,"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/posts\/196\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/media?parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/categories?post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.andrewj.com\/blog\/wp-json\/wp\/v2\/tags?post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}