<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: outsource.dev</title>
    <description>The latest articles on DEV Community by outsource.dev (@outsourcedev).</description>
    <link>https://dev.to/outsourcedev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F557832%2Fbb624a8c-f619-4a48-8b87-5b7df2326e59.png</url>
      <title>DEV Community: outsource.dev</title>
      <link>https://dev.to/outsourcedev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/outsourcedev"/>
    <language>en</language>
    <item>
      <title>Outsourcing software development to Romania</title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Mon, 09 Aug 2021 09:21:53 +0000</pubDate>
      <link>https://dev.to/outsourcedev/outsourcing-software-development-to-romania-3na6</link>
      <guid>https://dev.to/outsourcedev/outsourcing-software-development-to-romania-3na6</guid>
      <description>&lt;p&gt;If you are looking for a &lt;a href="https://outsource.dev/faq/software-companies-in-bucharest/"&gt;software companies in Bucharest, Romania for outsourcing development&lt;/a&gt; then keep reading. Whether you have an IT or software development project or are looking for staff augmentation then Bucharest has a lot to offer. Due to its location in Europe and only very small time zone difference, it is a popular location for nearshore outsourcing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://outsource.dev/faq/software-companies-in-romania/"&gt;Nearshore suppliers in Romania&lt;/a&gt; have the key skills and experience for top projects in Blockchain, AI, Machine Learning ML, Augmented reality AR, virtual reality VR, websites,  mobile applications, desktop applications, API and serverless, Business Intelligence (BI) and data analytics, embedded and IoT (internet of things) .&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://research.hackerrank.com/developer-skills/2020"&gt;Hackerrank 2020 survey&lt;/a&gt; shows developer salaries in Romania are on average 61% of the equivalent in the UK, and developers from Romania scored highly in the world in their challenges and report on &lt;a href="https://blog.hackerrank.com/which-country-would-win-in-the-programming-olympics/"&gt;Best Developers in the World&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Summary of &lt;a href="https://outsource.dev/faq/outsourcing-development-to-romania/"&gt;basic information and facts on Romania&lt;/a&gt;  to assist with researching &lt;a href="https://outsource.dev/faq/outsourcing-development-to-romania/"&gt;outsourced software and IT development in Romania&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Romania has a population of 19 million people. Bucharest is the capital city. Others town in Romania are Cluj-Napoca , Timișoara ,Iași ,Constanța, Craiova ,Brașov ,Galați.&lt;/p&gt;

&lt;p&gt;Romanian is the official language, with some people speaking Hungarian and some German speakers.&lt;/p&gt;

&lt;p&gt;If you want to search for a supplier then a good place to start is a &lt;a href="https://outsource.dev"&gt;specialised directory of outsourcing suppliers&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6qNjrdcE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7l22z7u07ro5b6ghr78h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6qNjrdcE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7l22z7u07ro5b6ghr78h.png" alt="Romania flag"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>romania</category>
      <category>outsourcing</category>
      <category>development</category>
      <category>bucharest</category>
    </item>
    <item>
      <title>96% of Employers don’t require SOLID software skills!</title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Thu, 05 Aug 2021 15:59:01 +0000</pubDate>
      <link>https://dev.to/outsourcedev/96-of-employers-don-t-require-solid-software-skills-5gi8</link>
      <guid>https://dev.to/outsourcedev/96-of-employers-don-t-require-solid-software-skills-5gi8</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Lp8tP7Oh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7d3uw73fxq8flvsqk7oo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Lp8tP7Oh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7d3uw73fxq8flvsqk7oo.png" alt="SOLID skills"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read the full article at &lt;em&gt;&lt;a href="https://levelup.gitconnected.com/96-of-employers-dont-require-solid-software-skills-7ca782375908"&gt;gitconnected&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>solid</category>
      <category>software</category>
      <category>skills</category>
    </item>
    <item>
      <title>Top time-saving tips using self-documenting software release notes</title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Wed, 16 Jun 2021 09:29:08 +0000</pubDate>
      <link>https://dev.to/outsourcedev/top-time-saving-tips-using-self-documenting-software-release-notes-3pk7</link>
      <guid>https://dev.to/outsourcedev/top-time-saving-tips-using-self-documenting-software-release-notes-3pk7</guid>
      <description>&lt;p&gt;When you realise the testers have signed off your latest release candidate and it is good to go, then the dread comes for the next necessary but hated task…. &lt;strong&gt;documentation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As I got fed up with filling in and writing release notes for my teams over the years, we tried a few experiments at being lazy (i.e. intelligent task automation and not repeating work). A bit of upfront work to automate tasks is preferable to regular anguish and customers prefer it if the result is consistent and regular information.&lt;/p&gt;

&lt;h1&gt;
  
  
  The release note murky gap
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iv4Z0hOg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k66z5rwimlx5ues76w3g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iv4Z0hOg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k66z5rwimlx5ues76w3g.jpg" alt="Crack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Photo by mahdis mousavi on Unsplash&lt;br&gt;
Why is it release notes fall into this murky gap between development and marketing teams? Who should write them? the developer? the product owner? the technical author? The arguments come thick and fast:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;product owner&lt;/strong&gt; — as they understand the features and issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;developers&lt;/strong&gt; — as they wrote the software so know it inside out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;team leader/scrum master&lt;/strong&gt; — as the software guys are too techie and no-one understands them but it needs someone close to it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;testers&lt;/strong&gt; — as they have a better understanding of how the features work in their entirety or how to reproduce the bugs the customer reported.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;marketing&lt;/strong&gt; — as it is another opportunity to promote the product and message the customers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;technical author&lt;/strong&gt; — as it needs someone with some writing skills to decode the techie speak and explain it in plain english.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Timing of release notes
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Gv9Vx07E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9scep0m01h0amwyuceq6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Gv9Vx07E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9scep0m01h0amwyuceq6.jpg" alt="Clock"&gt;&lt;/a&gt;&lt;br&gt;
Photo by Nick Hillier on Unsplash&lt;/p&gt;

&lt;p&gt;And the timing of creating and issuing release notes just as crucial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;do it (create and update) as each ticket (feature or bug) is fixed.&lt;/li&gt;
&lt;li&gt;wait until end of the sprint and it has been neatly shown in a sprint review or demonstration.&lt;/li&gt;
&lt;li&gt;wait until the release candidate has passed and is locked and loaded for deployment.&lt;/li&gt;
&lt;li&gt;put it off and hope users don’t ask tricky questions.&lt;/li&gt;
&lt;li&gt;do it a week after deployment and only document what the users complain about/ask about the most.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Level of detail
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--on7zayKQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ava2pnk9vy4at1z3lhel.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--on7zayKQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ava2pnk9vy4at1z3lhel.jpg" alt="Microscope"&gt;&lt;/a&gt;&lt;br&gt;
Photo by Michael Longmire on Unsplash&lt;/p&gt;

&lt;p&gt;The next question is how much detail to put in a release note?:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;top-level&lt;/strong&gt; couple of sentences just explaining the goal and aim of the release
e.g. security improvement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mid-level&lt;/strong&gt; detail explaining the approximate areas or changes
e.g. login page security improved and password strengthened&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;low-level&lt;/strong&gt; detail explaining the exact area and change
e.g. password strengthened by increasing minimum length from 8 characters to 12&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;low-level with justification&lt;/strong&gt; explaining exact area and change and reason
e.g. password strengthened by increasing minimum length from 8 characters to 12 to meet security guidance note ABC123 for UK government&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;low-level with justification and with traceability&lt;/strong&gt; explaining exact area or change, reason and a reference identifier to trace it to any bug or change ticket
e.g. BUG#123401 password strengthened by increasing minimum length from 8 characters to 12 to meet security guidance note ABC123 for UK government&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  An example of self-documenting software with in-built release notes
&lt;/h1&gt;

