Eventual Consistency Primer

The Eventual Consistency primer introduces eventual consistency and explains some ways to use it. This primer uses the CAP Theorem to highlight the challenges of maintaining data consistency across a distributed system and explains how eventual consistency can be a viable alternative. In an eventually consistent database, simultaneous requests for the same data value can […]

Continue Reading

Leadership Principles

Leadership is founded on holding and executing certain principles—namely, the notions of trust, vision, safety, and clarity. Establish Trust Leadership is a learned skill. Some people have a natural tendency to lead, whereas for others it is a struggle. Leadership is all about trust. Trust is in the examples we set for others and the […]

Continue Reading

Skyscrapers Aren’t Scalable

WE OFTEN HEAR SOFTWARE ENGINEERING COMPARED to building skyscrapers, dams, or roads. It’s true in some important aspects. The hardest part of civil engineering isn’t designing a building that will stand up once it is finished, but figuring out the construction process. The construction process has to go from a bare site to a finished […]

Continue Reading

Make the Invisible More Visible

MANY ASPECTS OF INVISIBILITY are rightly lauded as software principles to uphold. Our terminology is rich in invisibility metaphors—mechanism transparency and information hiding, to name but two. Software and the process of developing it can be, to paraphrase Douglas Adams, mostly invisible: Source code has no innate presence, no innate behavior, and doesn’t obey the […]

Continue Reading

Great Software Is Not Built, It Is Grown

AS AN ARCHITECT, you are tasked with providing the initial structure and arrangement of software systems that will grow and change over time, will have to be reworked, and will have to talk to other systems—and almost always in ways you and your stakeholders did not foresee. Even though we are called architects, and we borrow […]

Continue Reading

DRY Don’t Repeat Yourself

OF ALL THE PRINCIPLES OF PROGRAMMING, Don’t Repeat Yourself (DRY) is perhaps one of the most fundamental. The principle was formulated by Andy Hunt and Dave Thomas in The Pragmatic Programmer, and underlies many other well-known software development best practices and design patterns. The developer who learns to recognize duplication, and understands how to eliminate […]

Continue Reading

Before You Refactor

AT SOME POINT, every programmer will need to refactor existing code. But before you do so, please think about the following, as this could save you and others a great deal of time (and pain): The best approach for restructuring starts by taking stock of the existing codebase and the tests written against that code. This will […]

Continue Reading

There Is No ‘I’ in Architecture

I KNOW, THERE REALLY IS AN ‘I’ IN ARCHITECTURE. But it’s not a capital ‘I’, calling attention to itself, dominating discussion. The lowercase character fits neatly within the word. It’s there only because it fulfills requirements for proper spelling and pronunciation. How does that relate to us as software architects? Our egos can be our […]

Continue Reading

Architect’s Mantra

Software is one big building with many floors and rooms. Architecture is all around you, regardless of the reason why you’re in the building. Like posters on the walls of this building, i want to share this article with some mantras that everybody should take in mind. Mantra #1—It Depends It always depends. As an […]

Continue Reading

Runtime AOP tools

Runtime AOP tools create decorator/proxy classes dynamically at runtime. These classes are built by examining the signature of classes/interfaces along with an interception aspect that you’ve written, then generate a decorator class. Typically, these tools are part of IoC containers, as such containers allow you to use these generated classes transparently. My goal in this […]

Continue Reading

Building for Failure

While most of us aren’t building websites for banks, medical centers, or the NCSA, it’s still important to focus on and be aware of the possible failure points of our applications. Doing so gives our products an attention to detail that will be appreciated by our user base and will evolve into real, tangible profits. […]

Continue Reading

MonoGame: Collision Detection

Reacting to Solid Objects Collision detection is an important technique that you should learn. It is a requirement for every game ever made. I can’t think of any game that does not need collision detection, because it is such an essential aspect of gameplay. Without collisions, there is no action, goal, or purpose in a […]

Continue Reading