What Are Architecture Design Records (ADR), and How Can You Get Started as a .NET Developer?
This document provides a comprehensive overview of Architecture Design Records (ADRs), a crucial tool for documenting key decisions in software development. Initially coined by Michael Nygard, ADRs encapsulate the reasons and context behind these decisions, helping future developers understand the system’s evolution. Each ADR typically includes a title, context, decision, status, and consequences, and is stored in the project’s version control repository. For .NET developers, this guide recommends the dotnet-adr tool, and provides step-by-step instructions to implement ADRs in your project. By incorporating ADRs, teams can enhance communication and preserve a clear rationale for significant decisions.
When To Use Serverless vs Containers
Everyone is talking about containers and serverless, but when should you use each in your projects? Anyone who has worked with containers and orchestration much will tell you how much more complex they can make your application’s infrastructure. But the cloud keeps abstracting details away from us so we can focus on creating our solutions […]
Buy vs Build: A Nuanced Approach to the Great Software Debate
One of the oldest debates for businesses that use software is the question of “buy versus build.” On the one hand, you have off-the-shelf or software-as-a-service (SaaS) offerings which are tried and true and spread the cost for their development across hundreds or even thousands of customers. The other option is to create custom software […]
Improving Stability and Security in JavaScript Apps Using Data Mapping
Being able to exchange data between the front-end and back-end of web applications is a primary component of their architectural design. For enterprise projects, neither part of the application should trust they data they receive. For example, hopefully it’s obvious that the back-end must validate every value that comes to its endpoints from the front-end. […]
Software Security For Humans
How secure is your software? Pondering this question can provoke uncertainty (or even fear) depending on the experience level of your software team and the maturity of your control processes. However, this does not need to be the case for most software teams. Software security is not easy, but neither is it exclusively the domain […]
The First Rule of Building Microservices: Don’t Build Microservices
A lot is being said these days about microservices. It’s enough of a popular trend online, at conferences, and in software architect chit-chat, that one could easily get the idea that microservices are always the superior architecture to the alternatives. In fact, even the commonly-accepted name for the alternative architecture sounds bad: monoliths. Yuck. Do […]
Clean Code: Bucket Pattern, Lazy Dependency Creation in .NET
Introduction What are Design Patterns in Software Programming? There are many definitions of the design pattern. For example, from Wikipedia: “In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. It is not a finished design that can be transformed directly […]
Tooling for the C4 Model: Structurizr Lite
In a previous blog post, I did a brief introduction to Architecture Software Visualization using the C4 Model. On this one, I want to show you some of the available tooling and give you a quick walkthrough on how to create our architecture models. Structurizr Simon Brown created Structurizr to build software architecture models as […]
The C4 Model for Visualizing Software Architecture
Introduction In this blog post, I will try to briefly condense my understanding of the work of Simon Brown, the creator of the C4 Model, a set of hierarchical diagrams that you can use to describe your software architecture. I will talk about the current state of architectural visualization, the issues presented by them, and […]