&lt;p&gt;What was developed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automated build pipeline that updated notes on every build&lt;/li&gt;
&lt;li&gt;custom built tool to scan change lists in a release from the configuration management system and generate a list of tickets (bugs/changes) in a build.&lt;/li&gt;
&lt;li&gt;list of tickets and build number formatted and appended to an HTML page.&lt;/li&gt;
&lt;li&gt;HTML release notes page accessible within the web application from a Help &amp;gt; About page.&lt;/li&gt;
&lt;li&gt;HTML release notes page includes: ticket number, 1 line summary of ticket, hyperlinked to the ticketing system to show full ticket.&lt;/li&gt;
&lt;li&gt;HTML release notes page includes clear marker when an official external software release and its associated version number and date.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How was it used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Testers received a new build for checking, logged into the web application and accessed the release note page. Clicked on each item to access its relevant testing, and added test notes to the ticket.&lt;/li&gt;
&lt;li&gt;External users could access the release notes easily, however, hyperlinks to detailed tickets were disabled for them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Learnings
&lt;/h1&gt;

&lt;p&gt;The following items have been learnt the hard way or discovered over a period of time by the author and need careful consideration:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;An automated system to generate release notes has many benefits and the payback time is very short.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some changes in a build are hidden through feature flags (dark releases) and may need to be hidden in a release note for certain users to avoid confusion.&lt;/li&gt;
&lt;li&gt;Original ticket titles written by end-users that are included in release notes are not clear and often refer to the wrong thing.&lt;/li&gt;
&lt;li&gt;Ticket titles need to be consistent through use of naming when referring to the product, modules, task and if they describe the symptom, problem or solution.&lt;/li&gt;
&lt;li&gt;Software developers don’t write clear release notes for end users.&lt;/li&gt;
&lt;li&gt;Someone in the team needs to be responsible for consistency, cleansing and reviewing of change ticket titles.&lt;/li&gt;
&lt;li&gt;Any step that requires manual intervention will be late or go wrong at some point.&lt;/li&gt;
&lt;li&gt;As teams become more efficient and deploy faster than release notes become more critical.&lt;/li&gt;
&lt;li&gt;Release notes need to be easily accessible and in a suitable format.&lt;/li&gt;
&lt;li&gt;Release notes that are vague or missing information are not trusted and have no value, so you may as well not produce them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Tips
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Generation of release notes should be &lt;strong&gt;fully automated&lt;/strong&gt; for every build.&lt;/li&gt;
&lt;li&gt;Release notes need to be &lt;strong&gt;timely&lt;/strong&gt; and generated at the time of the build or release.&lt;/li&gt;
&lt;li&gt;There should be &lt;strong&gt;clarity&lt;/strong&gt; in the release notes on naming and dates for external releases and internal builds.&lt;/li&gt;
&lt;li&gt;Having &lt;strong&gt;easy access&lt;/strong&gt; to release notes at the point of use i.e. within the application is beneficial for users.&lt;/li&gt;
&lt;li&gt;Having easy access to release notes &lt;strong&gt;prior to the installation&lt;/strong&gt; of any software update is beneficial for IT staff.&lt;/li&gt;
&lt;li&gt;Release notes should include &lt;strong&gt;details of all changes&lt;/strong&gt; including references, dates, areas of change, type of change (defect or feature request or modification).&lt;/li&gt;
&lt;li&gt;Certain &lt;strong&gt;confidential changes may need to be filtered out&lt;/strong&gt; based on the role of the reader or omitted entirely when generating the details.&lt;/li&gt;
&lt;li&gt;Release notes need to explain where a change has been made in a simple fashion (to &lt;strong&gt;allow readers to decide if the change impacts them&lt;/strong&gt; and if they need to dig deeper or not).&lt;/li&gt;
&lt;li&gt;Release notes should &lt;strong&gt;hyperlink to more detailed information&lt;/strong&gt; based upon the role of the user.&lt;/li&gt;
&lt;li&gt;Any hyperlinks to tickets should go through a &lt;strong&gt;middle layer/proxy to handle any future changes to the ticketing system&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Release notes need to be &lt;strong&gt;augmented by user manuals/online guides/feature explanations&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  More About The Author
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Greg&lt;/strong&gt; is an experienced software professional and CTO at &lt;strong&gt;&lt;a href="https://outsource.dev"&gt;outsource.dev&lt;/a&gt;&lt;/strong&gt; , having worked in several businesses he is now passionate about helping others succeed in software development, management, and outsourcing.&lt;/p&gt;

&lt;p&gt;If you enjoyed this article then please like it and follow me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://outsource.dev"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uI_X6vRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nz6c9z05omxfvmjarfka.png" alt="outsource.dev"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>livingdocumentation</category>
      <category>documentation</category>
      <category>releasenotes</category>
      <category>automation</category>
    </item>
    <item>
      <title>Code as diagrams - What's the point? </title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Tue, 15 Jun 2021 08:11:33 +0000</pubDate>
      <link>https://dev.to/outsourcedev/code-as-diagrams-what-s-the-point-52mg</link>
      <guid>https://dev.to/outsourcedev/code-as-diagrams-what-s-the-point-52mg</guid>
      <description>&lt;p&gt;You often hear the phrase “&lt;strong&gt;diagrams as code&lt;/strong&gt;” referring to using a text editor to write some code that can be parsed to create a diagram rather than using a graphical editor and UI to create a diagram. If however, you parse real source code to create a diagram then you are reverse engineering it. So what value does “&lt;strong&gt;code as diagrams&lt;/strong&gt;” give us as engineers?&lt;/p&gt;

&lt;h1&gt;
  
  
  The simplicity of the structure according to Monet
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KX-68plc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/laq474st0qquoyjwhnwu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KX-68plc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/laq474st0qquoyjwhnwu.jpg" alt="Structure"&gt;&lt;/a&gt;&lt;br&gt;
The evening scene in the painting by Monet of San Giorgio Maggiore At Dusk shows the outline of the building, with no details on the building just a dark shape. A simple graphical representation of the calling structure of a piece of software is often shown as a simple A calls B, then B calls C. On initial inspection, this basic diagram doesn’t seem to offer much value until you have seen lots of them and then it becomes easy to spot the problems. In reality, this is the human eye and mind doing complexity analysis which could be done with a command-line tool that highlights all modules over a certain value.&lt;/p&gt;

&lt;h1&gt;
  
  
  Beauty in the detail according to Fazio
&lt;/h1&gt;

