{"id":1480,"date":"2021-11-22T15:19:02","date_gmt":"2021-11-22T21:19:02","guid":{"rendered":"https:\/\/blog.scitools.com\/?p=1480"},"modified":"2023-10-02T09:58:51","modified_gmt":"2023-10-02T15:58:51","slug":"as-built-documentation","status":"publish","type":"post","link":"https:\/\/blog.scitools.com\/as-built-documentation\/","title":{"rendered":"As-Built Documentation"},"content":{"rendered":"\n<p>Abstract: What does \u201cas-built documentation\u201d mean? For me, it means being able to find answers to my questions by quickly viewing references in the code.  Take a look at how I use as-built documentation in a real-life scenario with Understand.<\/p>\n\n\n\n<p>Most of the time, my internal definition for a given buzzword or catchphrase is: \u201ckeyword to obtain money.\u201d What is STEM?&nbsp;&nbsp;\u201cA word to use to obtain grant money and\/or donations\u201d What is organic? \u201cA word attached to food that increases the price.\u201d What is \u201cas-built documentation?\u201d &#8220;A catchphrase to get you to invest your money in Understand.&#8221;<\/p>\n\n\n\n<p>However, a buzzword or catchphrase is more efficient at obtaining money when it has meaning. What does \u201cas-built documentation\u201d mean? I\u2019m not sure how the sales team defines it, but here\u2019s a use case from my development.<\/p>\n\n\n\n<p>The Understand strict c++ parser uses the <a href=\"https:\/\/llvm.org\/\">llvm <\/a>library. I needed to modify the strict parser to be able to read files directly from git, not from the disk. The strict parser already provides a virtual file system for the llvm library to handle file encodings, but the status call deferred to the real file system. Because the files exist only in git and not on disk, the real file system can\u2019t find them and the status call results in a file not found error.<\/p>\n\n\n\n<p>In this scenario, \u201cas-built documentation\u201d means instead of trying to find the official llvm documentation, I looked through the references. Here\u2019s the overload for status that delegates to the real file system (it turns out opening the file for reading also delegates to the real file system).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp line-numbers\">  llvm::ErrorOr&lt;llvm::vfs::Status&gt; status(const Twine &amp;path) override\n  {\n    if (mCodec || !mCompiler.isEmpty()) {\n      \/\/ Stat can't be optimized. The file has\n      \/\/ to be opened and converted to UTF-8.\n      if (auto file = openFileForRead(path))\n        return (*file)-&gt;status();\n    }\n    return mReal-&gt;status(path);\n  }<\/code><\/pre>\n\n\n\n<p>So, the first step is to see what the status function does. Control-Click updates the information browser and previewer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"378\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-7.png\" alt=\"\" class=\"wp-image-1484\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-7.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-7-300x121.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-7-768x310.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-7-560x226.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>The pure virtual implementation isn\u2019t immediately helpful. But, one of the overrides starts with \u201cRealFileSystem\u201d so double-clicking on that in the information browser gives:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"378\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-8.png\" alt=\"\" class=\"wp-image-1485\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-8.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-8-300x121.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-8-768x310.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-8-560x226.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>It looks like the real file system copies an existing status (line 293). Clicking through the other overloads shows most of them delegate to another file system like our code is already doing. So, the next approach is to look directly at the status class with Control+Click.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"380\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-9.png\" alt=\"\" class=\"wp-image-1486\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-9.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-9-300x122.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-9-768x312.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-9-560x227.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>Scrolling down a little reveals three constructors. Since a valid status doesn\u2019t already exist, only the third constructor matters.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"378\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-10.png\" alt=\"\" class=\"wp-image-1487\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-10.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-10-300x121.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-10-768x310.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-10-560x226.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>What values should I use for the parameters? Some seem obvious (I know the file name), but I have no idea what the UniqueID is. So, I&#8217;ll look through some calls.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"380\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-11.png\" alt=\"\" class=\"wp-image-1488\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-11.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-11-300x122.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-11-768x312.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-11-560x227.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>The first call reference is not helpful. It\u2019s essentially a copy. Several more are also copies. One useful call is from the InMemoryFileSystem.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"376\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-12.png\" alt=\"\" class=\"wp-image-1489\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-12.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-12-300x121.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-12-768x309.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-12-560x225.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>It looks like this status has essentially default parameters. So, I can start from this and change the parameters I know. I know the filename. I still don&#8217;t know what the UniqueId is, but now I know a function to generate one: getNextVirtualUniqueID(). The timestamp of the git commit is known, but what is a TimePoint object? I could click on the TimePoint class to pull up the class, but I\u2019ve glanced through the calls already and know there\u2019s a useful one:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-13.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"384\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-13.png\" alt=\"\" class=\"wp-image-1490\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-13.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-13-300x123.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-13-768x315.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-13-560x230.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>I can determine the type of the variable ModificationTime by hovering. I know the time_t for my file so I can just pass it to this conversion function. The next two parameters are user and group, but I don\u2019t know those and it looks valid to leave them null. Then is the size, which I do know, so I can update that. Next is the file type. The git file is a file, not a directory. What are the other enum values? I can control+click on directory_file to find the enumerator definition.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-14.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"378\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-14.png\" alt=\"\" class=\"wp-image-1491\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-14.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-14-300x121.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-14-768x310.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-14-560x226.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>So, I\u2019ll replace the directory_file enumerator with the regular_file enumerator to treat the git files as regular files. I can similarly look up the permissions enumerator by using the back button on the previewer and then Control+click all_all.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-15.png\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"374\" src=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-15.png\" alt=\"\" class=\"wp-image-1492\" srcset=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-15.png 936w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-15-300x120.png 300w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-15-768x307.png 768w, https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/image-15-560x224.png 560w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/a><\/figure>\n\n\n\n<p>I\u2019m not sure if the permissions will matter, but I know writing won\u2019t be supported. So, I\u2019ll update the enumerator to \u201call_read\u201d. Putting it all together, I can construct a status object if the real file system failed to find the file:<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<pre class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">      auto status = mReal-&gt;status(path);\n      if (!status &amp;&amp; file.IsValid()) {\n        \/\/ file exists virtually, create a status for it\n        status = llvm::vfs::Status(path.str().c_str(),\n                                   llvm::vfs::getNextVirtualUniqueID(),\n                                   llvm::sys::toTimePoint(file.GetTimestamp()),\n                                   0, 0, file.GetSize(),\n                                   llvm::sys::fs::file_type::regular_file,\n                                   llvm::sys::fs::perms::all_read);\n\n      }<\/code><\/pre>\n\n\n\n<p><\/p>\n<\/div><\/div>\n\n\n\n<p>Voila, my git files are found. So, what does \u201cas-built documentation\u201d mean? For me, it means being able to find answers to my questions by quickly viewing references in the code. Hopefully, it\u2019s now a better catchphrase to convince you to <a href=\"https:\/\/licensing.scitools.com\/buy\" data-type=\"URL\" data-id=\"https:\/\/licensing.scitools.com\/buy\">invest money in Understand<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-social-links is-content-justification-center is-layout-flex wp-container-core-social-links-is-layout-16018d1d wp-block-social-links-is-layout-flex\"><li class=\"wp-social-link wp-social-link-instagram  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.instagram.com\/understandbyscitools\/\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12,4.622c2.403,0,2.688,0.009,3.637,0.052c0.877,0.04,1.354,0.187,1.671,0.31c0.42,0.163,0.72,0.358,1.035,0.673 c0.315,0.315,0.51,0.615,0.673,1.035c0.123,0.317,0.27,0.794,0.31,1.671c0.043,0.949,0.052,1.234,0.052,3.637 s-0.009,2.688-0.052,3.637c-0.04,0.877-0.187,1.354-0.31,1.671c-0.163,0.42-0.358,0.72-0.673,1.035 c-0.315,0.315-0.615,0.51-1.035,0.673c-0.317,0.123-0.794,0.27-1.671,0.31c-0.949,0.043-1.233,0.052-3.637,0.052 s-2.688-0.009-3.637-0.052c-0.877-0.04-1.354-0.187-1.671-0.31c-0.42-0.163-0.72-0.358-1.035-0.673 c-0.315-0.315-0.51-0.615-0.673-1.035c-0.123-0.317-0.27-0.794-0.31-1.671C4.631,14.688,4.622,14.403,4.622,12 s0.009-2.688,0.052-3.637c0.04-0.877,0.187-1.354,0.31-1.671c0.163-0.42,0.358-0.72,0.673-1.035 c0.315-0.315,0.615-0.51,1.035-0.673c0.317-0.123,0.794-0.27,1.671-0.31C9.312,4.631,9.597,4.622,12,4.622 M12,3 C9.556,3,9.249,3.01,8.289,3.054C7.331,3.098,6.677,3.25,6.105,3.472C5.513,3.702,5.011,4.01,4.511,4.511 c-0.5,0.5-0.808,1.002-1.038,1.594C3.25,6.677,3.098,7.331,3.054,8.289C3.01,9.249,3,9.556,3,12c0,2.444,0.01,2.751,0.054,3.711 c0.044,0.958,0.196,1.612,0.418,2.185c0.23,0.592,0.538,1.094,1.038,1.594c0.5,0.5,1.002,0.808,1.594,1.038 c0.572,0.222,1.227,0.375,2.185,0.418C9.249,20.99,9.556,21,12,21s2.751-0.01,3.711-0.054c0.958-0.044,1.612-0.196,2.185-0.418 c0.592-0.23,1.094-0.538,1.594-1.038c0.5-0.5,0.808-1.002,1.038-1.594c0.222-0.572,0.375-1.227,0.418-2.185 C20.99,14.751,21,14.444,21,12s-0.01-2.751-0.054-3.711c-0.044-0.958-0.196-1.612-0.418-2.185c-0.23-0.592-0.538-1.094-1.038-1.594 c-0.5-0.5-1.002-0.808-1.594-1.038c-0.572-0.222-1.227-0.375-2.185-0.418C14.751,3.01,14.444,3,12,3L12,3z M12,7.378 c-2.552,0-4.622,2.069-4.622,4.622S9.448,16.622,12,16.622s4.622-2.069,4.622-4.622S14.552,7.378,12,7.378z M12,15 c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S13.657,15,12,15z M16.804,6.116c-0.596,0-1.08,0.484-1.08,1.08 s0.484,1.08,1.08,1.08c0.596,0,1.08-0.484,1.08-1.08S17.401,6.116,16.804,6.116z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Instagram<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-facebook  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.facebook.com\/understandbyscitools\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Facebook<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-linkedin  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.linkedin.com\/company\/1038798\/admin\/feed\/posts\/\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M19.7,3H4.3C3.582,3,3,3.582,3,4.3v15.4C3,20.418,3.582,21,4.3,21h15.4c0.718,0,1.3-0.582,1.3-1.3V4.3 C21,3.582,20.418,3,19.7,3z M8.339,18.338H5.667v-8.59h2.672V18.338z M7.004,8.574c-0.857,0-1.549-0.694-1.549-1.548 c0-0.855,0.691-1.548,1.549-1.548c0.854,0,1.547,0.694,1.547,1.548C8.551,7.881,7.858,8.574,7.004,8.574z M18.339,18.338h-2.669 v-4.177c0-0.996-0.017-2.278-1.387-2.278c-1.389,0-1.601,1.086-1.601,2.206v4.249h-2.667v-8.59h2.559v1.174h0.037 c0.356-0.675,1.227-1.387,2.526-1.387c2.703,0,3.203,1.779,3.203,4.092V18.338z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">LinkedIn<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-twitter  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/twitter.com\/CodeUnderstand\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M22.23,5.924c-0.736,0.326-1.527,0.547-2.357,0.646c0.847-0.508,1.498-1.312,1.804-2.27 c-0.793,0.47-1.671,0.812-2.606,0.996C18.324,4.498,17.257,4,16.077,4c-2.266,0-4.103,1.837-4.103,4.103 c0,0.322,0.036,0.635,0.106,0.935C8.67,8.867,5.647,7.234,3.623,4.751C3.27,5.357,3.067,6.062,3.067,6.814 c0,1.424,0.724,2.679,1.825,3.415c-0.673-0.021-1.305-0.206-1.859-0.513c0,0.017,0,0.034,0,0.052c0,1.988,1.414,3.647,3.292,4.023 c-0.344,0.094-0.707,0.144-1.081,0.144c-0.264,0-0.521-0.026-0.772-0.074c0.522,1.63,2.038,2.816,3.833,2.85 c-1.404,1.1-3.174,1.756-5.096,1.756c-0.331,0-0.658-0.019-0.979-0.057c1.816,1.164,3.973,1.843,6.29,1.843 c7.547,0,11.675-6.252,11.675-11.675c0-0.178-0.004-0.355-0.012-0.531C20.985,7.47,21.68,6.747,22.23,5.924z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">Twitter<\/span><\/a><\/li>\n\n<li class=\"wp-social-link wp-social-link-youtube  wp-block-social-link\"><a rel=\"noopener nofollow\" target=\"_blank\" href=\"https:\/\/www.youtube.com\/channel\/UCdKMZ6ukHfKZcWQi2V7kYrw\" class=\"wp-block-social-link-anchor\"><svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M21.8,8.001c0,0-0.195-1.378-0.795-1.985c-0.76-0.797-1.613-0.801-2.004-0.847c-2.799-0.202-6.997-0.202-6.997-0.202 h-0.009c0,0-4.198,0-6.997,0.202C4.608,5.216,3.756,5.22,2.995,6.016C2.395,6.623,2.2,8.001,2.2,8.001S2,9.62,2,11.238v1.517 c0,1.618,0.2,3.237,0.2,3.237s0.195,1.378,0.795,1.985c0.761,0.797,1.76,0.771,2.205,0.855c1.6,0.153,6.8,0.201,6.8,0.201 s4.203-0.006,7.001-0.209c0.391-0.047,1.243-0.051,2.004-0.847c0.6-0.607,0.795-1.985,0.795-1.985s0.2-1.618,0.2-3.237v-1.517 C22,9.62,21.8,8.001,21.8,8.001z M9.935,14.594l-0.001-5.62l5.404,2.82L9.935,14.594z\"><\/path><\/svg><span class=\"wp-block-social-link-label screen-reader-text\">YouTube<\/span><\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>What does \u201cas-built documentation\u201d mean? For me, it means being able to find answers to my questions by quickly viewing references in the code.  Take a look at how I use as-built documentation in a real-life scenario with Understand.<\/p>\n","protected":false},"author":6,"featured_media":1521,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[72,99],"tags":[7,42],"class_list":["post-1480","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-comprehension","category-developer-notes","tag-devops","tag-tips"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>As-Built Documentation - SciTools Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.scitools.com\/as-built-documentation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"As-Built Documentation - SciTools Blog\" \/>\n<meta property=\"og:description\" content=\"What does \u201cas-built documentation\u201d mean? For me, it means being able to find answers to my questions by quickly viewing references in the code. Take a look at how I use as-built documentation in a real-life scenario with Understand.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.scitools.com\/as-built-documentation\/\" \/>\n<meta property=\"og:site_name\" content=\"SciTools Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/understandbyscitools\" \/>\n<meta property=\"article:published_time\" content=\"2021-11-22T21:19:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-02T15:58:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/8eznkvlqosk.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"1067\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Natasha Stander\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Natasha Stander\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/\"},\"author\":{\"name\":\"Natasha Stander\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#\\\/schema\\\/person\\\/6d573034177809add432afa17fe72f77\"},\"headline\":\"As-Built Documentation\",\"datePublished\":\"2021-11-22T21:19:02+00:00\",\"dateModified\":\"2023-10-02T15:58:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/\"},\"wordCount\":758,\"publisher\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.scitools.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/8eznkvlqosk.jpg\",\"keywords\":[\"DevOps\",\"tips\"],\"articleSection\":[\"Code Comprehension\",\"Developer Notes\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/\",\"url\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/\",\"name\":\"As-Built Documentation - SciTools Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.scitools.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/8eznkvlqosk.jpg\",\"datePublished\":\"2021-11-22T21:19:02+00:00\",\"dateModified\":\"2023-10-02T15:58:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.scitools.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/8eznkvlqosk.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.scitools.com\\\/wp-content\\\/uploads\\\/2021\\\/11\\\/8eznkvlqosk.jpg\",\"width\":1600,\"height\":1067,\"caption\":\"assorted-color book lot\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/as-built-documentation\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.scitools.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"As-Built Documentation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#website\",\"url\":\"https:\\\/\\\/blog.scitools.com\\\/\",\"name\":\"SciTools Blog\",\"description\":\"Learn about development from our experts\",\"publisher\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.scitools.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#organization\",\"name\":\"SciTools\",\"url\":\"https:\\\/\\\/blog.scitools.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blog.scitools.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/Asset-1.png\",\"contentUrl\":\"https:\\\/\\\/blog.scitools.com\\\/wp-content\\\/uploads\\\/2022\\\/07\\\/Asset-1.png\",\"width\":2238,\"height\":472,\"caption\":\"SciTools\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/understandbyscitools\",\"https:\\\/\\\/www.youtube.com\\\/c\\\/understandbyscitools\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/understandbyscitools\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.scitools.com\\\/#\\\/schema\\\/person\\\/6d573034177809add432afa17fe72f77\",\"name\":\"Natasha Stander\",\"url\":\"https:\\\/\\\/blog.scitools.com\\\/author\\\/natasha-stander\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"As-Built Documentation - SciTools Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.scitools.com\/as-built-documentation\/","og_locale":"en_US","og_type":"article","og_title":"As-Built Documentation - SciTools Blog","og_description":"What does \u201cas-built documentation\u201d mean? For me, it means being able to find answers to my questions by quickly viewing references in the code. Take a look at how I use as-built documentation in a real-life scenario with Understand.","og_url":"https:\/\/blog.scitools.com\/as-built-documentation\/","og_site_name":"SciTools Blog","article_publisher":"https:\/\/www.facebook.com\/understandbyscitools","article_published_time":"2021-11-22T21:19:02+00:00","article_modified_time":"2023-10-02T15:58:51+00:00","og_image":[{"width":1600,"height":1067,"url":"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/8eznkvlqosk.jpg","type":"image\/jpeg"}],"author":"Natasha Stander","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Natasha Stander","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.scitools.com\/as-built-documentation\/#article","isPartOf":{"@id":"https:\/\/blog.scitools.com\/as-built-documentation\/"},"author":{"name":"Natasha Stander","@id":"https:\/\/blog.scitools.com\/#\/schema\/person\/6d573034177809add432afa17fe72f77"},"headline":"As-Built Documentation","datePublished":"2021-11-22T21:19:02+00:00","dateModified":"2023-10-02T15:58:51+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.scitools.com\/as-built-documentation\/"},"wordCount":758,"publisher":{"@id":"https:\/\/blog.scitools.com\/#organization"},"image":{"@id":"https:\/\/blog.scitools.com\/as-built-documentation\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/8eznkvlqosk.jpg","keywords":["DevOps","tips"],"articleSection":["Code Comprehension","Developer Notes"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blog.scitools.com\/as-built-documentation\/","url":"https:\/\/blog.scitools.com\/as-built-documentation\/","name":"As-Built Documentation - SciTools Blog","isPartOf":{"@id":"https:\/\/blog.scitools.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.scitools.com\/as-built-documentation\/#primaryimage"},"image":{"@id":"https:\/\/blog.scitools.com\/as-built-documentation\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/8eznkvlqosk.jpg","datePublished":"2021-11-22T21:19:02+00:00","dateModified":"2023-10-02T15:58:51+00:00","breadcrumb":{"@id":"https:\/\/blog.scitools.com\/as-built-documentation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.scitools.com\/as-built-documentation\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.scitools.com\/as-built-documentation\/#primaryimage","url":"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/8eznkvlqosk.jpg","contentUrl":"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/8eznkvlqosk.jpg","width":1600,"height":1067,"caption":"assorted-color book lot"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.scitools.com\/as-built-documentation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.scitools.com\/"},{"@type":"ListItem","position":2,"name":"As-Built Documentation"}]},{"@type":"WebSite","@id":"https:\/\/blog.scitools.com\/#website","url":"https:\/\/blog.scitools.com\/","name":"SciTools Blog","description":"Learn about development from our experts","publisher":{"@id":"https:\/\/blog.scitools.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.scitools.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blog.scitools.com\/#organization","name":"SciTools","url":"https:\/\/blog.scitools.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.scitools.com\/#\/schema\/logo\/image\/","url":"https:\/\/blog.scitools.com\/wp-content\/uploads\/2022\/07\/Asset-1.png","contentUrl":"https:\/\/blog.scitools.com\/wp-content\/uploads\/2022\/07\/Asset-1.png","width":2238,"height":472,"caption":"SciTools"},"image":{"@id":"https:\/\/blog.scitools.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/understandbyscitools","https:\/\/www.youtube.com\/c\/understandbyscitools","https:\/\/www.linkedin.com\/company\/understandbyscitools"]},{"@type":"Person","@id":"https:\/\/blog.scitools.com\/#\/schema\/person\/6d573034177809add432afa17fe72f77","name":"Natasha Stander","url":"https:\/\/blog.scitools.com\/author\/natasha-stander\/"}]}},"jetpack_featured_media_url":"https:\/\/blog.scitools.com\/wp-content\/uploads\/2021\/11\/8eznkvlqosk.jpg","jetpack-related-posts":[],"jetpack_shortlink":"https:\/\/wp.me\/peqAaw-nS","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/posts\/1480","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/comments?post=1480"}],"version-history":[{"count":10,"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/posts\/1480\/revisions"}],"predecessor-version":[{"id":2770,"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/posts\/1480\/revisions\/2770"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/media\/1521"}],"wp:attachment":[{"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/media?parent=1480"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/categories?post=1480"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.scitools.com\/wp-json\/wp\/v2\/tags?post=1480"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}