<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Software Architecture on jason grey</title><link>https://jason-grey.com/tags/software-architecture/</link><description>Recent content in Software Architecture on jason grey</description><generator>Hugo</generator><language>en</language><lastBuildDate>Fri, 04 Apr 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://jason-grey.com/tags/software-architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>Enterprise Rust 2025: Overview</title><link>https://jason-grey.com/posts/2025/enterprise-rust/</link><pubDate>Fri, 04 Apr 2025 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2025/enterprise-rust/</guid><description>&lt;h1 id="introduction-to-enterprise-applications-with-rust"&gt;
 Introduction to Enterprise Applications with Rust
 &lt;a class="heading-link" href="#introduction-to-enterprise-applications-with-rust"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;In the world of software development, the term &amp;ldquo;enterprise&amp;rdquo; often evokes images of bloated, legacy systems that are difficult to maintain and extend. However, this perception doesn&amp;rsquo;t capture the essence of what modern enterprise applications can and should be. In this blog series, we&amp;rsquo;ll explore how Rust—a language known for its performance, reliability, and increasingly rich ecosystem—is becoming a compelling choice for building enterprise-grade applications.&lt;/p&gt;</description></item><item><title>Enterprise Rust 2025: Framework Analysis</title><link>https://jason-grey.com/posts/2025/enterprise-rust-framework-analysis/</link><pubDate>Fri, 04 Apr 2025 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2025/enterprise-rust-framework-analysis/</guid><description>&lt;h1 id="framework-analysis-and-selection-for-rust-enterprise-applications"&gt;
 Framework Analysis and Selection for Rust Enterprise Applications
 &lt;a class="heading-link" href="#framework-analysis-and-selection-for-rust-enterprise-applications"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;When building enterprise applications with Rust, selecting the right frameworks and libraries is crucial for long-term success. In this post, we&amp;rsquo;ll analyze the Rust ecosystem for enterprise development, providing data-driven comparisons and practical guidance for making informed decisions.&lt;/p&gt;
&lt;h2 id="the-rust-framework-landscape"&gt;
 The Rust Framework Landscape
 &lt;a class="heading-link" href="#the-rust-framework-landscape"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Unlike ecosystems such as Java with Spring or .NET with ASP.NET, Rust doesn&amp;rsquo;t have a single dominant &amp;ldquo;enterprise framework&amp;rdquo; that provides an all-in-one solution. Instead, Rust follows a more modular approach, with specialized libraries that excel at specific tasks and can be composed together.&lt;/p&gt;</description></item><item><title>Enterprise Rust 2025: Core Components</title><link>https://jason-grey.com/posts/2025/enterprise-rust-core-components/</link><pubDate>Fri, 04 Apr 2025 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2025/enterprise-rust-core-components/</guid><description>&lt;h1 id="core-components-for-rust-enterprise-applications"&gt;
 Core Components for Rust Enterprise Applications
 &lt;a class="heading-link" href="#core-components-for-rust-enterprise-applications"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Building robust enterprise applications requires careful consideration of core components that handle data persistence, communication between services, and message processing. In this post, we&amp;rsquo;ll explore how to implement these essential components in Rust, focusing on database management, modularization approaches, internal RPC mechanisms, and message queuing systems.&lt;/p&gt;
&lt;h2 id="database-management-in-rust"&gt;
 Database Management in Rust
 &lt;a class="heading-link" href="#database-management-in-rust"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Data persistence is fundamental to most enterprise applications. Rust offers several approaches to database management, each with different trade-offs between type safety, performance, and developer experience.&lt;/p&gt;</description></item><item><title>Enterprise Rust 2025: Application Development</title><link>https://jason-grey.com/posts/2025/enterprise-rust-applications/</link><pubDate>Fri, 04 Apr 2025 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2025/enterprise-rust-applications/</guid><description>&lt;h1 id="application-development-with-rust-for-enterprise-systems"&gt;
 Application Development with Rust for Enterprise Systems
 &lt;a class="heading-link" href="#application-development-with-rust-for-enterprise-systems"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Building enterprise applications requires a diverse set of tools and approaches depending on the target platform and user interface requirements. In this post, we&amp;rsquo;ll explore how Rust can be used to develop web, CLI, desktop, and mobile applications for enterprise environments.&lt;/p&gt;
