Prevent, Detect and Recover

Most organizations spend a lot of money trying to prevent damage to information assets.  Typical measures are firewalls, anti-malware, authentication, authorization … But sadly most organizations forget there are three dimensions to proper risk management:

  1. Prevent. Measures to prevent risks from becoming reality. This is where typically most investments are done.
  2. Detect. Detect, after the fact, that something damaging happened to information assets. This is not limited to mere detection but also includes determining the actual impact.
  3. Recover. Undo the damage that was done, ideally as if nothing happened but minimally to a level accepted by the organization. A good detection, specifically of impact, is needed to properly recover.

It is amazing how much money is spend on the first dimension and how little is spend on the other two. Yet a good information risk management consists of a good balance between all three dimensions.

  • If you are not good at detecting damage to information assets, how can you know how well your prevention is performing?
  • If you can detect an intrusion but you have no idea what they did, how can you recover?

Prevent, detect and recover is not limited to attacks from hackers, human or technical errors are as damaging as hackers.

Imagine you periodically receive a file from an external party, this file is to be processed and will result in updates to the database. A responsible organization will take typical measures like signing and encrypting the file, verifying it’s structure using a schema … all aimed at preventing damage. But what if the external party made an honest error and supplied you with the wrong file?

None of the earlier measures will prevent the damage to your database. Even if you can’t automatically detect this damage, perhaps you’ll have to wait for a phone call from the external party, you can take measures to recover. Database schema’s and the updates could be crafted in such a way that you can “rollback” the processing of the erroneous file.

Information risk management should not be limited to prevention, but balance it with detection and recovery. It should also give sufficient attention to risks originating from human or technical errors. In fact, most damage will come from this and not from malicious users or hackers.

European Identity & Cloud Conference 2013

Last weekend I registered for the European Identity & Cloud Conference 2013 organized by Kuppinger Cole.

The agenda looks very promising with topics like:

  1. Managing Identities and Access to Information for Cloud, Mobile and Social Computing
  2. Privacy, Data Protection, IT-Law
  3. Cloud Governance
  4. Beyond BYOD, IT Consumerization & Mobile Enterprise
  5. Life Management Platforms, Personal Data, Customer Managed Relationships
  6. The Internet of Things (IoT)
  7. (Big) Data Governance/Stewardship
  8. How to Build your IAM/IAG Infrastructure the Right Way – and Support Business Today

I can’t wait until May and hope to see some of you over there!

The Mathematics of Simplification

People who know me, know that I am a huge fan of mathematical foundations for anything related to architecture. We have far too many frameworks, methods and theories that are not scientifically (e.g. mathematically) founded. It is my believe that this holds us, enterprise (IT) architects, back in delivering quality in a predictable and repeatable way. Much of the architecture work I come across can be cataloged under ‘something magical happened there’.

Examples

There are examples of mathematics being used to improve our knowledge and application of that knowledge.

Jason C. Smith has used mathematics to create a representation of design patterns that is independent of the programming language used. It allows you to analyse code or designs and find out which patterns actually have been used (or misused).

Odd Ivar Lindland has used simple set theory to create a basis to discuss quality of conceptual models. Highly recommended if you want to think more formally on the quality of your models.

Monique Snoeck and Guido Dedene have used algebra and formal concept analysis to create a method for conceptual information modeling, finite state machines and their consistency. A good introduction is the article ‘Existence Dependency: The key to semantic integrity between structural and behavioral aspects of object types‘.

This is just a grab in the formalization of Enterprise Architecture. There are many more examples!

The Mathematics of IT Simplification

Recently I came across a whitepaper from Roger Sessions titled ‘The Mathematics of IT Simplification’. In this white paper the author describes a formal method to partition a system so that it is an optimal partition. He offers a mathematical foundation to support his method. It’s really interesting and I would encourage anyone to have a look.