&lt;p&gt;The Hyperrealistic hand drawings that look like photos by Diego Fazio offer an amazing level of precision and detail that give a purity in the level of depth and perception. It is possible to generate diagrams of software structure that include a significant amount of detail to complete the overall picture. This extra information can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sequence the functions are called in&lt;/li&gt;
&lt;li&gt;parameters passed into functions&lt;/li&gt;
&lt;li&gt;values returned&lt;/li&gt;
&lt;li&gt;whether functions are public or private
Standard diagrams that include more details are:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UML&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yourdon DeMarco&lt;/strong&gt; structure charts, showing data and control flows.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8AoutDlB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dyh484ks3syfllk38zgt.jpg" alt="Control flow"&gt;
-Jackson charts — Call charts that are read top-down and left to right to show the sequence that functions are called.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4gQ3vec--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7n30ut2mq8tnhxfr7zb1.jpg" alt="Jackson chart"&gt;
The advantage of extra information is it allows the reader to get a fuller picture of what is going on. However, it adds clutter to the diagram and if the focus of the chart is not kept to a few modules then it becomes hard to render and view due to the sheer volume of information and complexity in trying to lay it out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Clarity through movement
&lt;/h1&gt;

&lt;p&gt;The great wave off kanagawa by Katsushika Hokusai is a block print and shows the motion of a crashing wave capturing its dynamic movement. Rather than statically analyse the call structure of software it is also possible to scan and monitor a dynamically operating piece of software. This can then show the call tree for that specific execution of the code and its paths as well as augment it with additional information. This diagram using &lt;strong&gt;pycalltree&lt;/strong&gt; shows how many times each function was called (number on the arrow) and its execution time (within each box). Additionally, it has graphically grouped functions into their packages showing the logical cohesion of functions.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zLXBkzOE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fcp265scq2f80qx97wt2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zLXBkzOE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fcp265scq2f80qx97wt2.png" alt="pycalltree"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Deep and narrow like the Mariana Trench
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pRafj4BE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/no7rah9pip4mvc9mosov.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pRafj4BE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/no7rah9pip4mvc9mosov.jpg" alt="deep"&gt;&lt;/a&gt;&lt;br&gt;
A deep and narrow structure is normally a cause for concern and further investigation. All the modules show a lack of reuse, and layers typically indicate slow software with lots of extra unnecessary calls.&lt;/p&gt;

&lt;h1&gt;
  
  
  Wide and shallow like the Platte River
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zXbkH0YD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xanca5f44cogm62n0zkz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zXbkH0YD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xanca5f44cogm62n0zkz.jpg" alt="wide and shallow"&gt;&lt;/a&gt;&lt;br&gt;
The wide and shallow structure could be typical of a package with a large number of API endpoints. Shallow depth indicates the simplicity of each endpoint however little commonality of lower layers shows a lack of coupling within the package.&lt;/p&gt;

&lt;h1&gt;
  
  
  Wide fan-out like the Nile Delta
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6sO0GPp_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uc4fmckbjokrgc7ls2j4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6sO0GPp_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uc4fmckbjokrgc7ls2j4.jpg" alt="fan out"&gt;&lt;/a&gt;&lt;br&gt;
A wide fan-out typically identifies a module doing control aspects, such as implementing a finite state machine or acting as an API access point which is dependent on data for guiding the subsequent action.&lt;/p&gt;

&lt;h1&gt;
  
  
  Fan-out then fan-in like an Egg
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5UfIsomN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sc92x2c05tr4icll0kfl.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5UfIsomN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sc92x2c05tr4icll0kfl.jpg" alt="fan out then in"&gt;&lt;/a&gt;&lt;br&gt;
Typically shows a reasonable structure with perhaps a simple public API or interface then a layer to handle logic with only a few lower-level routines for data or device access.&lt;/p&gt;

&lt;h1&gt;
  
  
  Flowchart Diagrams
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yT5nxz8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7x2s4oi5db95uw17mcyj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yT5nxz8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7x2s4oi5db95uw17mcyj.jpg" alt="flowchart"&gt;&lt;/a&gt;&lt;br&gt;
Rather than showing the hierarchial calling tree of a module it can be useful to visualise the flow of software in a flowchart. These types of diagrams have been around for a long time which has the advantage that everyone knows how to read them. Although there are some formal standards, such as the 1985 ISO5807, the symbols of a square process box and a diamond decision box are well known. Lots of tools support the basic symbols e.g. MS Word and Powerpoint, as well as other non-standard but easily understandable ones with a more pictorial representation of a device or logic.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ISO5807 , 1985, flowchart symbols, &lt;a href="https://www.iso.org/standard/11955.html"&gt;https://www.iso.org/standard/11955.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Nassi-Schneidermann diagram
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QWl5clNz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xuc685bvxr1z0cdrhfnh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QWl5clNz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xuc685bvxr1z0cdrhfnh.jpg" alt="Nassi-Schneidermann"&gt;&lt;/a&gt;&lt;br&gt;
Another style of diagram to show flow was developed in 1972 by Nassi and Schnediermann, sometimes called structograms. This style of diagram is not often used. However, it does uphold good practice by not being able to represent “GOTO” commands.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How to draw Nassi-Schneidermann diagrams in Excel — &lt;a href="https://www.breezetree.com/articles/nassi-shneiderman-diagram/"&gt;https://www.breezetree.com/articles/nassi-shneiderman-diagram/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Code size as Treemaps (Oak or Beech or Maple)
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ujAN5beS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bs2xaw429wa83zqgzxx3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ujAN5beS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bs2xaw429wa83zqgzxx3.jpg" alt="code size"&gt;&lt;/a&gt;&lt;br&gt;
There are a variety of charts and diagrams for showing the relative size of software modules in a solution. The size of each package or function is computed as a % of the entire size and then shown as a rectangular block on a larger square that represents the entire size (100%).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tree maps — &lt;a href="https://en.wikipedia.org/wiki/Treemapping"&gt;https://en.wikipedia.org/wiki/Treemapping&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Tools
&lt;/h1&gt;

&lt;p&gt;Here are a few tools (focused on Python) as an example, rather than a comprehensive list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;pyflowchart&lt;/strong&gt; — &lt;a href="https://pypi.org/project/pyflowchart/"&gt;https://pypi.org/project/pyflowchart/&lt;/a&gt; parses static Python code to create a structured text file that can be rendered into a diagram showing the flow of the code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pycallcallgraph&lt;/strong&gt; — &lt;a href="https://pycallgraph.readthedocs.io/en/master/index.html#"&gt;https://pycallgraph.readthedocs.io/en/master/index.html#&lt;/a&gt; — traces dynamic execution of python software to produce a call tree.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pynsource&lt;/strong&gt; — &lt;a href="https://github.com/abulka/pynsource"&gt;https://github.com/abulka/pynsource&lt;/a&gt; — parses static python code to produce UML class diagram, see in action at gituml&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pylint&lt;/strong&gt; and &lt;strong&gt;pyreverse&lt;/strong&gt; — &lt;a href="https://www.pylint.org/"&gt;https://www.pylint.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excel&lt;/strong&gt; for Nassi-Schneidermann charts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excel&lt;/strong&gt; for treemap charts&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Final Thoughts on getting the right perspective
&lt;/h1&gt;

&lt;p&gt;All of the diagrams discussed have a benefit to the reader and the key is being able to see the required view or views, i.e. having the right tool for the job and at the right level of resolution and granularity (rather than google earth at maximum zoom). There is a range of tools on the market which either need to be chained together to get a variety of views or only give a single outlook. The top end of the toolchain with CASE tools/design tools gives a more holistic solution but there is not a wide industry adoption of a common approach or product.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TvkwR34J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rr7uq4d0x3demqya548a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TvkwR34J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rr7uq4d0x3demqya548a.jpg" alt="Perspective"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Final thoughts on what is the right tool for the job?
&lt;/h1&gt;

