<?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: rasrules</title>
    <description>The latest articles on DEV Community by rasrules (@rasrules).</description>
    <link>https://dev.to/rasrules</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%2F52243%2F163932d1-70c5-4339-80df-14b0ffbe0bb0.jpg</url>
      <title>DEV Community: rasrules</title>
      <link>https://dev.to/rasrules</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rasrules"/>
    <language>en</language>
    <item>
      <title>A useful architecture representation method</title>
      <dc:creator>rasrules</dc:creator>
      <pubDate>Mon, 07 Jun 2021 23:29:53 +0000</pubDate>
      <link>https://dev.to/rasrules/a-useful-architecture-representation-method-28jk</link>
      <guid>https://dev.to/rasrules/a-useful-architecture-representation-method-28jk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"An evolutionary architecture supports guided incremental changes across multiple dimensions." - Rebecca Parson, Neal Ford, and Patrick Kua&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;The purpose of this essay work is to provide insights for the reader to identify &lt;em&gt;A useful architecture representation method&lt;/em&gt;.&lt;br&gt;
With the general objective: Propose a base criteria for software architecture representation attributes which are the foundation we should look for.&lt;br&gt;
By detailing an specific software architecture representation, &lt;a href="https://c4model.com/"&gt;C4 Model&lt;/a&gt;, which is a good option for most of our software system it becomes simple for us to understand the basic important abstractions such as: form, behavior and operations.&lt;br&gt;
Then also explaining the benefits, trade-offs made and finally providing recommendations for further improvements for the existing software architecture representation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;Software architecture is an abstraction of a software system. The structures of a software system consists of its elements. Software architecture concerns itself with defining and detailing the structures, their elements, and the relationship of those elements with each other.&lt;br&gt;
While the behavior of the elements does not have to be exhaustively documented, care should be taken in understanding how elements have to be designed and written so they can properly interact with each other. This is the moment where a software architecture representation becomes useful, in this case &lt;a href="https://c4model.com/"&gt;C4 Model&lt;/a&gt;, as the method to describe and communicate in different levels of detail the interaction of this elements. &lt;/p&gt;




&lt;h2&gt;
  
  
  Body
&lt;/h2&gt;

&lt;p&gt;A proper foundation laid down by a software system's architecture yields a number of benefits, which are visible in the C4 Model representation. Let's take a deeper look at those benefits as we follow the model.&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution to meet requirements
&lt;/h3&gt;

&lt;p&gt;Software strives to meet all functional, non-functional(covered in the next point), technical, and operational requirements. A software architecture defines a solution that will meet those requirements and is the foundation for software, so software systems that lack a solid architecture make it more difficult to meet all the the requirements. Poor architectures will lead to implementations that fail to meat the measurable goals of quality attributes, and they are typically difficult to maintain, deploy and manage.&lt;/p&gt;

&lt;p&gt;By taking advantage of the C4 Model levels available there is a good chance to meet functional, technical, and even perhaps operational requirements for the software system. The first one could possibly be visible by using a supplementary diagram, &lt;a href="https://c4model.com/"&gt;dynamic diagram&lt;/a&gt;, but there is a feeling about losing the simplicity included by the Model. Next one is easily verifiable by the last three levels available because with them have enough detail about this type of requirement. Now regarding the operational requirements we are able to cover them with and existing C4 model &lt;a href="https://en.wikipedia.org/wiki/Software_architecture_description/"&gt;A.D.&lt;/a&gt; template available, however it does feel like a pretty incomplete approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quality attributes
&lt;/h3&gt;

&lt;p&gt;Quality attributes are measurable and testable properties of a system. The way they satisfy the stakeholders of the system are critical, and the design of a software architecture could be made to focus on certain quality attributes at the cost of others. A software architecture, when designed properly, sets out to achieve agreed-upon and validated requirements related to quality attributes.&lt;br&gt;
They are non-functional requirements of a system as opposed to its features, which are functional requirements. &lt;/p&gt;