The whitepaper suffers from a serious defect though. It makes a few assumptions, some expliciet and some implicit, that are crucial to the conclusions. But some of those assumptions are not as safe or obvious after some scrutiny.

  1. Only two types of complexity are considered: functional and coordination}. The author states that only these two aspects of complexity exist or are relevant. It is also stated that aspects are also independent of each other. There are no references to existing research that supports this assumption nor is there any attempt being in the article itself to justify the assumption.
  2. The Glass constant. The author needs a way to quantify the increase of complexity when adding new functionality. He uses a statement made by Robert Glass. But how true or applicable is that statement? Even the author himself states Glass may or may not be right about these exact numbers, but they seem a reasonable assumption.
  3. Coordination complexity is like functional complexity. This is probably the most troublesome assumptions. The author builds up a (non scientifically) case for the mathematics for functional complexity. He fails to do this for coordination complexity and simply states that the same mathematics will probably apply.
  4. A final assumption, even though not explicitely made in the article but nevertheless present, is that adding a new function does not affect complexity of existing functions. I can imagine adding functions that actually lower complexity of existing functions. The article in fact is only valid for completely independent functions, which makes it not usuable with decomposition or dependent functions. But those are in fact the most common circumstances for doing complexity analysis to justify partitions

Nowhere in the article is there any scientific proof that these assumptions are ‘probably’ true. Arguments in favor of the assumptions are either leaning towards it is worst case so it can only get more precise or the assumptions feels right, doesn’t it. Neither of these are accepted in the scientific world. Scientists know how dangereous it is to base conclusions on assumptions that are not founded in research, be it empirical or theoretical.

Research to quantify complexity, even if just for comparison, is valuable. Therefore I applaud this effort but I would encourage the author to go forward with it:

  1. conduct empirical research to gather data that supports the assumptions made;
  2. find similar research that either supports or rebutes your assumptions and conclusions;
  3. and finally the most important, apply for publication in an A-level publication to get quality peer review.

All of the examples I gave in the introduction did these steps. Their conclusions are supported by empirical research, they stand on the shoulders of prior research and their work has been peer reviewed and published in A-level journals. That is the kind of scientific foundation Enterprise Architecture needs.

Standards, picking the least worst

Most people dread standards, they are considered a nuisance at best but are mostly regarded as something specifically crafted to make life miserable. Yet standards are key in a healthy IT organisation. So why is it that people have such negative feelings about standards? In this article I’ll try to explain what the benefits of standards are and give some possible reasons on why they have such a bad reputation.

Perhaps unnessary but let’s first answer the question “what is a standard?“. A standard is a rule that instructs people to use a specific technology instead of alternatives, to perform an activity in a certain way, to use a common template for documentation … In other words, it limits personal freedom and forces them to do things, and always do things, in a certain way.

The case for standards is created around the premise that the IT organization as a whole benefits more than any loss that may be incured in some projects. But how can the IT organization benefit while some projects suffer? The key to explain this is optimization of investments. Investments made by the IT organization in those standard technologies, processes, templates …

Optimization Of Investments

Imagine the following scenario. Five years after an application has been placed in production, some features need to be added. You walk into the IT department and ask the following questions “Who knows what needs to be done, how much would it cost, how long will it take …?”. There are two possible ways this can go.

Option 1, the application was developed with a technology that was hardly used in the last years. Not a lot of people know what needs to be done and those people that did know can’t remember all the details, it’s hard to budget the change and no one really wants to estimate how long it will take. It may not be that bad in reality, but it’s obvious that at least some additional risk is present.

Option 2, the application was developed with a technology that is still being used for most application. Given all that experience, most people have a pretty good idea of what needs to be done, it will cost roughly as much and take as long as similar projects from a recent past. It may not be as positive as pictured, but in this case it’s obvious that risk is kept to an acceptable minimum.

These two options show what I mean with “optimization of investments“. By consistently using an as small as possible set of technologies, investments can be optimized: financial resources are spread less thin, opportunities for gains in experience and knowledge are focused to a small set of technologies …

Similar arguments can be made to show how standardized processes or templates will create benefits for the organization.