&lt;h2 id="web-application-development"&gt;
 Web Application Development
 &lt;a class="heading-link" href="#web-application-development"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Web applications are a common requirement for enterprise systems. Rust offers several approaches to building web frontends, from server-side rendering to WebAssembly.&lt;/p&gt;</description></item><item><title>Core Components - Enterprise Rust</title><link>https://jason-grey.com/posts/2023/enterprise-rust-2-core-components/</link><pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2023/enterprise-rust-2-core-components/</guid><description>&lt;h1 id="series-outline"&gt;
 Series Outline
 &lt;a class="heading-link" href="#series-outline"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://jason-grey.com/posts/2023/enterprise-rust-1-overview/" &gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Framework analysis and selection:&lt;/strong&gt; Delving into the specifics of framework selection and application.
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://jason-grey.com/posts/2023/enterprise-rust-2-core-components/" &gt;Core Components&lt;/a&gt;: Database management, modularization, internal RPC, AMQP.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jason-grey.com/posts/2023/enterprise-rust-3-web-api/" &gt;Web and API&lt;/a&gt;: Web Server, GraphQL API.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jason-grey.com/posts/2023/enterprise-rust-4-application-development/" &gt;Application Development&lt;/a&gt;: Web, CLI, desktop, and mobile app development.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jason-grey.com/posts/2023/enterprise-rust-5-miscellaneous-tools/" &gt;Miscellaneous Tools&lt;/a&gt;: Observability, logging, machine learning.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boilerplate project:&lt;/strong&gt; A comprehensive guide including setup instructions for selected frameworks, architectural diagrams, and development environment configurations.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 id="modularization"&gt;
 Modularization
 &lt;a class="heading-link" href="#modularization"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;Modularization is important in big software projects. It&amp;rsquo;s like building with Lego blocks – each piece of code is its own little block. This makes it easier for different teams to work on their own parts without messing up the whole thing. It&amp;rsquo;s also great for fixing bugs and adding new features, since you only have to change one block at a time. Plus, you can reuse these blocks in other projects, saving time and hassle. In short, modularization keeps everything organized, flexible, and easy to handle, especially when things need to change fast.&lt;/p&gt;</description></item><item><title>Overview - Enterprise Rust</title><link>https://jason-grey.com/posts/2023/enterprise-rust-1-overview/</link><pubDate>Fri, 20 Oct 2023 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2023/enterprise-rust-1-overview/</guid><description>&lt;h1 id="introduction-to-enterprise-applications"&gt;
 Introduction to Enterprise Applications
 &lt;a class="heading-link" href="#introduction-to-enterprise-applications"&gt;
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading"&gt;&lt;/i&gt;
 &lt;span class="sr-only"&gt;Link to heading&lt;/span&gt;
 &lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;The term &amp;ldquo;enterprise&amp;rdquo; in the context of software development often elicits mixed reactions. However, for the purpose of this discussion, let&amp;rsquo;s define an enterprise application as a comprehensive, collaboratively developed solution that adheres to high standards of long-term maintenance. Such an application is characterized by its modular design, both internally and externally, ease of integration, and its ability to address complex business challenges efficiently and reliably.&lt;/p&gt;</description></item><item><title>Migrations are hard...</title><link>https://jason-grey.com/posts/2023/migrations-are-hard/</link><pubDate>Tue, 09 May 2023 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2023/migrations-are-hard/</guid><description>&lt;p&gt;Watched this video today. It talks about how migrations are some of the harder problems in tech, but, nobody likes to work on them :)&lt;/p&gt;


