From Good to Great (Turn a good software into a great and maintainable one)
Tags: software, architecture
Published: 2018-03-22 09:41:58

---
title: From Good to Great (Turn a good software into a great and maintainable one)
published: true
description: This is my own view about Software Architecture and the way I see it as the blueprint for great software development, turning the good ones into great
cover_image: https://thepracticaldev.s3.amazonaws.com/i/gq4lxd9ml6rpsmfqapmj.jpg
tags: #software #architecture
---

<hr class="Divider subdue" />

<div>


<!-- Start Article -->
<span id="ArticleContent">


<h2>Introduction</h2>

<p>Too many times I have seen brash young developers put aside the thoughts of having a good architecture in lieu of quick and fast software development. So, I would like to express what is Software Architecture and how it can turn a good software into a great and maintanable one.</p>

<h2>What is Architecture Actually?</h2>

<p>I have gone through some definitions but the following matches my take on Architecture:<br>
<em>The software architecture of a system is the set of structures needed to reason about the system, which comprise software elements, relations among them, and properties of both.</em></p>

<p>(source:http://www.informit.com/articles/article.aspx?p=1994790)</p>

<h2>So, what is necessary to become a successful Architect?</h2>

<p>I believe the skill first and fore-most a Software Architect should have is</p>

<p>Good understanding of the business problem domain,<em> followed by</em></p>

<div><em>a) General strategies and tactics</em></div>

<div><br>
<em>b)&nbsp;Fundamentals of abstraction and modeling both business and technical concepts</em></div>

<div>&nbsp;</div>

<div><em>c) How to assess the trade-offs involved when recommending an approach</em></div>

<div>&nbsp;</div>

<div>And now his/her duties - nicely illustrated by the image that follows:</div>

<p><img alt="" src="http://www.codeproject.com/KB/architecture/873448/softwarearchitect.jpg"></p>

<p>&nbsp;</p>

<p>And Now something&nbsp;</p>

<p><strong>CRUCIAL </strong>: Software Architects must also be adept at the&nbsp;Social Skills -&gt; Soft Skills<br>
(source:http://www.bredemeyer.com/Architect/RoleOfTheArchitect.htm)</p>

<h2>Soft Skills? Seriously?</h2>

<p>Yes, and that includes&nbsp;</p>

<p>1) Communication - Frequently communicate between the management and the team is to be guided.</p>

<p>2) Negotiation – Good understanding about what is possible and what is not given the context</p>

<p>3) PERSUASION to influence,</p>

<p>4) Need to know how to communicate what you are thinking so everyone understands them.</p>

<p><br>
Now the million dollar question&nbsp;</p>

<h2>WHY ARCHITECTURE ?</h2>

<p>I would be short and succinct with this, and this is solely based on my experience:</p>

<p>i) &nbsp; Integrate New Features Easily</p>

<p>ii) &nbsp;Maintenance &amp;Sustainability<br>
<br>
iii) Team Work Through Modularization<br>
<br>
iv) &nbsp;Pinpoint Potential Problem Areas<br>
<br>
v) &nbsp; The possibility of entertaining Multiple Platforms</p>

<p>&nbsp;</p>

<h2>Prerequisites to great Architecture:</h2>

<p>Firsly, Clarity of Intention – &nbsp;Clear idea in mind what you are about to do.</p>

<p>What that drives you towards is Reflection of &nbsp;that Intention in Coding, so others can (with a little bit of effort) understand what you have in mind.</p>

<p>And not to say the least THINK BEYOND THE LANGUAGE/TOOL&nbsp;</p>

<p>&nbsp;</p>

<h2>Now we are ready to get started, but First:</h2>

<p>Improve day to day coding habits, let me count them down for you -&nbsp;</p>

<p>one: Lines and Lines and Lines of Comments – NO!!</p>

<p>two: Meaningful Variable and Class Names, Method and Function Names<br>
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;-&gt; Which Makes Sense and IS SUCCINCT and Precise</p>

<p>three: Short Notes as Comments on critical junctures &nbsp;</p>

<p>four: Tabs, Formatting and Indentation</p>

<p>five: PRACTICE BASE LEVEL ALGORITHMS AND HAVE GOOD GRASP ON DATA STRUCTURES &nbsp;(BE PATIENT)</p>

<h2><strong>What consitutes a good Architecture</strong></h2>

<p><strong>Believe it or not - a layerd cake</strong></p>

<p><img alt="" src="http://www.codeproject.com/KB/architecture/873448/cake.gif" style="width: 607px; height: 462px"></p>

<p>Source: http://msdn.microsoft.com/en-us/magazine/cc163962.aspx</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p><span style="color: rgb(255, 153, 0); font-size: 30px">The ingredients of the cake (Taking a leaf out of MSDN article mentioned in the above source):</span></p>

<p>1. <strong>Simplicity</strong> means you don't do in ten lines what you can do in five!! There is less to go wrong.</p>

<p>2. <strong>Readability</strong> means what it says: that others can read your code</p>

<p>3. <strong>Modularity</strong> means your program is built like the universe. Good programs erect large systems from smaller ones, which are built from even smaller building blocks.&nbsp;</p>

<p>4. <strong>Layering</strong> means that internally, your program resembles a layer cake. The app sits on the framework sits on the OS sits on the hardware. Modules and layers are defined by APIs, which delineate their boundaries. Thus, design is critical.</p>

<p>5. <strong>Design</strong> means you take time to plan your program before you build it. &nbsp;APIS should be codified =&gt; Arranged according to a plan or a system</p>

<p>Yes, it appears I copied from the article blindly and put up a compressed version of it here, but what can I do if my experience matches so closely with the points made in the article.</p>

<h2>ICING ON THE CAKE</h2>

<p><strong>Efficiency &amp; Elegance</strong></p>

<h2><img alt="" src="http://www.codeproject.com/KB/architecture/873448/generalrelativity.png"></h2>

<p>The simple yet beautiful looking equation is the theory of General Relativity by the great Albert Einstein. Such a powerful theory yet can be expressed so eloquently. The elegance is the icing that makes the layers of the architecture maintanable and inspiring to look at, even after years.</p>

<p>And whenver there is elegance, chances are high the system is efficient.</p>


<p>And while you are at it, try to be very careful about the pitfalls to Software Architecture and Design Patterns, which namely are</p>

<p>a) OVER-DESIGN</p>

<div>b) OVER OPTIMIZATIONS WITHOUT VERIFICATION</div>

<div>&nbsp;</div>

<div>c) OVER-INHERITENCE &amp; HIERARCHY</div>

<div>&nbsp;</div>

<div>
<h2>Conclusion</h2>

<p>The point of the article was to stress the fact that no good sustainable development can last without the application of good Software Architecture Design. I am hopeful the possible success of sites such as https://lokkhi.io would be a good testimony behind this in days to come.</p>
</div>

<h2>History</h2>

<p>Article Submitted: 6th Feb, 2015</p>


</span>
<!-- End Article -->




</div>