Individual Projects Will Suffer

In the introduction I stated that standards may actually make some projects suffer. In fact, it’s an absolute guarantee that some projects will suffer. I often state that I can make any project cheaper by having it not follow a standard.

A project team could be more experienced in a technology that is not your standard (although I suggest you audit your sourcing strategies if this happens), an alternative technology could have a feature that makes life considerable easier … there can be many reasons why a different technology benefits your project more than a standard will.

That is actually the heart of the problem with standards, everyone regurarly is confronted with standards as unbeneficial but rarely see the benefits for the IT organization as a whole.

Picking The Least Worst

When you choose technologies to become a standard, you are not looking for the one that is the best in a (small) number of cases, you are looking for the technology that is least worst in most cases. Yes, you read that right, it’s about picking the least worst. That may be one of the most common misconceptions of standards and is probably the root cause for the many (often useless) debates about changing one standard for a better one. If you change a standard, you are also rendering prior investments obsolete, thereby renouncing benefits. Either that new standard has to be extremely better or keeping the old standard must be awfully bad. In any case, a managed transition is required to safeguard past and future investments.

Changing a standard is not something you want to do in just the context of project, it’s a choice that affects the entire IT organization in the long term and therefore needs to be made at that level.

It also follows from the above that the best you can do with standards is to apply them as often as you can. The more you apply them, the less room there is for rogue technologies, the more experience the organization gains and the less risk there will be in the long run.

Top 3 Fundamentals Every Architect Should Master

An architect is often seen as a generalist who needs to know a little about everything. Although this is technically true there are still some concepts every architect should master in every detail. So far I can list the following three, in order of importance (first being most important).

  1. Abstraction
  2. Information – Behavior – Structure
  3. Systems Thinking

Abstraction

Abstraction lies at the core of almost every single method, tactic or model an architect deploys. The vast majority of issues I encounter with architectures are directly related to insufficient understanding of abstraction. I  am not talking about just “leaving out details”, I am talking about a deep understanding of what abstraction really is: generalization-specialization, idealization-realization, composition-decomposition and the large influence it has on everything we do as an architect.

For a good introduction to the subject I recommend Graham Berrisford’s site (“Library” and “Methodology” sections). I deliberatly don’t deep-link so you’ll have the benefit of wading through all his material, highly recommended. But realize that this is even just the tip of the iceberg!

Information – Behavior – Structure

Closely related to the third topic (Systems Thinking) is the distinction between information, behavior and structure. A concept that is known since at least the 70’s in information analysis and lies at the heart of most methods we use today. Structured analysis and design is the mother of most relevant methods and modeling we know today, itself it is a continuation of general systems thinking and cybernetics. More recently the ArchiMate notation has reintroduced these concepts for the masses.

Again, I am not talking about merely knowing the difference but about the impact it has on our daily work. Applying abstraction to the concepts of information, behavior and structure is one of the key elements needed for true mastery of architecture.

Systems Thinking

Finally my (so far) last “fundamental” is (general) systems thinking and it’s children like cybernetics. This fundamental is probably more relevant for enterprise architects. Solution and application architects are more often dealing with systems that can be modeled using mechanistic views or simple deterministic or animate systems (see Russell L. Ackoff and Jamshid Gharajedaghi, “On the mismatch between systems and their models“). Nevertheless all architects benefit at least some from a deeper knowledge of systems thinking. Even though I may be haunted for saying this, but most SOA architecturs fail at least because the systems-aspect has been neglected.

What do you think, is this list too short? Are there any fundamentals missing? Leave a comment!

What I would Change About ArchiMate

ArchiMate 1.0 has been out for a while and ArchiMate 2.0 is months if not weeks from publication. Drafts for 2.0 have been circulating around a while now. The upcoming 2.0 version doesn’t change a lot to the core language. This new release is mostly marked by two extentions: one for modeling business motivatons and requirements and one for modeling the implementation and migration phases.

Most of what I was looking for in 2.0 didn’t made it. Here is a list of what I would have changed in 2.0 to the core language.