&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/yJOrMDMqeoI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;I actually LIKE such migrations:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Challenging: Matt is very right - it is usually VERY hard to do this well.&lt;/li&gt;
&lt;li&gt;Meta: You get to learn how someone else did something - and have to understand it enough to refactor it away gradually.&lt;/li&gt;
&lt;li&gt;Rewarding: the migration usually needs to happen for some really interesting business/user experience reason.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Much of the focus of my professional life has been what I&amp;rsquo;d call &amp;ldquo;cleaning up other people&amp;rsquo;s messes&amp;rdquo; - migrating them from a messy/slow/non-expandable system to some new thing. Always during such projects one must think about how to elegantly migrate users from one system to another - ideally, without them even noticing. That&amp;rsquo;s the part I like the best - if I can pull it off without users noticing, I feel extra clever.&lt;/p&gt;</description></item><item><title>What makes a good component/service?</title><link>https://jason-grey.com/posts/2008/what-makes-a-good-component/</link><pubDate>Wed, 01 Oct 2008 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2008/what-makes-a-good-component/</guid><description>&lt;p&gt;A few collected thoughts &amp;amp; notes from around the web regarding what makes a good component/service.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Interface - all implementations share this. Should have few methods, use data objects as return values, take primitives as inputs, throw only custom exceptions, and be very, very well documented.&lt;/li&gt;
&lt;li&gt;Implementations - implement the logic behind the service. May provide extra features such as caching, or such things as optional collaborations.&lt;/li&gt;
&lt;li&gt;Data - data objects this service deals with. Should be immutable, comparable, cloneable as much as is possible. Should be serializable/XML/Persistance annotated in most languages.&lt;/li&gt;
&lt;li&gt;Storage - Data (or data.io) package should define storage API, and an in-memory data store. Allow other services/projects/subprojects to define database backed or other kinds of data stores.&lt;/li&gt;
&lt;li&gt;Cache - Data.Cache packages should define cache API? (or can this be standard per runtime?) Who should be in charge of caching? The service itself, or the user of the service?&lt;/li&gt;
&lt;li&gt;Use dependency injection for all services/data stores it requires. Use constructor-injection as much as possible.&lt;/li&gt;
&lt;li&gt;Throw errors early - in constructor if possible.&lt;/li&gt;
&lt;li&gt;Exceptions - custom exceptions for high level categories of erroneous behavior (try not to do one for every possible condition - classify, and wrap). * Don’t re-throw exceptions from other frameworks - wrap in custom exception.&lt;/li&gt;
&lt;li&gt;Make behavior configurable via dep injection as much as possible. Use filters or strategies.&lt;/li&gt;
&lt;li&gt;Inject 1 configuration object instead of many options. Standardize on configuration API/Framework for each runtime/language.&lt;/li&gt;
&lt;li&gt;Standardize on logging framework/API for each runtime/language, and make sure it’s used (instead of System.out or similar)&lt;/li&gt;
&lt;li&gt;Provide events/messages and/or hooks for important happenings so others can do things pre/post.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Mach-II first blush</title><link>https://jason-grey.com/posts/2003/mach-ii-first-blush/</link><pubDate>Thu, 27 Nov 2003 00:00:00 +0000</pubDate><guid>https://jason-grey.com/posts/2003/mach-ii-first-blush/</guid><description>&lt;p&gt;I recently have evaluated the &lt;a href="https://web.archive.org/web/20040604142521/http://www.mach-ii.com/" class="external-link" target="_blank" rel="noopener"&gt;Mach-II framework&lt;/a&gt; for ColdFusion MX. I started by developing our company holiday party RSVP website. It used a pretty simple form bean, and some standard &amp;ldquo;manager&amp;rdquo;, &amp;ldquo;dao&amp;rdquo;, and &amp;ldquo;gateway&amp;rdquo; objects, as shown in the Mach-II developer guide. My initial thoughts are very favorable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cleanly supports writing your code in a re-useable way.&lt;/li&gt;
&lt;li&gt;Much more object oriented than fusebox.&lt;/li&gt;
&lt;li&gt;Very good framework for MVC development.&lt;/li&gt;
&lt;li&gt;Fast - I like how many objects are stored in application scope, so they don&amp;rsquo;t have to be instantiated every request.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;rsquo;ve also started developing some base objects, filters, plug-ins and other useful tools which others may find useful, I&amp;rsquo;ll post them up here soon.&lt;/p&gt;</description></item></channel></rss>