<?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: Sébastien</title>
    <description>The latest articles on DEV Community by Sébastien (@sebastienandreo).</description>
    <link>https://dev.to/sebastienandreo</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%2F122282%2F88a1ad6e-2730-492b-bf03-e867e2377b91.png</url>
      <title>DEV Community: Sébastien</title>
      <link>https://dev.to/sebastienandreo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sebastienandreo"/>
    <language>en</language>
    <item>
      <title>"Diagram as code"</title>
      <dc:creator>Sébastien</dc:creator>
      <pubDate>Fri, 01 Jan 2021 13:08:23 +0000</pubDate>
      <link>https://dev.to/sebastienandreo/diagram-as-code-2b6f</link>
      <guid>https://dev.to/sebastienandreo/diagram-as-code-2b6f</guid>
      <description>&lt;p&gt;We have seen in the &lt;a href=""&gt;previous article&lt;/a&gt; that our primary driver is to keep the software documentation as near as possible to the developer, from a tool landscape and also from a process point of view. But if the documentation contains a couple of sentences, there are also many diagrams like the following.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fc4model.com%2Fimg%2Fsketch-2.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fc4model.com%2Fimg%2Fsketch-2.jpg" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;source: &lt;a href="https://c4model.com" rel="noopener noreferrer"&gt;https://c4model.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;a lovely picture from a whiteboard, or if the author took the time to transfer the drawing in a modeling tool, you could have something like that&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsiooun9nepv350ft1ctg.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsiooun9nepv350ft1ctg.jpg" width="563" height="467"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;source: &lt;a href="https://sparxsystems.com" rel="noopener noreferrer"&gt;https://sparxsystems.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And in all the cases, it ends with a jpeg or png. Unfortunately, the diagram will evolve, and comparing two jpegs is not so easy :). Following the same approach, documentation as code, it was natural to move to diagrams as code. &lt;a href="https://twitter.com/simonbrown" rel="noopener noreferrer"&gt;Simon Brown&lt;/a&gt; mentioned the growth of such an approach in this &lt;a href="https://dev.to/simonbrown/diagrams-as-code-20eo"&gt;post&lt;/a&gt;. It was comforting to see that the way we were following since the last two years is taking speed.&lt;/p&gt;

&lt;p&gt;To make our diagrams versionable and comparable, we use different &lt;a href="https://plantuml.com/" rel="noopener noreferrer"&gt;plantuml&lt;/a&gt; dialects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/RicardoNiepel/C4-PlantUML" rel="noopener noreferrer"&gt;Plantuml for C4&lt;/a&gt;, yes we use &lt;a href="https://c4model.com/" rel="noopener noreferrer"&gt;C4&lt;/a&gt; for the architecture documentation because we like the simplicity of the modeling and also the idea of navigability. We use then &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/awslabs/aws-icons-for-plantuml" rel="noopener noreferrer"&gt;Plantuml for AWS &lt;/a&gt; as our application is deployed on AWS, but you can also find versions for&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/RicardoNiepel/Azure-PlantUML" rel="noopener noreferrer"&gt;Azure&lt;/a&gt;, or&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/davidholsgrove/gcp-icons-for-plantuml" rel="noopener noreferrer"&gt;GCP&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And with a simple code like that,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@startuml Basic Sample
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml

Person(admin, "Administrator")
System_Boundary(c1, "Sample System") {
    Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")

Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we obtain&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fandreo.eu%2Fassets%2Fimages%2F2020-12-29-diag%2FC4.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fandreo.eu%2Fassets%2Fimages%2F2020-12-29-diag%2FC4.svg" width="260" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  everything versionable
&lt;/h3&gt;

&lt;p&gt;Now we have everything versionable. We can finally compare diagrams. As &lt;a href="https://twitter.com/simonbrown" rel="noopener noreferrer"&gt;Simon Brown&lt;/a&gt; says, we are just diagraming, not modeling, and it is true. With the latest improvements of &lt;a href="https://structurizr.com/" rel="noopener noreferrer"&gt;structurizr&lt;/a&gt; in the direction of &lt;code&gt;diagram as code&lt;/code&gt; and cloud architecture, we can envisage a migration to such a modeling tool.&lt;/p&gt;

&lt;p&gt;Our approach is strongly based on the idea of linking information allowing better navigation, and avoiding redundancy. We wanted to have the same experience at the diagram level, being able to jump into the documentation of the component or in the code directly. To this end, we extended:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/yegor256/jekyll-plantuml" rel="noopener noreferrer"&gt;jekyll-plantuml&lt;/a&gt; plugin to generate SVG with embed URLs&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/SebastienAndreo/C4-PlantUML" rel="noopener noreferrer"&gt;plantuml for C4&lt;/a&gt; to naturally embed Url
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@startuml
!include C4/C4_Container.puml
Person(admin, Administrator, "Alice", {{site.baseurl}}/alice/)
System_Boundary(c1, "Sample System") {
    Container(web_app, "Web Application", "C#, ASP.NET Core 2.1 MVC", "Allows users to compare multiple Twitter timelines")
}
System(twitter, "Twitter")
Rel(admin, web_app, "Uses", "HTTPS")
Rel(web_app, twitter, "Gets tweets from", "HTTPS")
@enduml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just to be convince, go to the &lt;a href="https://andreo.eu/assets/images/2020-12-29-diag/C4-link.svg" rel="noopener noreferrer"&gt;following url&lt;/a&gt; and click on Alice or twitter.&lt;/p&gt;

&lt;p&gt;To conclude, a diagram as code is a lightweight manner of documenting your architecture; you can focus on the content and not on tool usage. Give it a try, and if you combine it with jekyll, you have a fully navigable documentation.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>plantuml</category>
      <category>productivity</category>
      <category>c4model</category>
    </item>
    <item>
      <title>Architecture documentation authoring and dissemination</title>
      <dc:creator>Sébastien</dc:creator>
      <pubDate>Fri, 01 Jan 2021 13:07:58 +0000</pubDate>
      <link>https://dev.to/sebastienandreo/architecture-documentation-authoring-and-dissemination-53gg</link>
      <guid>https://dev.to/sebastienandreo/architecture-documentation-authoring-and-dissemination-53gg</guid>
      <description>&lt;p&gt;This article will present how I envisage software documentation from the development, and tooling side.&lt;br&gt;
First of all, architecture documentation is a critical asset as soon as you are more than two or three in the team. As Nikolay described in &lt;a href="https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc" rel="noopener noreferrer"&gt;his article&lt;/a&gt;, the primary goals are knowledge sharing, communication, and analyses. But documenting the system's architecture is a difficult task. You always face the divergence between code and the documentation. Word/pdf documents or modelization files contain the documentation, making it challenging to find information and navigate between the artifacts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3o58bnes8xuy5cieiu2m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3o58bnes8xuy5cieiu2m.png" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For sure we can argue that each tool addresses different stakeholder needs. A modeling tool might be the preferred tool for a software architect, the repository selected by a developer, and a pdf for a management level. But we have to be honest; maintaining all is a pain. While setting up the documentation with my team, I asked the group: "what do we/they "feel" about the architecture and the documentation? It came out that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture is mostly from developers for developers&lt;/li&gt;
&lt;li&gt;Architecture is living; it changes iterations after iterations&lt;/li&gt;
&lt;li&gt;Code and architecture always diverge over time&lt;/li&gt;
&lt;li&gt;Architecture is not a book you read from page one to the end&lt;/li&gt;
&lt;li&gt;Architecture is not something to fulfill a process step, but it needs a process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Based on those thoughts, the concept of content as code was quite promising. Indeed the same rules should apply for the documentation as for the code. If the architecture is from developers for developers, why not use the same tool landscape (e.g., Git, vscode, or any IDE). Architecture is a living object like code, and it is also a critical asset we can apply the same processes (e.g., Quality gates within a CI, Merge Request…). Architecture and code always diverge over time; maybe putting them together might reduce the risk.&lt;br&gt;
We ended with a classical developer tool landscape for the authoring part: Gitlab or any other source control system, markdown for the content, and Git for versioning.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohxlgydbndtzlfh6qzkf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohxlgydbndtzlfh6qzkf.png" width="800" height="769"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With that solution, we were able to guarantee:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The versioning: the documentation evolves like the code following the same life cycle.&lt;/li&gt;
&lt;li&gt;The quality, with merge requests like code&lt;/li&gt;
&lt;li&gt;The traceability: with the ability to compare different versions as we are text-based.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The authoring aspect is addressed, but the reader's side was still not implemented. The team mentioned that you do not read architecture documentation like a book, starting from page one to the end. We prefer to navigate from a piece of information to another, from a high level of abstraction to an implementation detail. Fundamentally the reader wants to navigate! Which system has in his heart the navigability? &lt;strong&gt;The Web&lt;/strong&gt; indeed! The documentation should be web-based. The web is navigable, links are the heart of the web, and with a single URL, you can dive into your documentation.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopybbx4lg0gerk56ztvr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fopybbx4lg0gerk56ztvr.png" width="800" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As depicted in the previous picture, we extended our tool landscape to generate a static website with Jekyll and the full integration into our CI/CD pipeline. Now the generated website is a kind of artifact like any dll or cloud deployment. It is synchronized with the code. It is readable to anyone who has the URL, and the unique tool needed by a reader is a web browser.&lt;/p&gt;

&lt;p&gt;To conclude, in this article I presented how I tried with my team to address the authoring and dissemination of software architecture. Below some links to tools or concepts I used. In the next article, I will present how we handled the architecture diagrams.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.writethedocs.org/guide/docs-as-code/" rel="noopener noreferrer"&gt;Documentation as code &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jekyllrb.com/" rel="noopener noreferrer"&gt;jekyll&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://gitlab.com/SebastienAndreo/jekyll-ci" rel="noopener noreferrer"&gt;my CI image&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>jekyll</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Architecture documentation series</title>
      <dc:creator>Sébastien</dc:creator>
      <pubDate>Fri, 01 Jan 2021 13:07:36 +0000</pubDate>
      <link>https://dev.to/sebastienandreo/architecture-documentation-series-100i</link>
      <guid>https://dev.to/sebastienandreo/architecture-documentation-series-100i</guid>
      <description>&lt;p&gt;For a while, I found a list of articles from &lt;a href="https://medium.com/@nvashanin" rel="noopener noreferrer"&gt;Nikolay Ashanin&lt;/a&gt; about &lt;a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a" rel="noopener noreferrer"&gt;software architect role&lt;/a&gt; and software architecture in general, and I encourage any software engineer to have a look at those. It gave me the idea to share my experience with a series of posts on how I envisage software architecture and, in particular, the documentation. Within the next articles, I will describe topics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/sebastienandreo/architecture-documentation-authoring-and-dissemination-53gg"&gt;around documentation dissemination&lt;/a&gt;, then&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/sebastienandreo/diagram-as-code-2b6f"&gt;how to deal with diagrams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope you will enjoy that series, waiting for your comments.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>series</category>
    </item>
  </channel>
</rss>