Define Business and Application Function as structure

It may come as a surprise but Business Function is not behaviour. Behaviour is the reaction a system has after being triggered by an event. Any behavioural element therefore represent instances that have a start time (when the event triggers), a result and an end time (when the result is produced). A business function is not such an element.

Most if not all meta models, including TOGAF, describe it as a structural element. In ArchiMate it would be a more logical version of a business actor. In other words, it’s an idealization of a business actor.

The exact same reasoning to move Application Function from behaviour to structure. An Application Function is a logical (idealized) version of an application component. TOGAF would call it a Logical Application Component.

Add Application Process as a core element

The business layer has a process element, why shouldn’t the application layer have it? An application service with the related application process would corresponds to a well known concept in IT: use cases. I would love to see them in ArchiMate!

Add dependency relationship

ArchiMate has tons of relationships, most of which should are hardly used, yet it misses one of the more important relationship: dependency. ArchiMate tried to avoid it by adding most of the specialized dependencies: Used By, Access, Realization …
But there are still places where I would like to use a simple dependencies without being forced to specify more detail.

Redesign the technology layer

ArchiMate is built around the distinction of internal versus external and behaviour versus structure. This is very visible in the Business and Application layer, especially with the above proposed changes. The technology layer is an exception. They tried to fit UML elements in this model and did a pretty good job. Yet, it feels wrong that the symmetry from the business and application layers is not showing in the technology layer.

I even wonder how wrong it is to have a behavioural item (System Software) inherit from a structural item (Node).

Something is not right in that layer and it needs to be fixed.

The Pragmatic Architects Creed … no thank you

I got informed about a new deliverable from the folks from Pragmatic Enterprise Architecture: The Pragmatic Architects Creed. They collected a list of statements about architecture and ask you to sign it so you can show your support.

Since this felt like a good thing, I headed over to the list to sign it. Luckily I decided to read it first before I would sign it. In my opinion, most statements are too generic, some are plain wrong and only a small number qualify for my signature.

Here is the list of statements with my comments inline. See for yourself if you agree or not, leave a comment if you want to share some of your thoughts.

I put the interests of any organisation I work for above the personal or siloed interests of the individual that employed me.

Euhm … perhaps … never? As an architect it is my responsability to design a system that realizes as much of my clients wishes as possible while staying within the budget, time frame and the boundaries set by the environment. If that client is a business unit manager, I should only follow that manager’s wishes. If the manager asks me to try and go around some limitation set by the organization, than I will do so. It is up to the organization to set the boundaries.

If I wouldn’t do that, I would not be able to build a trust relationship between the client and me. My client would not experience me as someone who is helping him to achieve his goals but as someone sent from an outsider to make it difficult to reach his goal.

If the environment, the organization, wants to influence my design to make sure it serves the greater good, they have to do so in advance by setting rules. At a different moment, they can even hire me to do that. This is the role building regulations have in modern societies.

But honestly, as an architect I can’t serve two masters with potentially competing visions.

I can vehemently agree with someone about subject/point B when I have only recently vehemently disagreed with the same person about subject/point A.

I agree with this one. But is this limited to architects? To me this looks like a credo valid for any professional in any industry.

I love to be proved wrong.

Whoever claims he or she loves to be proved wrong, is lying. Nobody likes to be proven wrong. I do like to learn from other people and I am willing to adjust my ideas or statements whenever needed. Being proven wrong is never a good reason to stop learning or become unreasonable.

I relate new things that people do not know to . things that people already know.

I agree but again think this is a generic credo for any professional in any industry.

I spend more time understanding a problem domain than determining a solution.

Why? I don’t understand this one. If the problem domain is simple and the solution complex, I’ll spend more time thinking about the solution. I don’t see how you can objectively see this as a credo.

I stand up and give an unpalatable truth when no one else will, even though it may mean I lose my job.

Please do so, that frees up a spot for me 😉

