{"id":162,"date":"2020-04-28T12:53:20","date_gmt":"2020-04-28T16:53:20","guid":{"rendered":"http:\/\/sites.nd.edu\/marble\/?p=162"},"modified":"2020-05-08T15:06:32","modified_gmt":"2020-05-08T19:06:32","slug":"documenting-decisions-to-build-buy-in","status":"publish","type":"post","link":"https:\/\/sites.nd.edu\/marble\/documenting-decisions-to-build-buy-in\/","title":{"rendered":"Documenting Decisions to Build Buy-In"},"content":{"rendered":"<p>by Jeremy Friesen&nbsp;<\/p>\n<h2><strong>Introduction<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">In any long-running project at <a href=\"https:\/\/library.nd.edu\/\">Hesburgh Libraries<\/a>, our developer teams make countless decisions every day. Some decisions are big and some are small. \u2014 some affect a few people while others have an impact on the entire organization.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Inevitably, these decisions evolve over time.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">Sometimes we have to adjust or even reverse a decision after gathering more information or gaining experience with a tool or software. We don\u2019t sweat the ebb and flow \u2014 we welcome it. Embracing decision-making as an evolutionary process is one of our guiding principles for a healthy team culture.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We also realize that decisions are only as good as the documentation and communication processes that underpin them.<\/span><\/p>\n<div id=\"attachment_165\" style=\"width: 2570px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-165\" class=\"wp-image-165 size-full\" src=\"http:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1981_031_543-v0001-scaled.jpg\" alt=\"Photograph of a horse from various angles \" width=\"2560\" height=\"1015\" srcset=\"https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1981_031_543-v0001-scaled.jpg 2560w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1981_031_543-v0001-300x119.jpg 300w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1981_031_543-v0001-1024x406.jpg 1024w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1981_031_543-v0001-768x304.jpg 768w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1981_031_543-v0001-1536x609.jpg 1536w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1981_031_543-v0001-2048x812.jpg 2048w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1981_031_543-v0001-500x198.jpg 500w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><p id=\"caption-attachment-165\" class=\"wp-caption-text\">Documenting our decisions from every angle helps us understand where we&#8217;re going and why. Image: Eadweard Muybridge, &#8220;Eagle&#8221; Walking, Free, plate 576 from Animal Locomotion, 1845-1904, albumen silver print. The Janos Scholz collection of 19th century photography, Snite Museum of Art, University of Notre Dame, 1981.031.543.<\/p><\/div>\n<p><span style=\"font-weight: 400\">To this end, we use consistent documentation and transparent communication to serve as a two-way roadmap for new challenges, team discussions, and retrospectives in the midst of a rapidly changing landscape.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">These decision documents also help to facilitate conversations with stakeholders and build enduring relationships with project partners.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The cases below illustrate how decision documents and transparent communications during the MARBLE project have contributed to team success and project impact.<\/span><\/p>\n<h2><strong>A tale of two documented decisions<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">One of the goals of the MARBLE software development project funded by the <\/span><a href=\"https:\/\/mellon.org\/\"><span style=\"font-weight: 400\">Andrew W. Mellon Foundation<\/span><\/a><span style=\"font-weight: 400\"> is to create a unified discovery for digitized cultural heritage collections held by the <\/span><a href=\"https:\/\/sniteartmuseum.nd.edu\/\"><span style=\"font-weight: 400\">Snite Museum of Art<\/span><\/a><span style=\"font-weight: 400\"> and <\/span><a href=\"https:\/\/library.nd.edu\/\"><span style=\"font-weight: 400\">Hesburgh Libraries<\/span><\/a><span style=\"font-weight: 400\"> at the <\/span><a href=\"https:\/\/www.nd.edu\/\"><span style=\"font-weight: 400\">University of Notre Dame<\/span><\/a><span style=\"font-weight: 400\">.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">Our immediate aim is to make these objects discoverable in the context of a collaborative digital collections platform. We also surmised that we may want to someday make the digitized objects discoverable through our general library catalog.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">Given these aspirations, we decided to leverage the library-wide discovery system as our search and discovery interface. library-wide discovery system is a vendor-supplied search index software used by many libraries around the world as their primary catalog.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">On the surface, this decision ran contrary to another goal of our project: to develop and release open-source software.<\/span><\/p>\n<p><span style=\"font-weight: 400\">To reconcile these apparent contradictions and keep our road map intact, I wrote a decision document supporting the use of our library-wide discovery system and how we would proceed with delivering open-source software. We clarified that we would use an API to interact with our search index. (An API, or Application Programming Interface, is a protocol or specification that allows information to transfer from one system to another. Using an API is a simple and common practice in developing new software.)&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">In this case, we viewed the decision to interact with an API as a way to support other institutions or potential adopters that don\u2019t use our<\/span><span style=\"font-weight: 400\"> discovery system<\/span><span style=\"font-weight: 400\">. In other words, our solution would be built in such a way that another institution could connect with their search index of choice.<\/span><\/p>\n<p><span style=\"font-weight: 400\">We shared our draft decision with project leadership, stakeholders, and developer teams to solicit feedback. From the feedback, we amended the draft document to reflect any new considerations, questions, and challenges.<\/span><\/p>\n<p><span style=\"font-weight: 400\">With a decision document firm in hand, we <\/span><span style=\"font-weight: 400\">began working on implementing our solution<\/span><span style=\"font-weight: 400\">. We gathered help from other library-wide discovery system adopters. (Thank you, <\/span><a href=\"https:\/\/www.library.northwestern.edu\/\"><span style=\"font-weight: 400\">Northwestern Libraries<\/span><\/a><span style=\"font-weight: 400\">!). We dove deeper into our usage of library-wide discovery system, expanding our expertise and understanding of a technology we have long used.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Then we hit a wall.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">Our user interviews identified full-text search as a key desired feature. According to library-wide discovery system documentation, this functionality should have worked. But, it didn&#8217;t, and we entered into a &#8220;waiting on vendor response&#8221; holding pattern.<\/span><\/p>\n<p><span style=\"font-weight: 400\">While waiting, one of our developers explored ElasticSearch as another option.. After only a&nbsp; few afternoons of work and testing, ElasticSearch proved to be a viable alternative. Within a week, we referenced our documents. We reassessed our prior decision to leverage our library-wide discovery system and chose to pivot towards ElasticSearch.&nbsp;<\/span><\/p>\n<div id=\"attachment_166\" style=\"width: 1734px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-166\" class=\"wp-image-166 size-full\" src=\"http:\/\/sites.nd.edu\/marble\/files\/2020\/05\/2004_053_004-v0001-scaled.jpg\" alt=\"Drawing of a dancer\" width=\"1724\" height=\"2560\" srcset=\"https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/2004_053_004-v0001-scaled.jpg 1724w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/2004_053_004-v0001-202x300.jpg 202w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/2004_053_004-v0001-689x1024.jpg 689w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/2004_053_004-v0001-768x1141.jpg 768w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/2004_053_004-v0001-1034x1536.jpg 1034w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/2004_053_004-v0001-1379x2048.jpg 1379w\" sizes=\"auto, (max-width: 1724px) 100vw, 1724px\" \/><p id=\"caption-attachment-166\" class=\"wp-caption-text\">Pivoting on a decision takes balance and flexibility. Image: Edgar Degas, Study of a Ballet Dancer, ca. 1880-1885, brown conte crayon and pink chalk on paper. Gift of John D. Reilly ND&#8217;63, &#8217;64 B.S., Snite Museum of Art, University of Notre Dame, 2004.053.004.<\/p><\/div>\n<p><span style=\"font-weight: 400\">Again, I wrote up a decision document outlining the rationale, process, and lessons learned. For example:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">We found that ElasticSearch allowed us to implement the full-text search feature.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">ElasticSearch also performed faster searches<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">There existed open-source ReactJS components for facet rendering, something we were going to need to create in our previous approach.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Since ElasticSearch is open-source, our own developers can work out bugs instead of waiting on a vendor.&nbsp;<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Our decision to explore our existing library-wide discovery system also produced useful outcomes in that we have a deeper understanding of how to better leverage our library-wide discovery system in our current workflows.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">The quick swap from one system to another confirmed for us that we have a robust architecture.&nbsp;<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Finally, we have postponed the goal of ensuring that all campus cultural heritage content is in our library search index, but our software design will make this work easier going forward.<\/span><\/li>\n<\/ul>\n<h2><strong>Amazon Web Services: Are you being serverless?<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">Another problem we encountered during the development of the MARBLE project was choosing an <\/span><a href=\"https:\/\/iiif.io\/\"><span style=\"font-weight: 400\">International Image Interoperability Framework<\/span><\/a><span style=\"font-weight: 400\"> (IIIF) compliant image server.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">Early in the project, we chose to implement Cantaloupe from the list of <\/span><a href=\"https:\/\/iiif.io\/apps-demos\/#image-servers\"><span style=\"font-weight: 400\">known server options<\/span><\/a><span style=\"font-weight: 400\">. With that decision documented and shared, we built blueprints to deploy our Cantaloupe instance into Amazon Web Services (AWS) as a <\/span><a href=\"https:\/\/aws.amazon.com\/fargate\/\"><span style=\"font-weight: 400\">Fargate container<\/span><\/a><span style=\"font-weight: 400\">.<\/span><\/p>\n<p><span style=\"font-weight: 400\">This worked to get us started.<\/span><\/p>\n<p><span style=\"font-weight: 400\">However, as we added more and more images to Cantaloupe, we encountered problems such as spikes in response times, incidents of high error rates, numerous restarts. We soon discovered the root cause: Cantaloupe&#8217;s architecture conflicts with AWS&#8217;s Fargate container implementation.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Our options were to move to a more expensive AWS service or look for something else and a possible contender emerged.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Our colleagues at Northwestern University, David Schober and Michael Klein, presented &#8220;Building node-iiif: A performant, standards-compliant IIIF service in &lt; 500 lines of code&#8221; at <\/span><a href=\"https:\/\/or2019.blogs.uni-hamburg.de\/\"><span style=\"font-weight: 400\">Open Repositories 2019<\/span><\/a><span style=\"font-weight: 400\">. After a quick conversation, they pointed us to <\/span><a href=\"https:\/\/github.com\/nulib\/serverless-iiif\"><span style=\"font-weight: 400\">their implementation<\/span><\/a><span style=\"font-weight: 400\">, a serverless service.<\/span><\/p>\n<div id=\"attachment_167\" style=\"width: 2260px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-167\" class=\"size-full wp-image-167\" src=\"http:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1954_005-v0001.jpg\" alt=\"\" width=\"2250\" height=\"1779\" srcset=\"https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1954_005-v0001.jpg 2250w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1954_005-v0001-300x237.jpg 300w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1954_005-v0001-1024x810.jpg 1024w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1954_005-v0001-768x607.jpg 768w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1954_005-v0001-1536x1214.jpg 1536w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1954_005-v0001-2048x1619.jpg 2048w, https:\/\/sites.nd.edu\/marble\/files\/2020\/05\/1954_005-v0001-379x300.jpg 379w\" sizes=\"auto, (max-width: 2250px) 100vw, 2250px\" \/><p id=\"caption-attachment-167\" class=\"wp-caption-text\">Learning from our community is crucial to the development process.<br \/>Image: Flemish, The Lawyer&#8217;s Office, after Marinus van Reymerswaele, 1535-1590, oil on cradled panel. Gift of Dr. and Mrs. Dudley B. Kean, Snite Museum of Art, University of Notre Dame, 1954.005.<\/p><\/div>\n<p><span style=\"font-weight: 400\">As has become our practice, we documented a plan to experiment with the serverless implementation.&nbsp;<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">We kept Cantaloupe running for our pre-beta site, while we tested and expanded on Northwestern&#8217;s implementation.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">On October 8th, we made the decision to move away from Cantaloupe.&nbsp;<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">On November 7th, <\/span><a href=\"https:\/\/github.com\/ndlib\/marble-blueprints\/commit\/bc6d8bf7f7d460091631f5380da1e3e716074a70\"><span style=\"font-weight: 400\">we switched<\/span><\/a><span style=\"font-weight: 400\"> from using Cantaloupe to using Northwestern&#8217;s IIIF-Serverless in our pre-beta instance. This was done without downtime or disruption to our site.&nbsp;<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Based on our findings we believe we&#8217;ll be able to reduce our image server costs by two orders of magnitude.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">You can see our archived <\/span><a href=\"https:\/\/github.com\/ndlib\/image-server\"><span style=\"font-weight: 400\">image-server repository<\/span><\/a><span style=\"font-weight: 400\"> and a snapshot of the <\/span><a href=\"https:\/\/github.com\/ndlib\/marble-blueprints\/tree\/80ab919a728783cfed02b549b6c6a207f51afe95\"><span style=\"font-weight: 400\">blueprints to build this out in AWS<\/span><\/a><span style=\"font-weight: 400\">. Here is <\/span><a href=\"https:\/\/github.com\/ndlib\/marble-blueprints\/commit\/108a227eb3e96a62a15db2df6d7fdedc6c441c83\"><span style=\"font-weight: 400\">the code commit that moved our blueprints from Cantaloupe to Serverless<\/span><\/a><span style=\"font-weight: 400\">. You can also look at <\/span><a href=\"https:\/\/docs.google.com\/document\/d\/1OuQWOCVrx9Y2PQ7UVKOka4K3C9KshQXsy5bV5PUw7Tc\/edit?usp=sharing\"><span style=\"font-weight: 400\">our documentation<\/span><\/a><span style=\"font-weight: 400\"> evaluating migrating from Cantaloupe to serverless.<\/span><\/p>\n<h2><strong>Conclusion<\/strong><\/h2>\n<p><span style=\"font-weight: 400\">The key takeaway is that it\u2019s worth taking the time to document decisions and have consistent communications.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">It\u2019s true that not every decision necessitates thorough documentation. However, the decisions that require widespread buy-in, impact a key tool or process, or re-orient project goals deserve an organization-wide commitment to this evolving decision-making process.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400\">For me, decision documents should identify the problem that needs to be solved and includes context, considerations, and constraints. Teams should build decision documents by seeking the input of those with a significant stake in this problem.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Because we have taken the time to document milestones and decisions, our project is modeling how to have a more robust memory of a particular problem and attempted solutions. We are able to be visionary and more agile as we create solutions to meet stakeholder needs.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Simply said, decision documents make all the difference.<\/span><\/p>\n<p><span style=\"font-weight: 400\">And, as a bonus, it was much easier to write this blog post. So, go forth and document!&nbsp;<\/span><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>by Jeremy Friesen&nbsp; Introduction In any long-running project at Hesburgh Libraries, our developer teams make countless decisions every day. Some decisions are big and some are small. \u2014 some affect a few people while others have an impact on the &hellip; <a href=\"https:\/\/sites.nd.edu\/marble\/documenting-decisions-to-build-buy-in\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":3367,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[5,21520],"tags":[],"class_list":["post-162","post","type-post","status-publish","format-standard","hentry","category-development","category-project-management"],"_links":{"self":[{"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/posts\/162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/users\/3367"}],"replies":[{"embeddable":true,"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/comments?post=162"}],"version-history":[{"count":2,"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/posts\/162\/revisions"}],"predecessor-version":[{"id":168,"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/posts\/162\/revisions\/168"}],"wp:attachment":[{"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/media?parent=162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/categories?post=162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sites.nd.edu\/marble\/wp-json\/wp\/v2\/tags?post=162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}