&lt;p&gt;When reverse engineering a software application we currently use a variety of separate and disparate tools. These tools can be connected and sequenced by a CI/CD build pipeline and the output viewed using text editors, image viewers, and a browser but it doesn’t feel very integrated. As modern-day code development platforms have become more advanced, we have evolved from notepad.exe and vi to more complex IDE environments with a myriad of customised plugins. Having a real-time view of these various perspectives with a code editing environment feels like the holistic way to go, the equivalent of a holo-lens visor for a technician working on a complex nuclear reactor who needs to know which wire to cut.&lt;/p&gt;

&lt;h1&gt;
  
  
  More About The Author
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Greg&lt;/strong&gt; is an experienced software professional and CTO at &lt;strong&gt;&lt;a href="https://outsource.dev"&gt;outsource.dev&lt;/a&gt;&lt;/strong&gt; , having worked in several businesses he is now passionate about helping others succeed in software development, management, and outsourcing.&lt;/p&gt;

&lt;p&gt;If you enjoyed this article then please like it and follow me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://outsource.dev"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uI_X6vRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nz6c9z05omxfvmjarfka.png" alt="outsource.dev"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What do self documenting software and doors have in common? </title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Sun, 13 Jun 2021 11:08:02 +0000</pubDate>
      <link>https://dev.to/outsourcedev/living-documentation-what-do-self-documenting-software-and-doors-have-in-common-part-2-2g47</link>
      <guid>https://dev.to/outsourcedev/living-documentation-what-do-self-documenting-software-and-doors-have-in-common-part-2-2g47</guid>
      <description>&lt;p&gt;&lt;strong&gt;Self-documentation&lt;/strong&gt; — is documentation in a suitable form, typically label, signs, or simple instructions embedded, attached, or nearby to the device. This allows the device to be used, operated, changed, and repaired by following the instructions without having to hunt for some other form of documentation.&lt;br&gt;
For those of you that think DOORS is some sort of new operating system or methodology then prepare to be amused. I thought it would be fun to explain what self-documentation is, and various styles through examples. The easiest device and familiar to us all is a door. The standard operation and use of a door are known to everyone however self-documentation can be essential in certain situations. In the following images each door has explicit documentation or implicit description, that are summarised in the titles. As you view each one try and contemplate what the equivalent “label, sign, or documentation” would be in the world of software source code.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pyUSCBwi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbq83d3t8ehc6jbuxk4p.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pyUSCBwi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lbq83d3t8ehc6jbuxk4p.jpg" alt="Doors 1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IQhIxnrW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h2b8sjeo45zfrmm987nc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IQhIxnrW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h2b8sjeo45zfrmm987nc.jpg" alt="Doors 2"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---XCxcQwN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v0arja7ydcs7qcahrr6h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---XCxcQwN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v0arja7ydcs7qcahrr6h.jpg" alt="Doors 3t"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kmu2P2c8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ugrt9kerimv5b6jrddqe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kmu2P2c8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ugrt9kerimv5b6jrddqe.jpg" alt="Doors 4"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XtT7eC0P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x1u8wjnwckmdutvsrytw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XtT7eC0P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x1u8wjnwckmdutvsrytw.jpg" alt="Doors 5"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Forms of self-documented software
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;readme.txt&lt;/strong&gt; — The humble start of documentation, a single ASCII text file left in a folder, containing as much guidance to the next visitor as possible. Unstructured and with limited capability to include diagrams or complex structures due to the primitive format. However the saving grace is that it it stands the test of time and can be accessed and viewed without any complex supporting tool set. Infact it may just include the instructions for bootstrapping and downloading enough tooling to view the rest of the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;readme.md&lt;/strong&gt; — The next evolution of readme.txt using markdown formatting which can be added using any text editor. Supporting the ability to render a more visualy appealing version of the content including titles, bullets, code formatting, and hyperlinks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;filenames&lt;/strong&gt; — have filenames that have meaningful value in their description. They describe the contents of the file or the purpose of the module. No one likes a project with files called mod1.c, mod2.c, mod3.c. Having a file called DRV-PCB123REV2.C that is a driver for a specific embedded circuit board of part number 123 and revision 2 is clear and easy to find especially if their is a file naming convention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;file headers&lt;/strong&gt; — free format comments at the top of a file to explain the context of the file in a high level form.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;keywords&lt;/strong&gt; — can be used to identify a location in the source code where a certain type of information should be automatically added, typically by the configuration management system such as subversion or git. This information could be a basic history of commits, the author, date of file creation or last edit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;function headers&lt;/strong&gt; — free format comments at the start of a method or function to explain the high level purpose of the code, its structure, variables and processing flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;javadoc style comments&lt;/strong&gt; — the javadoc style comments within a delimited and structured style to allow automatic extraction (and insertion) of text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;code comments&lt;/strong&gt; — comments on or next to lines of complex or ambiguous source code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;naming conventions&lt;/strong&gt; — longer and more descriptive explanation of the variable or function. e.g. &lt;strong&gt;Total = Price + Tax&lt;/strong&gt;; is a lot clearer than &lt;strong&gt;i=j+k&lt;/strong&gt;; Originally when code size was limited by storage systems programmers would write in a compact and abbreviated format (for a language that suports abbreviating on a big scale check out the MUMPS /M lanaguage). As hardware storage devices and languages developed then longer names for variables and functions were supported however it requires discipline to use them. Hungarian notation is a style that includes describing the type of a variable, useful in some situations but can overcomplicate the naming and make readability harder e.g. &lt;strong&gt;iage&lt;/strong&gt; (is for age, and has an ‘i’ prefix indicating it is an integer).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;names not magic numbers&lt;/strong&gt; — explain the reason for a choice of a number, to allow the reader to understand it derivation, importance and units.
eg &lt;em&gt;timeout = 30&lt;/em&gt;
doesn’t explain why the value of 30 was picked, and if it occurs in multiple places in the code it is also hard to understand if the reasons are the same. Whereas
&lt;em&gt;timeout = RFC7231_REQUEST_TIMEOUT_IN_SECONDS&lt;/em&gt;
conveys a lot more information or
&lt;em&gt;timeout = RFC7231_REQUEST_TIMEOUT_IN_SECONDS — ADJUSTMENT_FOR_DEVICE_AB123_THAT_IS_NOT_RFC_COMPLIANT&lt;/em&gt;
shows the pure design and the practical adjustment that has had to be implemented for compatibility reasons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;whitespace&lt;/strong&gt; — use of whitespace around source code can improve the readability, and also help delineate the end of one method and start of another.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;tags&lt;/strong&gt; — keywords left as comments are easy to search for and indicate a location where further work is required such as TODO, FIXME.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;programming language&lt;/strong&gt; — certain languages such as gherkin used for BDD allow natural english to be used with only minimal conventions and keywords to add structure to it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  In Summary
&lt;/h1&gt;

&lt;p&gt;There is a lot the author of software can do to make the purpose and reasons for their decisions clearer to the next person to look and work on the code. By paying attention to all of the above items the software can be self-documented and be less reliant on other external sources of information. This is a benefit as separate documentation can be hard to find, access and relate to in the target context.&lt;/p&gt;