&lt;p&gt;With the C4 Model levels there is no direct way to detail/add this ones, you could probably think about using the diagrams descriptions to do so but it doesn't work at all. Even by using the model's templates available to detail &lt;a href="https://en.wikipedia.org/wiki/Software_architecture_description/"&gt;A.D.&lt;/a&gt; we cannot find a place or suggestion to state quality attributes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Easing communication
&lt;/h3&gt;

&lt;p&gt;Software architecture and its documentation allow you to communicate the software and explain it to others. A software architecture is abstract enough that many stakeholders, with little or no guidance, should be able to reason about the software system. &lt;/p&gt;

&lt;p&gt;The first level of C4 Model is a great match here because it is quite simple an easy to follow for any audience, technical or non-technical users, and also due to the fact that we are able to view the interaction between the "persons" related to the software system with its elements. Now regarding the technical users, the rest of the C4 Model levels remain easy to understand and help us figure out most of the behavior the software system includes or will implement. Then only one which is a bit hard is the fourth level, probably this one should be only used for the most complex or important elements of the software system because it will be really helpful as an abstraction diagram. &lt;/p&gt;

&lt;h3&gt;
  
  
  Managing change
&lt;/h3&gt;

&lt;p&gt;Changes to a software system are inevitable. A good software architecture helps with implementing and managing changes. Software architecture allows you to manage and understand what it would take to make a particular change, reduces complexity so that most of the changes that need to be made can be limited to a single element or just a few elements without having to make architectural changes.&lt;/p&gt;

&lt;p&gt;The last three C4 Model levels will be quite important for us in order to verify if our solution has a &lt;a href="https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/"&gt;high cohesion, loose coupling&lt;/a&gt;, and minimum complexity implementation within its containers, components, and code. This will be have a big impact for the software system whenever a change needs to be addressed.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Although there are a lot of benefits by using the &lt;a href="https://c4model.com/"&gt;C4 Model&lt;/a&gt; in order to describe and communicate software architecture for the different types of audiences. There are still some aspects which are not covered or just incomplete with the this Model, because a software system consists of different dimensions, all of them must be considered to build a system that can evolve.&lt;br&gt;
Technical aspects of the architecture could be easily inferred with this model, also the data store ( and its data) and some parts of its deployment environment. Yet the security, performance and a design decisions remain not properly described by the model.&lt;br&gt;
Another architecture representation method available to cover this missing/incomplete attributes is &lt;a href="https://arc42.org/"&gt;ARC42&lt;/a&gt;. It is strongly suggested to use them both so we fill the gaps and maintain a simple solution to model the software architecture.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>design</category>
      <category>model</category>
      <category>c4model</category>
    </item>
    <item>
      <title>A system that has a good architecture</title>
      <dc:creator>rasrules</dc:creator>
      <pubDate>Mon, 31 May 2021 04:54:46 +0000</pubDate>
      <link>https://dev.to/rasrules/a-system-that-has-a-good-architecture-2nb9</link>
      <guid>https://dev.to/rasrules/a-system-that-has-a-good-architecture-2nb9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Architecture is about the important stuff. Whatever that is." - Ralph Johnson&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Abstract
&lt;/h2&gt;

&lt;p&gt;The purpose of this essay work is to provide insights for the reader to identify &lt;em&gt;A system that has a good architecture&lt;/em&gt;.&lt;br&gt;
With the general objective: Propose a base criteria to software architecture's attributes which are the foundation we should follow.&lt;br&gt;
By detailing an existing software architecture, which meets the requirements for the project under scope, it becomes simple for us to understand the planning that occurred for the project to be highly adaptable and easy to change over time.&lt;br&gt;
Then also explaining the benefits, trade-offs made and finally providing recommendations for further improvements for the existing software design.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5xhinme6bwkta7ibt4j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb5xhinme6bwkta7ibt4j.png" alt="Alt Text" width="773" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Context
&lt;/h2&gt;

