<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Architecture - Ezeiatech</title>
	<atom:link href="https://ezeiatech.com/tag/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>https://ezeiatech.com</link>
	<description>Global technology consulting company</description>
	<lastBuildDate>Wed, 27 Aug 2025 07:59:33 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>https://ezeiatech.com/wp-content/uploads/2022/04/cropped-Ezeiatech-Icon-32x32.png</url>
	<title>Architecture - Ezeiatech</title>
	<link>https://ezeiatech.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>How to Build a Future-Ready IT Infrastructure with Cloud-Native Solutions</title>
		<link>https://ezeiatech.com/how-to-build-a-future-ready-it-infrastructure-with-cloud-native-solutions/</link>
					<comments>https://ezeiatech.com/how-to-build-a-future-ready-it-infrastructure-with-cloud-native-solutions/#respond</comments>
		
		<dc:creator><![CDATA[ezeiatech-admin]]></dc:creator>
		<pubDate>Wed, 27 Aug 2025 07:59:31 +0000</pubDate>
				<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Information Security]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">https://ezeiatech.com/?p=4675</guid>

					<description><![CDATA[<p>Introduction: The Imperative for Cloud-Native Infrastructure Enterprises today must respond rapidly to evolving digital demands, scale effortlessly, and maintain security and resilience—all while managing costs. The traditional monolithic and on-prem IT systems simply can’t keep up. Cloud-native solutions — built with microservices, containers, orchestration, and automation—is not just an option; it’s foundational for future-ready IT. [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/how-to-build-a-future-ready-it-infrastructure-with-cloud-native-solutions/">How to Build a Future-Ready IT Infrastructure with Cloud-Native Solutions</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<h4 class="wp-block-heading"><strong>Introduction: The Imperative for Cloud-Native Infrastructure</strong></h4>



<p>Enterprises today must respond rapidly to evolving digital demands, scale effortlessly, and maintain security and resilience—all while managing costs. The traditional monolithic and on-prem IT systems simply can’t keep up. <strong>Cloud-native solutions</strong> — built with microservices, containers, orchestration, and automation—is not just an option; it’s foundational for future-ready IT.</p>



<p>By 2025, more than <strong>95% of enterprises</strong> will have adopted multi-cloud or hybrid-cloud environments; and <strong>cloud-native platforms will support over 80% of digital workloads</strong>. </p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Section 1: Why Cloud-Native Matters</strong></h4>



<p><strong>Key Benefits at a Glance</strong></p>



<figure class="wp-block-table"><table><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Benefit</strong></td><td class="has-text-align-center" data-align="center"><strong>Impact / Statistic</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Faster Time-to-Market</strong></td><td class="has-text-align-center" data-align="center">73% report quicker development &amp; rollouts with cloud-native&nbsp;</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Wider Adoption Trends</strong></td><td class="has-text-align-center" data-align="center">78% of enterprises use cloud-native app dev (up from 58% in 2022)&nbsp;</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Broad Benefits Alignment</strong></td><td class="has-text-align-center" data-align="center">94% agree cloud-native apps/containers bring organization-wide benefits&nbsp;</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Future Market Growth</strong></td><td class="has-text-align-center" data-align="center">Cloud-native platform market to expand from $5.85 B (2024) → $62.7 B (2034)&nbsp;</td></tr></tbody></table><figcaption class="wp-element-caption"><br>Cloud-native designs enable modularity, agility, and robust performance—key attributes for businesses navigating digital acceleration.</figcaption></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Section 2: Core Pillars of Cloud-Native Architecture</strong></h4>



<ul>
<li><strong>Microservices:</strong> Modular services deployed independently for resilience and scalability. (Most enterprises now use them; see Netflix, Uber examples.) </li>



<li><strong>Containers &amp; Orchestration:</strong> Technologies like Kubernetes automate deployment, load balancing, and scaling.</li>



<li><strong>API-Driven Design:</strong> Enables seamless integration, extensibility, and loosely coupled systems.</li>



<li><strong>Automation &amp; CI/CD Pipelines:</strong> Facilitate rapid, reliable releases and platform upgrades.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Section 3: Strategic Benefits to IT and Business</strong></h4>



<ol>
<li><strong>Agility &amp; Innovation</strong>
<ul>
<li>Prototype and release features faster with isolated, deployable microservices.</li>
</ul>
</li>



<li><strong>Resilience &amp; Availability</strong>
<ul>
<li>Fault-tolerant services mean one failure doesn&#8217;t cripple the rest.</li>
</ul>
</li>



<li><strong>Cost Efficiency &amp; FinOps Readiness</strong>
<ul>
<li>Serverless and auto-scaling architectures reduce over-provisioning and waste. </li>



<li>Emerging FinOps practices optimize spend as deployment scales. </li>
</ul>
</li>



<li><strong>Multi-Cloud &amp; Hybrid Strategies</strong>
<ul>
<li>Stats show <strong>78% prefer hybrid/multi-cloud</strong> to avoid vendor lock-in; <strong>90% expected to use hybrid through 2027</strong>.</li>
</ul>
</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Section 4: Implementing Cloud-Native Infrastructure</strong></h4>



<p><strong>Step-by-Step Blueprint</strong></p>



<figure class="wp-block-table"><table><tbody><tr><td class="has-text-align-center" data-align="center"><strong>Phase</strong></td><td class="has-text-align-center" data-align="center"><strong>Key Actions</strong></td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Assessment</strong></td><td class="has-text-align-center" data-align="center">Audit legacy systems and identify scalable workloads.</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Pilot Project</strong></td><td class="has-text-align-center" data-align="center">Containerize a microservice; deploy via Kubernetes on hybrid cloud.</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Platform Setup</strong></td><td class="has-text-align-center" data-align="center">Build internal Developer Platform with Argo/Flux and Crossplane.</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Expand &amp; Automate</strong></td><td class="has-text-align-center" data-align="center">Integrate CI/CD, observability, and governance tools.</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Govern &amp; Optimize</strong></td><td class="has-text-align-center" data-align="center">Implement FinOps strategies; monitor costs and performance.</td></tr><tr><td class="has-text-align-center" data-align="center"><strong>Iterate Fast</strong></td><td class="has-text-align-center" data-align="center">Continuously evolve architecture with feedback and scaling needs.</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Section 5: Pitfalls and Governance Considerations</strong></h4>



<ul>
<li><strong>Complexity Creep:</strong> Without governance, microservices and multi-cloud can spiral in complexity; visionary leadership (e.g., from the CTO) is essential. </li>



<li><strong>Security Risks:</strong> As multicloud grows, enforcing Zero Trust and cloud-native protection becomes critical. </li>



<li><strong>Cost Overruns:</strong> Gartner reports <strong>69% experience cloud overspend</strong>, emphasizing the need for budgeting and monitoring frameworks.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading"><strong>Conclusion: Becoming Future-Ready with Cloud-Native Infrastructure</strong></h4>



<p>Building future-ready IT infrastructure demands rethinking how we design, deploy, and govern technology. Cloud-native solutions—rooted in microservices, automation, and hybrid strategies—enable organizations to deploy quickly, manage risk, and scale effectively.</p>



<p>As the market evolves, companies that prioritize architectural agility, cost visibility, and robust governance will outperform peers in innovation and operational resilience.</p><p>The post <a href="https://ezeiatech.com/how-to-build-a-future-ready-it-infrastructure-with-cloud-native-solutions/">How to Build a Future-Ready IT Infrastructure with Cloud-Native Solutions</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://ezeiatech.com/how-to-build-a-future-ready-it-infrastructure-with-cloud-native-solutions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Master Worker Architecture Using Vert.x</title>
		<link>https://ezeiatech.com/master-worker-architecture-using-vert-x/</link>
		
		<dc:creator><![CDATA[Peter Evans]]></dc:creator>
		<pubDate>Tue, 04 Jan 2022 11:20:00 +0000</pubDate>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://13.127.63.32/?p=2524</guid>

					<description><![CDATA[<p>Today we are going to explain how Vert.x can be used for creating distributed Master Worker Paradigm. In large scale systems it’s applicable to wide variety of problems. Just to refresh our memories about what Vert.x Vert.x as we know is a lightweight framework for creating distributed microservices. It can sale up and scale out [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/master-worker-architecture-using-vert-x/">Master Worker Architecture Using Vert.x</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Today we are going to explain how <strong>Vert.x</strong> can be used for creating distributed Master Worker Paradigm. In large scale systems it’s applicable to wide variety of problems.</p>



<h2 class="wp-block-heading"><strong>Just to refresh our memories about what Vert.x</strong></h2>



<p><strong>Vert.x</strong> as we know is a lightweight framework for creating distributed microservices. It can sale up and scale out depending on your needs. It also takes away all your pain of dealing with complexity of heavily multithreaded environments, race conditions etc. etc.</p>



<p>Primary unit of work in <strong>Vert.x</strong> is a verticle. Verticles are thread safe and they can run locally or remotely. One Verticle interacts with other verticle using Events which carry data with them.</p>



<h3 class="wp-block-heading"><strong>Let’s take a day to day scenario.</strong></h3>



<p>We are getting lot of requests. Each request is independent of each other but we are unable to process all these requests on the commodity hardware that we have. How to serve all these requests coming to our cool high traffic website?</p>



<p>Well one answer is serve each request in a new “thread” and keep increasing the CPU Cores (Scale Up) and hope it will work. This is what your webserver does. Problem is you can only increase no of cores to a limit (How high you can go?).</p>



<p>Once you reach that limit you will add more such machines and leave it to load balancer to divide all these requests equally between all machines. Sounds familiar?</p>



<p>Well, you will have problem relying on load balancer when every service in the system faces same issue. Every time you will have to scale these services and keep re-configuring load balancer. What if this was possible in application layer dynamically. What if we could scale up and out without any pain of load balancer. &nbsp;Good news is it can be achieved using Vert.x except load balancing happens inside your application layer. There can be lot of benefits of this approach which I will discuss some other time but for now let’s just focus on how can this be achieved using Vert.x.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-2 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-1 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<h3 class="wp-block-heading"><strong>So this problem has 2 major challenges</strong>:</h3>



<ol>
<li>How to divide the work between different machines so that we can keep up with this load.</li>



<li>How to combine the result from all this processing so that we can return this result to client (master) who needs answers from all workers before proceeding further (Can this be achieved by load balancer?).</li>
</ol>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="471" height="239" src="http://13.127.63.32/wp-content/uploads/2022/04/vert-x-master-worker.png" alt="vert-x-master-worker" class="wp-image-2525" srcset="https://ezeiatech.com/wp-content/uploads/2022/04/vert-x-master-worker.png 471w, https://ezeiatech.com/wp-content/uploads/2022/04/vert-x-master-worker-300x152.png 300w" sizes="(max-width: 471px) 100vw, 471px" /></figure>
</div>
</div>
</div>
</div>



<p>So Master is like Management whose only job is to distribute all the work to developers (like you and me) and when work is done. Combine all the statuses, create a report and notify the boss and hopefully get a fat pay hike (sounds familiar?).</p>



<p>In terms of Vert.x We have a master Verticle which gets lot of work to do. But Master does not want to do any work.Why? Because its a “Master”. So master wants to assign all this work to Workers. Worker are also verticles in Vert.x. But then problem arises that master needs to know if all work is completed so that it can make right decision about what to do next.</p>



<p>So here is high level architecture we are going to flow.</p>



<p>Ok..so in order to simulate this first lets create lot of work.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="881" height="376" src="http://13.127.63.32/wp-content/uploads/2022/04/code1-1.png" alt="code1-1" class="wp-image-2528" srcset="https://ezeiatech.com/wp-content/uploads/2022/04/code1-1.png 881w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-1-300x128.png 300w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-1-768x328.png 768w" sizes="(max-width: 881px) 100vw, 881px" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="821" height="345" src="http://13.127.63.32/wp-content/uploads/2022/04/code1-2.png" alt="code1-2" class="wp-image-2529" srcset="https://ezeiatech.com/wp-content/uploads/2022/04/code1-2.png 821w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-2-300x126.png 300w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-2-768x323.png 768w" sizes="(max-width: 821px) 100vw, 821px" /></figure>



<p>So worker does the work and sends an event on event bus with result.</p>



<p>Now master needs to combine all these results. This is way cool features introduced in Vert.x 3…Composable futures It makes this so easy.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="754" height="205" src="http://13.127.63.32/wp-content/uploads/2022/04/code1-3.png" alt="code1-3" class="wp-image-2530" srcset="https://ezeiatech.com/wp-content/uploads/2022/04/code1-3.png 754w, https://ezeiatech.com/wp-content/uploads/2022/04/code1-3-300x82.png 300w" sizes="(max-width: 754px) 100vw, 754px" /></figure>



<p>That’s all !!.&nbsp; We hope this will be useful in some of your scenario.</p>



<p>Source code is available at&nbsp;<a href="https://github.com/singhmarut/vertx-master-worker-simulator">https://github.com/singhmarut/vertx-master-worker-simulator</a></p>



<p>Happy coding !!</p>



<p>Thank you for reading. For continued insights and in-depth discussions, please follow our <a href="https://ezeiatech.com/blog/" target="_blank" rel="noreferrer noopener">blogs</a> at <a href="https://ezeiatech.com/" target="_blank" rel="noreferrer noopener">Ezeiatech</a>.</p><p>The post <a href="https://ezeiatech.com/master-worker-architecture-using-vert-x/">Master Worker Architecture Using Vert.x</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Rust Concurrency</title>
		<link>https://ezeiatech.com/rust-concurrency/</link>
		
		<dc:creator><![CDATA[Charlie Murray]]></dc:creator>
		<pubDate>Fri, 06 Aug 2021 11:06:00 +0000</pubDate>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://13.127.63.32/?p=2518</guid>

					<description><![CDATA[<p>For a long time I have been thinking about writing a sample program in Rust “the” new systems language. I have done coding in C++ for initial 5 years of my career before I moved on completely to Java and recently in one of my products a requirement came up that a low latency high [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/rust-concurrency/">Rust Concurrency</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>For a long time I have been thinking about writing a sample program in Rust “the” new systems language. I have done coding in C++ for initial 5 years of my career before I moved on completely to Java and recently in one of my products a requirement came up that a low latency high performance component had to be developed.</p>



<p>As I have written by default Java was a default choice as its my first choice anyways. However I realized that this component could not afford non deterministic nature of garbage collector.</p>



<p>So need was to write program where I could have control over exact memory deallocation without worrying about “stop the world” garbage collection. Natural Choice was C++ but programming is all about having fun and I wanted to try out something new and C++ threading support and syntax is not all that great even in C++11.</p>



<p>So I decided to try out Go. but again Go had an issue of garbage collection and same fear of non determinism creeped in.</p>



<p>So time to try out&nbsp;<a href="https://www.rust-lang.org/en-US/" target="_blank" rel="noreferrer noopener">Rust</a>.</p>



<p>Program is simple but can be extended to lot of other scenarios.</p>



<p>One thread keeps spitting out data at some regular intervals. A vector keeps track of generated data.</p>



<p>Other thread keeps ticking at regular intervals (100ms or so) and whenever there are items which have elapsed time greater than a threshold those items are expired. Same as cache TTL.</p>



<pre class="wp-block-preformatted"><strong>use </strong>std::thread;
    <strong>use </strong>std::sync::mpsc;
    <strong>use </strong>std::time::{Duration,Instant};
    <strong>use </strong>std::collections::HashMap;
    //Define struct
    #[derive(Clone)]
    <strong>struct </strong>Item {
        <strong>created_at</strong>: Instant,
        <strong>id</strong>:<strong>i64</strong>,
        <strong>pub description</strong>: String
    }

//Implement Item
    impl Item {
        pub fn new(id: i64,description: String) -&gt; Item {
            Item {
                created_at: Instant::now(),
                id: id,
                description: description
            }
        }

        fn created_at(&amp;self) -&gt; Instant {
            self.created_at
        }

        fn id(&amp;self) -&gt; i64 {
            self.id
        }
    }

    fn main() {
        let (sender, receiver) = mpsc::channel(); //Creat  multiple publisher single receiver channel
        let sender_pop = sender.clone(); //clone sender
    
        //Create a thread that sends pop every 2 seconds
        thread::spawn(move || {
            //Create infinite loop
            loop {
                thread::sleep(Duration::from_millis(100));
                sender_pop.send(Item::new(-1,String::from("Pop"))).unwrap();
            }
        });

        //Create a thread that keeps sending data every second t
        thread::spawn(move || {
            let mut val = 1;
            //Create infinite loop
            loop {
                val = val + 1;
                sender.send(Item::new(val,String::from("New"))).unwrap();
                thread::sleep(Duration::from_millis(1000));
            }
        });

        //Create a mutable vector
        let mut vals: Vec&lt;Item&gt; = Vec::new(); 
        let ttl = 5; //TTL in seconds
        //Receive items in non blocking fashion
        for received in receiver {
            //let item = &amp;received;
            let mut item = &amp;received;
            let newItem: Item  = item.clone();
            match item.description.as_ref(){
                "Pop" =&gt; {
                    println!("Pop");
                    vals.retain(|ref x| Instant::now().duration_since(x.created_at).as_secs() &lt; ttl);
                },
                _ =&gt; {
                    vals.push(newItem);
                }
            }
        }
    }</pre>



<p>That’s it. You have done synchronisation between threads without any race condition. That’s how cool&nbsp;<a href="https://www.rust-lang.org/en-US/" target="_blank" rel="noreferrer noopener">Rust</a>&nbsp;is.</p>



<p>In the next blog we will try to send notification whenever items are expired.</p>



<p>Happy Coding&nbsp;!!</p><p>The post <a href="https://ezeiatech.com/rust-concurrency/">Rust Concurrency</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Software Architecture &#038; Its Importance</title>
		<link>https://ezeiatech.com/software-architecture-its-importance/</link>
		
		<dc:creator><![CDATA[Charlie Murray]]></dc:creator>
		<pubDate>Thu, 25 Jun 2020 10:48:00 +0000</pubDate>
				<category><![CDATA[Quick Tips]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Technology]]></category>
		<guid isPermaLink="false">http://13.127.63.32/?p=2509</guid>

					<description><![CDATA[<p>This post is about understanding architecture of an application and it’s role in web application development. I have worked in various domains writing softwares. All of us know that although developing software for each business domain throws new challenges and their needs differ vastly but there are many tools and systems which are used commonly [&#8230;]</p>
<p>The post <a href="https://ezeiatech.com/software-architecture-its-importance/">Software Architecture & Its Importance</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>This post is about understanding architecture of an application and it’s role in web application development.</p>



<p>I have worked in various domains writing softwares. All of us know that although developing software for each business domain throws new challenges and their needs differ vastly but there are many tools and systems which are used commonly everywhere.</p>



<p>So, most of the web applications are following this approach what we can call 3-tier applications.</p>



<p>You have got a presentation layer, business layer and a database layer. When you deploy you should be able to deploy on 3 boxes. Surprisingly lot of times you will end up deploying only on 2 boxes. Reason why some company might do this is that they did not&nbsp;segregate&nbsp;between physical and logical layers. One with all the logic and other one with just RDBMS running in background. Even sites like twitter and GroupOn had one big chunk of monolithic softwares where everybody was coding. Later on they decided to dismantle it into smaller blocks as it was impossible to scale this big piece.</p>



<p>Most of seasoned developers understand the meaning of layers but one important thing that they do not understand that a layer can be logical as well as physical.</p>



<p>A logical layer (separation of concerns, modular programming ..whatever you call them) sits in the same process space as other layers and just segregates logic.</p>



<p>You create a layer and expose it’s various functionality via interface. Client of your layer injects them using some fancy library like Guice, Spring or does a “new”.</p>



<p>Many start-up companies at least in India are taking this approach. They start small develop code in one big chunk and when they grow they start dismantling their code into various modules.</p>



<p>It might have worked for some companies but it puts a huge pressure on ROI and dependency increases on the existing developers. If one of them leaves you are doomed. And If I am not wrong you went with no documentation at all by following practices of agile programming (in wrong way). So all you can do is further increase the costs by offering higher wages :-).</p>



<p>On the other hand new people are feeling bad because they are not able to participate much as&nbsp;multiple&nbsp;activities are going on in parallel. Refactoring of current architecture, new feature development, pressure of management to develop new feature and bug fixing/maintenance of existing systems.</p>



<p>For refactoring you have probably cut a new branch and start working there but by the time you are finished your existing branch in production and your&nbsp;re-factored&nbsp;branch have been diverged so much that it becomes another exercise to merge them.</p>



<p>People do it though but almost on daily basis you will get regressions and all this mess will lead to another mess and increase the costs significantly. It will hamper the growth of the company.</p>



<p>There is no one solution to it. Different situations will require different solutions but I have also seen systems which have been managed pretty well over the years and thousands of new developers come and join the new team yet things remain in control.</p>



<p>So how come these two sides of same coin exists. When technology stack is same aren’t we supposed to have same kind of maintainable system?</p>



<p>What different one company did then others. As per me answer lies in Architecture of the systems.</p>



<p>One company was able to get it’s application’s architecture spot on right from the&nbsp;beginning&nbsp; Another company was doubtful about it’s growth and quickly wanted to put something on dashboard of users and praying that when they grow they will think about it.</p>



<p>This is also not a bad approach it works in many cases but getting the design right in first place does not take so much effort as it looks like.</p>



<p>Web frameworks like Ruby on Rails, Grails and Java script library JQuery are built on the very concept of plugins. It keeps things under control and these small piece of softwares can be maintained easily. If some component starts behaving badly you just stop using it by unloading that particular component.</p>



<p>It is well known practice adopted by experts and computer scientists that one should write code as if he is writing a library. It automatically brings modularity in system and maintenance become very easy (comparatively). and same is true about architecture also. One should develop modules to be consumed by others. Modules or components are supposed to expose a certain functionality. Others are just consuming it.</p>



<p>Great..looks like this is holy grail for solving our problems. Not yet. Once we have created different components and decided to deploy them on different machines we are actually facing host of other issues Deployment, Inter process communication, Fault Tolerance, Centralized logging to name a few.</p>



<p>We will try to solve these problems one by one in upcoming articles.</p><p>The post <a href="https://ezeiatech.com/software-architecture-its-importance/">Software Architecture & Its Importance</a> first appeared on <a href="https://ezeiatech.com">Ezeiatech</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