&lt;h1&gt;
  
  
  Further Reading
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/outsourcedev/book-review-living-documentation-33pk"&gt;Book Review - Living Documentation by Cyrille Martraire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.co.uk/gp/product/0134689321/ref=as_li_qf_asin_il_tl?ie=UTF8&amp;amp;tag=osduk-21&amp;amp;creative=6738&amp;amp;linkCode=as2&amp;amp;creativeASIN=0134689321&amp;amp;linkId=9791170a8b9a81e0091d4af0c9495655"&gt;Buy book on Amazon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/outsourcedev/living-documentation-brief-history-and-evolution-of-the-concept-part-1-1a4c"&gt;Living Documentation Part 1 - History and concepts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/outsourcedev/living-documentation-what-do-self-documenting-software-and-doors-have-in-common-part-2-2g47"&gt;Living Documentation Part 2 - What do software documentation and doors have in common? &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  More About The Author
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Greg&lt;/strong&gt; is an experienced software professional and CTO at &lt;strong&gt;&lt;a href="https://outsource.dev"&gt;outsource.dev&lt;/a&gt;&lt;/strong&gt; , having worked in several businesses he is now passionate about helping others succeed in software development, management, and outsourcing.&lt;/p&gt;

&lt;p&gt;If you enjoyed this article then please like it and follow me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://outsource.dev"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uI_X6vRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nz6c9z05omxfvmjarfka.png" alt="outsource.dev"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>livingdocumentation</category>
      <category>documentation</category>
      <category>software</category>
    </item>
    <item>
      <title>Brief History and Evolution of the Concept</title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Sun, 13 Jun 2021 10:56:32 +0000</pubDate>
      <link>https://dev.to/outsourcedev/living-documentation-brief-history-and-evolution-of-the-concept-part-1-1a4c</link>
      <guid>https://dev.to/outsourcedev/living-documentation-brief-history-and-evolution-of-the-concept-part-1-1a4c</guid>
      <description>&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;In this first article I want to set the scene by outlining what living documentation is, and the types and flows of knowledge in the engineering process. Future articles will cover currently available tooling and options.&lt;/p&gt;

&lt;p&gt;So let's get started and cover some basics to all get a common understanding on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Definition of Living Documentation&lt;/li&gt;
&lt;li&gt;Forward and reverse engineering&lt;/li&gt;
&lt;li&gt;Maintenance and customer documentation&lt;/li&gt;
&lt;li&gt;Design evolution&lt;/li&gt;
&lt;li&gt;History of living documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Definition Of Living Documentation
&lt;/h1&gt;

&lt;p&gt;The key elements of living documentation are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Living&lt;/strong&gt; — it is up to date and reflects the current state of the software&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt; — it is a collection of descriptions regarding the requirements, architecture, design, implementation, and operation of the software system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no formal definition covering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What it should include&lt;/li&gt;
&lt;li&gt;How it should be formatted&lt;/li&gt;
&lt;li&gt;How it should be structured&lt;/li&gt;
&lt;li&gt;How it should be maintained
By formal, I mean an ISO or ANSI standard, or even a book that has been accepted as best practice, or a tool that has gained widespread acceptance and offers a universal solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This doesn’t mean that these topics haven’t been discussed, requirements clarified, or point solutions available.&lt;/p&gt;

&lt;p&gt;Cyrille Martraire in his book describes the key principles of living documentation as being:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reliable&lt;/li&gt;
&lt;li&gt;Minimal work to produce&lt;/li&gt;
&lt;li&gt;Collaborative&lt;/li&gt;
&lt;li&gt;Insightful&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this stage, it is worth looking at traditional engineering practices and the types of documentation produced to set the scope.&lt;/p&gt;

&lt;h1&gt;
  
  
  Forward Engineering
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bTVJEqLX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x3wqsu6tftzszckn7hr9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bTVJEqLX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x3wqsu6tftzszckn7hr9.jpg" alt="Forward Engineering"&gt;&lt;/a&gt;&lt;br&gt;
In traditional forward engineering (left to right) tasks are done in a sequence. This is true for waterfall where an entire stage is completed for the entire product before the next stage starts. The output from one phase is typically documentation (as a discrete document or within a tool) and this forms the input to the next stage. The final output is source code which may or may not include the output from the previous design phase. This design may be a simplified text-only description of the design, such as function descriptions or pseudocode. For agile projects then the process is still similar but executed on very small amounts of software, and several of these can be in development concurrently.&lt;/p&gt;

&lt;h1&gt;
  
  
  Reverse Engineering
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RN7YuJub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ubd7gwclrjtw19xil6gz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RN7YuJub--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ubd7gwclrjtw19xil6gz.jpg" alt="Reverse Engineering"&gt;&lt;/a&gt;&lt;br&gt;
Reverse engineering is often associated with situations where a team is trying to modify an undocumented software product. Large products are hard to understand so a tool may be used to statically analyse the codebase and simplify it into hierarchical function calls and classes. The interpretation of the design can be a mix of diagrams and text and include relevant code extracts or references. In addition, these tools can highlight anomalies, such as functions and methods that are not called, variables that don’ appear to be ever used.&lt;/p&gt;

&lt;h1&gt;
  
  
  Maintenance
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--teX4qY95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qe3nmoqhwl0tbyw39yoz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--teX4qY95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qe3nmoqhwl0tbyw39yoz.jpg" alt="Maintenance"&gt;&lt;/a&gt;&lt;br&gt;
When software moves into the support and maintenance phase then pressure from customers and the need for rapid response tends to decrease the amount of design and increase reliance on helpdesk tickets.&lt;/p&gt;

&lt;h1&gt;
  
  
  Customer documentation
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zhBz6fK4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ei4bwtdxa3slwk89qsps.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zhBz6fK4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ei4bwtdxa3slwk89qsps.jpg" alt="Customer documentation"&gt;&lt;/a&gt;&lt;br&gt;
There is also a requirement for some documentation for customers, such as release notes, FAQs, user manuals, and online help. This is typically done by a technical author and is based upon real-life use of the product, company standards for customer documentation, information from helpdesk tickets, internal release notes, and specifications. Software source code traditionally never feeds into this activity as the authoring team is unlikely to be able to understand it, and it is unlikely to include design information in a format that can be easily understood.&lt;/p&gt;

&lt;h1&gt;
  
  
  Design evolution
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y3bPio-G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t4c4mzt1lwds069lul1g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y3bPio-G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t4c4mzt1lwds069lul1g.jpg" alt="Design evolution"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by Eugene Zhyvchik on Unsplash&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The world of software design has gone through various steps in its evolution and the BDD transition is a critical connecting piece in the living documents puzzle. These design steps can be summarised below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TDD&lt;/strong&gt; Test Driven Design — write a test, run the software, watch the test fail, write software so the test will pass&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MDD&lt;/strong&gt; Model Drive Design — focuses on abstract representation rather than the software concepts, and favoured large CASE (Computer-Aided Software Engineering) tools in the 1980s and used UML to describe details.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DDD&lt;/strong&gt; Domain-Driven Design — includes knowledge of that domain, terminology, context, and its boundaries. DDD is considered more abstract than MDD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BDD&lt;/strong&gt; Behaviour Driven Design — a way to define the dynamic behaviour of a system using domain-specific terms such that the requirements can be traced to test scripts and executed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;BDD is arguably one of the biggest steps as the simple format for documenting features and scenarios using Given-When-Then syntax from a simple ASCII text file. This simplicity allows people to interact with it using any number of standard tools and also for it to be automated and transcribed into instructions for a test automation framework.&lt;/p&gt;

