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

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

Starting with Model Driven Architecture (MDA)

Introduction The systems engineering discipline focuses on an elegant universe we call reality wherein the two dimensions of time and space establish the landscape for the intertwining dance between the two natural forces of change and complexity. It is within this arena that the key ingredients of teams and people, methodologies and processes, and tools […]

Continue Reading

Design Principles

What are Software Design Principles? Software design principles represent a set of guidelines that helps us to avoid having a bad design. The design principles are associated to Robert Martin who gathered them in “Agile Software Development: Principles, Patterns, and Practices”. According to Robert Martin there are 3 important characteristics of a bad design that […]

Continue Reading

Caching Methods: Three High-Performance ones

Information systems performance and SOA performance are key concerns for architects that plan on implementing an enterprise data virtualization layer. Data virtualization is a form of data integration that tends to include many data sources that are both relational and non-relational, and organizes them in a logical virtualized manner rather than a physically consolidated manner. […]

Continue Reading