But seriously, depending on the “unpalatable truth”, the context and the involved players, I’ll speak up or stay silent. I do take my responsability as an architect and I often do tell people things they don’t want to hear. At the same time I am not trying to improve everything around me nor do I stop people from learning from their mistakes.

I constantly ask myself and others; Why?

Nothing to add, I agree.

I see patterns and structure in everything from traffic congestion to Pop Music.

Given the previous credo … why? Why would it help me, my clients or the profession in general if I see patterns and structure in everything from traffic congestion to Pop Music? As an architect I must have a solid understanding of patterns and structure, those are at the core of the profession, but there is no need to see them in everything around me.

I can see disagreement between people when those people think they are in agreement.

This is a good one in fact. All to often I see people agree when they are in fact talking about two different things. As a person who has often more expertise in the subject, I see it as my duty to inform them they actually disagree.

I can abstract any thing or idea to a logical and conceptual level.

A solid understanding of idealization/realization is a must for every architect so I will agree with this one. I do feel a bit uncomfortable with the words “any thing or idea” however.

I never, by admission or omission, lie.

I would have agreed if it wasn’t for the word “never”. You can help people if you sometimes lie to them. Lying should be an exception however and must never harm. But as Robin Williams, playing the role of Theodore Roosevelt, said: “Sometimes it’s more noble to tell a small lie than to deliver a painful truth.” (http://btr.michaelkwan.com/2009/07/30/more-noble-to-tell-a-small-lie/)

I know the difference between a Model, a Metamodel, and Metametamodel.

Basic knowledge for any architect, I agree.

I know the difference between layers of abstraction; Contextual, Conceptual, Logical, Physical.

Is this a more generic version of the one about logical and conceptual level? I think so. I still agree.

I know the difference between Architecture, Design & Construction

One can start a civil war by discussing about the difference between “architecture” and “design”. So I challenge the author of this statement to explain the difference to me. Oh, one catch, the difference has to be described in a scientific and objective way. Definitions like “design contains more detail” or “architecture is about managing risk and cost” won’t cut it.

Writing Requirements … is HARD

An interesting bit from a summary from a Keynote by Martin Fowler:

Requirements gathering is also very tough on large projects. Martin provided an interesting comparison between writing requirements documentation and writing books. Writing a book requires a very large investment of time and energy. Even after peer reviews and feedback from professional editors, the author still is not always successful at communicating his/her intended message to the audience. His point was that if authors have a hard time doing this with books, imagine what it must be like to capture the requirements around a complicated business application given far fewer resources.

If a professional author is not always capable of communicating his/her intended message, what chance does the business have in getting their requirements across to IT with far less time, expertise and resources.

Devil’s Architect

Most of us are familiar with a famous quote from the movie “Devil’s Advocate”. If it was Devil’s Architect, it would sound like this (adaptation by me):

Let me give you a little inside information about Solution Architects. They like to watch. They are pranksters. Think about it. They give project managers architecture descriptions. They give them this extraordinary document with rules, guidelines and decisions, and then what do they do, I swear for their own amusement, their own private, architectural gag reel, they set the rules in opposition. It’s the goof of all time. Build but don’t couple. Couple, but keep separate. Separate, but watch dependencies. Ahaha. And while project managers are jumpin’ from one foot to the next, what are they doing? They are laughin’ their sick, fuckin’ ass off. They’re tight-ass. They’re sadist. They’re an absentee landlord. Follow them? Never.

Here is the original:

Let me give you a little inside information about God. God likes to watch. He’s a prankster. Think about it. He gives man instincts. He gives you this extraordinary gift, and then what does He do, I swear for His own amusement, His own private, cosmic gag reel, He sets the rules in opposition. It’s the goof of all time. Look but don’t touch. Touch, but don’t taste. Taste, don’t swallow. Ahaha. And while you’re jumpin’ from one foot to the next, what is He doing? He’s laughin’ His sick, fuckin’ ass off. He’s a tight-ass. He’s a sadist. He’s an absentee landlord. Worship that? Never.