&lt;p&gt;The project's scope is providing a solution for physicians, clinics, hospitals to handle the appointments of their patients which will improve the services provided by the software's customers and also the final users will enjoy many helpful features, such as notifications, which enhance their quality of life.&lt;br&gt;
Patients will access the solution, either by a website or mobile application, in order to find a physician according to their needs. They need to be able to filter them, by different criteria, locate the facilities where the doctors can be found during the day.&lt;br&gt;&lt;br&gt;
The most important feature for the solution is being able to create the appointments, also receiving notifications and reminders. The physician should also be notified and receive reminders of the appointments' status.&lt;br&gt;
The solution is expected to be accessible from anywhere in the world which will later be implemented in more countries after the project grows.&lt;/p&gt;




&lt;h2&gt;
  
  
  Body
&lt;/h2&gt;

&lt;p&gt;As the diagram shows the current architecture of the system is entirely decoupled, completely different from the original solution the project had before. &lt;br&gt;
The solution relies on Heroku as its PaaS that enables developers to build, run, and operate applications entirely in the cloud and also handles the infrastructure operations for us. Within that platform we are able to scale the up and down manually or automatically the system needs.&lt;br&gt;
The system uses AWS S3 with a CDN in front in order to serve the images, files, documents as close as possible to the user of the app.&lt;br&gt;
Also Infobip is the platform that the project uses to send sms notifications to all the users of the application.&lt;br&gt;
As for the data store solution the system relies on Mysql database running on Linode servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Interoperability
&lt;/h3&gt;

&lt;p&gt;As the code base is deployed to Heroku, we have no restriction or configuration required in order to communicate with external solutions, apis, etc. It is clear on the architecture's diagram that the system interacts with Aws S3/CDN and the Infobip Api. &lt;/p&gt;

&lt;h3&gt;
  
  
  Portability
&lt;/h3&gt;

&lt;p&gt;Again as the code base runs on Heroku the software system is constantly being transferred from one environment to another as stated above about the infrastructure operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Availability
&lt;/h3&gt;

&lt;p&gt;Heroku works on top of Aws as its IaaS, it is like a higher lever layer service. As Aws it is the largest or one of the largest Cloud providers the backend will almost always be accessible for the web and mobile clients. Now regarding the data store solution at the moment there is no high availability strategy in case of a failure to recover data. &lt;/p&gt;

&lt;h3&gt;
  
  
  Test-ability
&lt;/h3&gt;

&lt;p&gt;There are two environments for the software system in order to test/approve/reject new features. The code is deployed to the staging environment where the features are tested by the project owner and then once approved they go to production manually.&lt;br&gt;
At this point there is no proper CI/CD culture but the process just described above.&lt;/p&gt;

&lt;h3&gt;
  
  
  Maintainability
&lt;/h3&gt;

&lt;p&gt;Maintenance is necessary to preserve the value of the software over time. Maintainable code benefits whoever needs to maintain it, even if its the original developer. Code quality is fundamental for the software to be robust, avoid technical debt scenarios and be able to accurately estimate the time required to implement new features.&lt;br&gt;
The software architecture design must ensure that it can meet the quality objectives, which in the case of the current software system are not met. this is probably one of the most important attribute for all of the software system's to meet.&lt;br&gt;
The existing software solution requires a lot of work to meet this quality attribute.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Although there are a lot of benefits with the current software architecture for the developers, testers, etc and also for the end users of the app because the high level elements of the software system are easy to replace or move somewhere else. The fact that quality attributes are not met is crucial for the project's success. Some techniques to increase maintainability include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reducing size&lt;/li&gt;
&lt;li&gt;Increasing cohesion&lt;/li&gt;
&lt;li&gt;Reducing coupling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also an urge to separate the frontend from the backend, as the code uses the Django framework, this could help scaling the project later.&lt;br&gt;
Now regarding the data store the system requires a high availability strategy to avoid losing data.&lt;br&gt;
In order to save money and also to apply devops culture, it would be useful moving away from Heroku to Aws and take the advantage of Aws resources for a complete CI/CD process.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>design</category>
      <category>structure</category>
      <category>foundation</category>
    </item>
  </channel>
</rss>