&lt;h1&gt;
  
  
  A brief history of the journey to Living Documentation
&lt;/h1&gt;

&lt;p&gt;-1921 Flow process chart presented by Frank and Lillian Gilbreth&lt;br&gt;
-1963 Flow chart standard by American Standards Association, Article on Techniques of Flowcharting by Louis A. Schultheiss&lt;br&gt;
-1970's Data Flow Diagrams and Context Diagrams, Yourdon and Constantine&lt;br&gt;
-1975 book Principles of Program Design, Jackson.&lt;br&gt;
-1985 Sidecar files used in AmigaOS with Meta data, ISO5807 standard for flow chart symbols&lt;br&gt;
-1997 Doxygen tool started, UML v1.1&lt;br&gt;
-2003 JBehave (replacement for JUnit) developed, JavaDoc released by Sun, book Domain-Driven Design by Eric Evans[5]&lt;br&gt;
-2004 BPMN v1.0 released,&lt;br&gt;
-2005 RSpec (BDD for Ruby)&lt;br&gt;
-2006 Article in Better Software magazine by Dan North on BDD [4]&lt;br&gt;
-2008 Cucumber (BDD for Ruby)&lt;br&gt;
-2009 Specflow (BDD for .Net)&lt;br&gt;
-2011 Book Specification by Example[1] [3]&lt;br&gt;
-2018 C4 Architecture Model published&lt;br&gt;
-2019 Book Living Documentation[2]&lt;/p&gt;

&lt;p&gt;[1] Specification by Example, Gojko Adzic,(2011) ISBN 9781617290084&lt;br&gt;
[2] Living Documentation, Cyrille Martraire (2019) ISBN 9780134689326&lt;br&gt;
[3] Reflection 10 years on (2021) &lt;a href="https://gojko.net/2020/03/17/sbe-10-years.html"&gt;https://gojko.net/2020/03/17/sbe-10-years.html&lt;/a&gt;&lt;br&gt;
[4] &lt;a href="https://dannorth.net/introducing-bdd/"&gt;https://dannorth.net/introducing-bdd/&lt;/a&gt;&lt;br&gt;
[5] Domain-Driven Design: Tackling Complexity in&lt;br&gt;
the Heart of Software by Eric Evans&lt;/p&gt;

&lt;h1&gt;
  
  
  Further Reading
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/outsourcedev/book-review-living-documentation-33pk"&gt;Book Review - Living Documentation by Cyrille Martraire&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.co.uk/gp/product/0134689321/ref=as_li_qf_asin_il_tl?ie=UTF8&amp;amp;tag=osduk-21&amp;amp;creative=6738&amp;amp;linkCode=as2&amp;amp;creativeASIN=0134689321&amp;amp;linkId=9791170a8b9a81e0091d4af0c9495655"&gt;Buy book on Amazon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  More About The Author
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Greg&lt;/strong&gt; is an experienced software professional and CTO at &lt;strong&gt;&lt;a href="https://outsource.dev"&gt;outsource.dev&lt;/a&gt;&lt;/strong&gt; , having worked in several businesses he is now passionate about helping others succeed in software development, management, and outsourcing.&lt;/p&gt;

&lt;p&gt;If you enjoyed this article then please like it and follow me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://outsource.dev"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uI_X6vRR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nz6c9z05omxfvmjarfka.png" alt="outsource.dev"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>livingdocumentation</category>
      <category>documentation</category>
      <category>development</category>
    </item>
    <item>
      <title>Book review — Living Documentation</title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Sat, 12 Jun 2021 13:09:37 +0000</pubDate>
      <link>https://dev.to/outsourcedev/book-review-living-documentation-33pk</link>
      <guid>https://dev.to/outsourcedev/book-review-living-documentation-33pk</guid>
      <description>&lt;p&gt;This is a solid reference book, with a substantial content of 480 pages in a hard back cover. It has a picture of the pipes from the Pompidou centre in France on the cover, which is relevant due to the colour coding of the types of pipes which is an example of self documentation. &lt;strong&gt;Cyrille Martraire&lt;/strong&gt; is a CTO and speaker at conferences on various aspects regarding software development. There is a lack of material in this area so this is a welcome addition to the bookshelf. It heavily references DDD Domain Driven Design, BDD Behaviour Driven Design and Java examples as well as a variety of tools that can be assembled to create a documentation toolkit. It is not a magic bullet and doesn’t include a secret sauce recipe, but it does explain a wide range of concepts and show real life examples which should help the reader start exploring areas further.&lt;/p&gt;

&lt;p&gt;There are 15 chapters in this book:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chapter 1 — &lt;strong&gt;Rethinking Documentation&lt;/strong&gt; — Great introduction to the topic of Living Documentation. It explains self-documentation, and how the principles relate and co-exist with AGILE, BDD and DD. The depth of the tables listing these concepts as patterns show the author knows his subject extensively.&lt;/li&gt;
&lt;li&gt;Chapter 2 — &lt;strong&gt;Behaviour Driven Development&lt;/strong&gt; as an example of Living Specification — A lot shorter than chapter 1 but gives an introduction to Given-When-Then syntax from BDD and various tools such as Cucumber and Specflow.&lt;/li&gt;
&lt;li&gt;Chapter 3- &lt;strong&gt;Knowledge Exploitation&lt;/strong&gt;– Explains sequencing of information flow and use of automation. Snippets of Java code start to appear as examples.&lt;/li&gt;
&lt;li&gt;Chapter 4 — &lt;strong&gt;Knowledge Augmentation&lt;/strong&gt; — This chapter makes a lot of sense and describes additional sources of information either annotated inside the code or externally (in a database or sidecar file). The simple sidecar file eg algorithm.txt to support a code module algorithm.java that has a similar name is explained. Annotation and tags are described with heavy references to java examples.&lt;/li&gt;
&lt;li&gt;Chapter 5 — &lt;strong&gt;Living Curation&lt;/strong&gt;: Identifying Authorative Knowledge — Concepts of sightseeing maps and identifying good code are revealed, along with consistency and naming conventions.&lt;/li&gt;
&lt;li&gt;Chapter 6 — &lt;strong&gt;Automating Documentation&lt;/strong&gt; — A really useful section as it highlights some though provoking items. Such as a massive class diagram for all classes in a codebase, where as it is easier for the reader to just see a few related to the module of interest. A bit like looking at the entire world on a detailed map when you only want to drive up the road and being overwhelmed by the scale of it all. This chapter also covers hexagonal architecture diagrams as a different way to look at the world The examples of pictures produced by static tools that reverse engineer code were extremely interesting. This shows a general concept and examples without Java specific syntax.&lt;/li&gt;
&lt;li&gt;Chapter 7 — &lt;strong&gt;Runtime Documentation&lt;/strong&gt; — Traffic tracing on distributed systems and event sourcing are explained as ways to augment knowledge from the system when it is running&lt;/li&gt;
&lt;li&gt;Chapter 8 — &lt;strong&gt;Refactorable Documentation&lt;/strong&gt; — Code conventions, naming and types are covered in the realm of code as documentation.&lt;/li&gt;
&lt;li&gt;Chapter 9 — &lt;strong&gt;Stable Documentation&lt;/strong&gt; — Stable and unstable information and how it can be documented. This allows a reader to consider refactoring a document eg readme.txt file to contain stable information and hence require updates less often.&lt;/li&gt;
&lt;li&gt;Chapter 10 — &lt;strong&gt;Avoiding Traditional Documentation&lt;/strong&gt; — A variety of scenarios and example on techniques to try and avoid documentation through other routes e.g. conversations based on the value and duration of the information.&lt;/li&gt;
&lt;li&gt;Chapter 11 — &lt;strong&gt;Beyond Documentation&lt;/strong&gt; — Living Design — Some good examples and tips in this chapter, including “shameful documentation”. The main message being when you make clear documentation the design becomes transparent. Has some really simple but effective ideas for crudely scanning code as a signature survey.&lt;/li&gt;
&lt;li&gt;Chapter 12 — &lt;strong&gt;Living Architecture Documentation&lt;/strong&gt; — Good coverage of design and architecture, and reasons for decisions. Some good examples of ADRs, and architecture templates. Some pragmatic tips on minimising documentation using a codex. A really useful section with lots of hints and ideas.&lt;/li&gt;
&lt;li&gt;Chapter 13 — &lt;strong&gt;Introducing Living Documentation&lt;/strong&gt; to a new environment — This is more managerial advice on how to introduce the concepts to a business. This feels like it has some solid experience behind it and tips learnt the hard way. It advocates starting gently and building up, which definitely feels like good advice. It even includes how to handle common objections. This managerial level is in contrast to the detailed java code snippets earlier in the book and shows the flexibility of the author.&lt;/li&gt;
&lt;li&gt;Chapter 14 — &lt;strong&gt;Documenting Legacy Applications&lt;/strong&gt; — Covers annotation, augmentation and rearranging items to be more understandable.&lt;/li&gt;
&lt;li&gt;Chapter 15 — &lt;strong&gt;Extra : Conspicuous Documentation&lt;/strong&gt; — Covers a lot of interesting items that don’t fit neatly in anywhere else. From low fidelity information and diagrams and their benefits, concrete examples of scenarios and problems to get real deep dive detail and tips on how to prepare for an interactive workshop. It also covers lot of other media and types of documents such as news, release notes, APIs. Again the shaded tip boxes work really well and draw the readers eye to salient points.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 15 chapters flow easily and have been well considered. The titles are all generic and refer to Living Documentation in a wide sense, however code examples are in Java. There are a variety of hand drawn sketches through the book to lighten the mood, these don’t distract and are relevant to the areas they are placed. There are numerous easy to understand and believable examples, all the sketches are clear and appropriate and every topic feels like it has been thoroughly covered. There are shaded tip boxes and throughout the text hints to follow up for keen readers with specific books or papers on a topic. This is a great way to keep the flow going and the text to a sensible length but give signposts to avid enthusiasts on how they can find out more on a specialised area.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Having read this book I found myself taking notes as I worked through it because having scanned the book I couldn’t find key summaries. I was looking for a list of key information that I could refer to at a later stage as a full reference on Living Documentation, in particular:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;List of tools and websites&lt;/li&gt;
&lt;li&gt;List of books, authors and their topics
There are numerous great links and tips scattered through the document but it would have been really helpful to have a condensed list in an appendix at the end of the book.
There are a lot of examples with Java in this book, perhaps too much java or at least not enough generic description of ideas and concept before a practical example in Java. As there are relatively few books on the Living Documentation topic area this one stands out, so is a great reference piece. It could have been titled “Living Documentation for Java Programmers” which reflects how it is written. Living Documentation with some Java Examples would have been better or even Living Documentation A Complete Reference but it wasn’t to be.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No matter, these are minor points as this is an excellent document and key reading for anyone interested in the subject area and the bonus is it an easy read, light and airy in style but deep in content. Due to the lack of other books this one stands out and I was enthused and invigorated by reading it. I have no hesitation in recommending it, and hope if it is ever revised then there is opportunity to make it really great and a handy desktop reference guide for everyone.&lt;/p&gt;

&lt;h1&gt;
  
  
  Details of Book on Living Documentation
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Living Documentation&lt;/strong&gt; by Cyrille Martraire June 2019&lt;br&gt;
480 Pages&lt;br&gt;
Published by Addison-Wesley&lt;br&gt;
ISBN 978–0134689326&lt;br&gt;
&lt;a href="https://www.amazon.co.uk/gp/product/0134689321/ref=as_li_qf_asin_il_tl?ie=UTF8&amp;amp;tag=osduk-21&amp;amp;creative=6738&amp;amp;linkCode=as2&amp;amp;creativeASIN=0134689321&amp;amp;linkId=9791170a8b9a81e0091d4af0c9495655"&gt;Buy on Amazon&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EX3yY4iN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lwcmy097o1vv2wccyq92.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EX3yY4iN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lwcmy097o1vv2wccyq92.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iH9aTTIm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bp5p0a6g41vqdf7iks0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iH9aTTIm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6bp5p0a6g41vqdf7iks0.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>livingdocumentation</category>
      <category>documentation</category>
      <category>books</category>
    </item>
    <item>
      <title>How to outsource to Vietnam</title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Fri, 11 Jun 2021 10:44:50 +0000</pubDate>
      <link>https://dev.to/outsourcedev/how-to-outsource-to-vietnam-20c5</link>
      <guid>https://dev.to/outsourcedev/how-to-outsource-to-vietnam-20c5</guid>
      <description>&lt;p&gt;How to successfully outsource  software development and IT projects to &lt;strong&gt;Vietnam&lt;/strong&gt; is the question that is very topical now. With changes in world, more businesses than ever are asking the question of whether they should try outsourcing in any of its flavours – onshore, offshore, nearshore ,or hybrid. Hence senior management, CIO, CTO or team leaders are being asked questions on how to make it work. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4q0r382Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h48cvry49rs1vjmupkw8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4q0r382Z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h48cvry49rs1vjmupkw8.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Photo by Peter Nguyen on Unsplash&lt;/p&gt;

&lt;h1&gt;
  
  
  Basic Facts on Vietnam
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Vietnam&lt;/strong&gt; is in East ASIA and a time zone of UTC+7 hours with no adjustment for DST. It has transformed over the last 30 years into a dynamic part of the region. It has a population of 96.5 million and expected to grow to 120 million by 2050 according to  Worldbank. Health and living standards have improved with life expectancy up by 6.3 years since 1990 to 70.5 years.&lt;/p&gt;

&lt;h1&gt;
  
  
  Education and Proficiency In English
&lt;/h1&gt;

&lt;p&gt;As the Latin alphabet is used then Vietnamese people find it straight forward to learn English. English is now mandatory in most schools in Vietnam with students reaching B1 level on the CEFR standard. &lt;/p&gt;

&lt;h1&gt;
  
  
  Skilled Engineers
&lt;/h1&gt;

&lt;p&gt;There are over 160 public and private universities in Vietnam. 60% of the population are under the age of 30 and over 25,000 engineers graduate each year from University.&lt;/p&gt;

&lt;h1&gt;
  
  
  Outsourcing to Vietnam
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Ho Chi Minh city&lt;/strong&gt; has been named one of the best cities in the world for software outsourcing due to cost. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.vinasa.org.vn/"&gt;VINASA&lt;/a&gt; is the Vietnam Software Association. Software and IT Services Association established in 2002 and based in Hanoi. It has grown to more than 360 member enterprises by 2018 mainly based in Hanoi and Ho Chi Minh City.&lt;/p&gt;

&lt;h1&gt;
  
  
  Costs
&lt;/h1&gt;

&lt;p&gt;A &lt;a href="https://chiase24h.vn/how-much-does-software-development-outsourcing-in-vietnam/"&gt;2019 report&lt;/a&gt; on labour costs shows that Vietnam is slightly cheaper than India and almost half the cost of China.&lt;/p&gt;

&lt;p&gt;Comparison of the hourly cost of a programmer in 2019 was:&lt;/p&gt;

&lt;p&gt;-Vietnam $25-$35&lt;br&gt;
-India $28-$42&lt;br&gt;
-China $37-$60&lt;/p&gt;

&lt;p&gt;The rate for a mid-level developer across the world regions by comparison was:&lt;/p&gt;

&lt;p&gt;-USA $132-$140&lt;br&gt;
 -Europe $35-$56&lt;br&gt;
 -Latin America $30-$52&lt;br&gt;
 -Asia $24-$35&lt;/p&gt;

&lt;h1&gt;
  
  
  How to outsource to Vietnam
&lt;/h1&gt;

&lt;p&gt;Start by scoping the project and a description of the goals and objectives, follow a &lt;a href="https://outsource.dev/how-to-successfully-outsource-software-development-and-it-projects/"&gt;guide&lt;/a&gt; on how to do this if this is your first time outsourcing. It is easier to use a specialised supplier directory than a generic search engine to create a short list of candidate companies. Then contact the business with an outline of your proposed project and start to get further details on their business. It is important to check technical capability, availability of staff and equipment and processes for development and communication. Also try to find a business that has a similar way of working and culture to make it easier to interact. Take the time to discover a long term partner you can keep working with on future projects that bring a range of benefits as well as cost savings.&lt;/p&gt;

&lt;h1&gt;
  
  
  Further Reading
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://outsource.dev/outsourcing-development-to-vietnam/"&gt;Information on vietnam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://outsource.dev/how-to-successfully-outsource-software-development-and-it-projects/"&gt;How to successfully outsource IT projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://outsource.dev"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K476_Lab--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qc3s1vfofptzegp11rod.png" alt="outsource.dev"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>outsource</category>
      <category>vietnam</category>
      <category>outsourcing</category>
      <category>offshoring</category>
    </item>
    <item>
      <title>What is ITO?</title>
      <dc:creator>outsource.dev</dc:creator>
      <pubDate>Fri, 11 Jun 2021 10:31:41 +0000</pubDate>
      <link>https://dev.to/outsourcedev/what-is-ito-17aj</link>
      <guid>https://dev.to/outsourcedev/what-is-ito-17aj</guid>
      <description>&lt;h1&gt;
  
  
  What is IT Outsourcing (ITO)?
&lt;/h1&gt;

&lt;p&gt;The world of outsourcing has a variety of terminology and one term that is not broadly understood is &lt;strong&gt;ITO&lt;/strong&gt; or &lt;strong&gt;IT outsourcing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When it comes to outsourcing one term that is widely known is BPO, Business Process Outsourcing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;BPO&lt;/strong&gt; is the outsourcing of an essential function, this could be an entire department such as HR or a specific function that is performed e.g. payroll. Often BPO is associated with call centres, customer service and back-office tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a similar fashion, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ITO&lt;/strong&gt; ( describes &lt;strong&gt;IT outsourcing&lt;/strong&gt; of some or all of an IT function such as software development, hosting, applications or infrastructure to a third party supplier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  IT Outsourcing (ITO) Models
&lt;/h1&gt;

&lt;p&gt;There are also a variety of terms used to describe various IT outsourcing models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;onshore&lt;/strong&gt; — The supplier is based in the same region/country/timezone as the client. For example, a UK client dealing with a UK supplier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;hybrid&lt;/strong&gt; — The majority of the supplier team is based offshore but a small number of supplier staff are located in the client region, possibly the same office for ease of communication and access. For example, a UK client with a few UK based supplier staff and the main team based in India.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;nearshore&lt;/strong&gt; — The supplier team is based in a near geographic region to the client, so time zone differences are small and travel times small. For example, a UK client dealing with a European supplier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;offshore&lt;/strong&gt; — The supplier is in a different time zone a significant distance from the client. benefits are often cost and team availability. For example, a UK client dealing with an Indian supplier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  IT Outsourcing (ITO) Charging Models
&lt;/h1&gt;

&lt;p&gt;As with any business, there are also a variety of charging models and contract types, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fixed price&lt;/strong&gt; — Predetermined fixed amount to deliver the work regardless of manpower effort actually used or costs of any services or materials. Requires a precise definition of the requirements upfront. If the client does not have a suitably detailed set of documented requirements or there are areas of high risk the supplier could do an initial piece of work to document the requirements and understand the level of risk before providing a quotation for the main project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time and Materials&lt;/strong&gt; — Sometimes referred to as cost-plus. The supplier records the amount of effort spent on the project (typically through timesheets), and tracks all expenses incurred for materials and services and then invoice the client at the rate that was agreed at the start of the project. Any risks that result in time overrun or extra effort are passed to the client. Does not need all requirements to be defined at the start of the project, and most suitable for agile methodology projects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Augmentation&lt;/strong&gt; — The client wants a set number of staff for typically a long period of time to perform tasks. Tasks and work don’t have to be defined at the start of the engagement, typically the types of work and task are known so that appropriately skilled staff can be provided by the supplier.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Why outsource software development and IT projects?
&lt;/h1&gt;

&lt;p&gt;There a variety of reasons that IT outsourcing is used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;cost&lt;/strong&gt; — using resources from another geography may have benefits of lower direct cost&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;management&lt;/strong&gt; — no management effort to hire, recruit, retain, pay staff and ongoing management is provided from the supplier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;short term project&lt;/strong&gt; — the ability to add extra staff for a specific project reduces costs and impact on a business, and there is no issue at the end of the project with having to reallocate staff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;specialist skills&lt;/strong&gt; — it may be that a new product or project requires specialist staff for a specific time or task which would not warrant employing them on a full-time basis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;staff augmentation&lt;/strong&gt; — if there is a need to scale quickly or add a new department for a new activity, eg adding a support or maintenance team for a finished project then.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;clarity of costs&lt;/strong&gt; — by having an external supplier do a specific task it is a lot easier to track costs, and hence manage your profits, especially if work is being done for a client.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How to Find an IT Outsourcing (ITO) Supplier
&lt;/h1&gt;

&lt;p&gt;There a variety of ways to find an ITO supplier.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation&lt;/strong&gt; — from a colleague or friend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manually searching&lt;/strong&gt; the internet — use a search engine then create a list of possible suppliers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://outsource.dev"&gt;Use a specialist directory&lt;/a&gt;&lt;/strong&gt; — by using a business directory that is specialised in a niche sector you can ensure you are only looking at shorter lists of possible suppliers and search for specific criteria. A good place to start is &lt;a href="https://outsource.dev"&gt;https://outsource.dev&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://outsource.dev"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K476_Lab--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qc3s1vfofptzegp11rod.png" alt="outsource.dev"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>outsourcing</category>
      <category>ito</category>
      <category>itoutsourcing</category>
      <category>nearshore</category>
    </item>
  </channel>
</rss>
