Archive for August, 2009


System design, while still a very young field and not physical in nature, needs to be more like architecting a physical structure than it is today. In that, it needs to come closer to adhereing to a set of principles and rules that can be generic enough in nature to apply to almost any project, without limiting flexibility and change.   Given the competing natures of the two different endeavors -building a physical structure and building an abstract system – these rules cannot be the same, though there might be overlap.

First let’s get the definitions down.

Design Standards – A set of mandatory rules that the design process must take into account.  Design standards are typically a set of mandates that an organization stipulates that must be applied to any solution architecture.

Best Practices -A set of commonly held and accepted methods or techniques for designing solutions.  As the name suggests, these method and techniques are proven to be successful over many iterations.  This applies to not just the design phase, but design, construction, testing, delivery and support.  These evolve over time, and are pratices that have been found to be consistent and nature and successful in implementation.

Design Characteristics –   Elements or components of a given design.

Design Principles – A collection of fundamental propositions that serve as the basis for a design paradigm.  These are typically industry accepted guidelines for solving specific problems.   Much like Best Practices, principles develop over time, but are instead always applied to the design process.

Design Pattern – Is a typical repeatable solution for a common problem.

Design Paradigm – A set of rules that define the approach to a given design, usually made up by a set of design principles.

Without examples definitions don’t make a lot of sense.

A design standard example would be a requirement from the EA team, that all deployed web based applications must have fail over capabilities.

A best practice example would be; Before any coding gets underway, a formal document must be delivered detailing all of the requirements of the project.

A design characteristic example would be; The system was designed with many reusable  components.

A design principle example would be;  The solution will be distributed.

A design pattern example would be;  An Iterator Pattern, provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation. (Wikipedia)  Another common example of a design pattern is the Model View Controller pattern.  In this pattern the system is broken up into a View layer responsible for showing data and interacting with the user, the Model layer which contains all the business logic and interfaces with the database, and the Controller layer which interfaces between the two and directs view direction.

A Design Paradigm example would be;  Object Oriented Design – which  provides a set of rules governing the practice of solving common problems, encompassing many design principles.

Over the next series of blog entries I am going to explore the world of SOA design principles and concepts, using the definitions provided above and explain how they are used to design a well thought out SOA architectures, given the understanding that each enterprise is different and therefore will have it’s own set of rules governing SOA implementations.

I promise in those entries to use well thought out ideas from over 16 years of designing and implementing solutions, in both a SOA and non-SOA environments, to simply explain how one can go about designing a SOA architeture, while meeting some of the most common business criteria, and ultimately provide the customer exactly what they require.

*To give credit where credit is due, one of the main resouces for this post is http://whatissoa.com.

An Enterprise Architecture framework provides a collection of best practices,
standards, tools, processes, and templates to assist in the creation of the Enterprise ArchitectureI

I was thinking the other day about large corporations and how they go about defining what the technical direction is for their entire organization. When I originally thought about this, I simply asked myself how do companies choose which technology to build their systems with?  Some organizations choose Microsoft for their server OS, and other organizations use a flavor of Unix.  Some use Java, others use PHP.  How can a CIO really understand why Hibernate makes sense in a certain implementation versus say ADF?    I have implemented systems in many different environments, and have always wondered why organizations, sometimes of the same size, and sometimes with competing business plans would choose such different platforms all together.  In doing some research on this subject I have come across the concept of Enterprise Architecture and Enterprise Frameworks.

What is an Enterprise Architecture Framework?

An Enterprise Architecture framework provides a collection of best practices, standards, tools, processes, and templates to assist in the creation of the Enterprise Architecture

Enterprise Architecture frameworks typically include:

  • Common vocabulary, models, and taxonomy
  • Processes, principles, strategies and tools
  • Reference
  • Reference architectures and models
  • Prescriptive guidance (EA processes, architecture content,
  • implementation road map, governance)
  • Catalog of Enterprise Architecture deliverables and artifacts
  • Enterprise Architecture Content Metamodel
  • Recommended set of products and configurations (optional)

Examples of Framework – Their Definitions According to Wikipedia.

Open Group Architecture Framework (TOGAF)The architecture is typically modelled at four levels or domains; Business, Application, Data, Technology. A set of foundation architectures are provided to enable the architecture team to envision the current and future state of the architecture.

OMB Federal Enterprise Architecture (FEA) – Enterprise Architecture of the federal Government.   The U.S. Federal Enterprise Architecture (FEA) is an initiative of the US Office of Management and Budgetthat aims to comply with the Clinger-Cohen Act and provide a common methodology for information technology(IT) acquisition in the United States federal government. It is designed to ease sharing of information and resources across federal agencies, reduce costs, and improve citizen services.

The Gartner Methodology (formerly the Meta Framework) - The GEAF describes a business or enterprise context layer that overlays the enterprise architecture to ensure alignment with the business strategy. The business context contains the articulation of the business strategy and its implications. It also articulates external “environmental” trends (such as regulatory requirements, market trends or technology trends) that influence the enterprise architecture. The business context informs the subsequent architecture work.

The DoD Architecture Framework (DoDAF) - The Department of Defense Architecture Framework (DoDAF) provides a foundational framework for developing and representing architecture descriptions that ensure a common denominator for understanding, comparing, and integrating architectures across organizational, Joint, and multinational boundaries. It establishes data element definitions, rules, and relationships and a baseline set of products for consistent development of systems, integrated, or federated architectures. These architecture descriptions may include Families of Systems (FoSs), Systems of Systems (SoSs), and net-centric capabilities for interoperating and interacting in the NCE

The Oracle Enterprise Architecture Framework (OEAF) - The Oracle Enterprise Architecture Framework provides a streamlined technology agnostic framework that helps Oracle collaboratively work with customers to develop strategic roadmaps and architecture solutions that enable business and IT alignment

Decision Making Process

Because the framework documents tend to come from a C-level executive, or from a team of people reporting to a C-level executive, they tend to both take into account the business strategy of the organization and contain the weight of the office.  They are a collection of overall globally researched documents, containing insight into the future direction of the company with an understanding of the current standing of the organization.  As a requirement of the outlined frameworks, these documents are required to take into account organizational growth as outlined by the leadership team, budgetary limitations, and a greater knowledge of current physical and personal resources.

These Frameworks are in essence the technical business plan for the organization.

When undertaking a review about which systems are performing adequately, if data is flowing through the proper channels at the right time, and where the organization needs to improve, these documents provide the main resource for making those decisions.     Each project that is identified as a strategic need for the organization, must meet the criteria laid out in the Architecture Framework documents.  Once a project is identified, choice of vendor, choice of hardware, and in most cases choice of personnel to complete the project must also meet these criteria.

These documents don’t however make the low level choice for the software developers and architects that I was originally thinking about.   Those choices are made by project teams using the Enterprise Architecture document as a guiding set of principals in helping to make the right choices.  So when a team is deciding between an MS platform, or one from IBM they must use these documents as a guiding force in choosing which platforms to go with.


One of my favorite things to do these days is pose wide open questions on Linkedin and review the responses.  Most times folks on that site give well thought out answers to those questions and I learn a great deal from them.    My latest question is; how do you know you have the right team?

The reason why I asked this question in this generic manor is because I wanted people to think about the teams they are on, or have been apart of and what made them work.   I wasn’t looking for anything specific.  Just general thoughts on what makes a team effective.  It didn’t matter to me if the team in question was a baseball team or an executive team trying to solve business problems. 

Here was the best answer – Thanks Octavio Ballesta

These are the steps that you should take into consideration from the perspective of a Team Leader for having the right team:

1. I make sure that from a personal perspective, everyone of the members of the team have a clear understanding about the rationality that justifies the project, and that at the same time, they are positively motivated and engaged to excel to work as world-class professionals.

2. From an organizational perspective, I make an extra effort to make sure that multidisciplinary teams belonging to different functional departments are able to get rid from a restrictive mindset exclusively oriented to functional issues to work by focusing in a systemic way of thinking that is fundamental in assuring success during the execution of organizational projects with high complexity and deep transformational impact.

3. From an organizational viewpoint is crucial to ensure that a transformational project will succeed, to get the sponsorship and explicit support from Senior Management, as is advisable in projects that could have a profound impact over corporate culture, organizational climate and company´s processes.

4. To ensure that the team will perform cohesively and with harmony during the project life cycle, I make my best effort to encourage a micro climate of open communication, a collaborative workplace technologically-driven and application of policies of Knowledge Management, that should be implicitly supported and encouraged by both, CEO and Top Managers.

5. It is instrumental provide the means in assuring operational excellence during project execution. Such a tactic usually signifies that this team will enjoy from the support of different departments such as HR and Technology to ensure so a flawless execution, and at the same time, compliance with the corporate policies and the standards of technology that are substantive to the organization.

6. The synergy among the members of a multidisciplinary team is a key factor in assuring that this group will feel true motivation and engagement to make an extra effort during project execution. Considering that high-performance teams are the result of mixing professionals with different experiences, degrees of seniority and disparate interests, is a wise practice instil within the team a culture of mentorship, where more experienced professionals share their knowledge, experiences and tips with junior professionals.

7. With the aim of providing unequivocal elements of strategic alignment, needed to ensure that operational execution is aligned with business strategy, I am always willing to schedule periodical meetings with one of more of the incumbent Top Managers to discuss and analyse elements of strategic alignment to assure an outstanding project execution.

8. As a key factor to preserve the motivation and commitment of the team, in working hard and excel regardless of what would be the perspectives that could be faced, I am generous and expressive when is time of recognizing the merits of the team as a whole; we celebrate all the goals relevant for a successful project execution, and we are humble enough to learn from failure, and decide after internalizing these experiences, grow as both professionals and individuals.

9. When a new professional must to be incorporated to the team is crucial ensure that this professional will have an excellent fit with the systems of values, policies and principles that are inherent to the organizational culture.

10. In the instances where a project will generate important innovation is advisable to hire expert consultants to assume the role of coaches, as a valid resource to ensure the transference of innovative practices to enrich both the organizational culture and company´s processes.

My IASA meetings are giving me a lot of material to blog about, and to tell you the truth this weeks meeting was no exception.   Today I want to talk to you about what characteristics you need to exhibit if you want to be a successful architect.

Communication is the most important aspect of your job as an architect.   Without the ability to listen and understand the problem space, as well as communicate your ideas for solving those problems, you’re absolutely sunk.

To be successful in your job, you must be able to communicate with your stakeholders, customers, and technicians on 3 levels, using the well known learning paradigm.  Some people learn by listening to verbal communication,  some learn through written communication, while others learn through visual communication.  To get your ideas successfully through to those following your lead, you must communicate on all three levels.

Understanding, and demonstrating you understand the business and how it works is the second most important aspect of your job.  Without this displayed understanding your customers will never gain confidence in your ability to solve their problems.

The successful architect must be also have an unending thirst for knowledge, and the ability to extract from the customer or stakeholders what he or she wants.   The more you know about your customer, the closer the solution will be to their needs.   Certain examples of this are the ability to ask probing questions, the ability to demo and get feedback, and the ability to involve your customers and stakeholder in the product development lifestyle with many opportunities to contribute.

The ability to apply software/hardware solutions – an inherently abstract concept – to the problem space is vital to being a successful architect.   You must be able to take the business problem, and abstract it into a software design, and implement the most appropriate technology.   This is key, don’t be a technology bigot.

Manage your time effectively.    Stay within your estimated time to complete the project.   We all know things arise that you cannot anticipate during the course of a project.  However, with enough experience you can make your estimates reflect many of the possible problems that come up.  Experienced architects over time develop personal formulas that they use when given an estimate taking into account unforeseen issues.  If the anticipated unforeseen issues do not come up, make sure your work is turned in under budget.  Your stakeholders will get a good feeling about you when you show that you are committed enough to the outcome that your willing to also keep the costs down.

An insatiable desire to learn.  The world of technology and business is constantly changing.   As an architect you must always make sure your toolbox is changing with the times.  Invariably you will be in a meeting with someone who will ask you about a given technological or business concept and you will need to be prepared to handle it.

Flexibility – businesses change get over it.   We are not building bridges where the physics are constant, the distance is known, and the theory has been proven over 1k years.   We are doing – dare I say – something inherently more difficult and that is modeling human behavior.   This increases the level of difficulty while at the same time, gives you the ability to ask your clients and stakeholders what it is they actually want, and if your getting it right.

I spent an hour last week talking to a couple of developers who are the main people behind a particular product.  I won’t name the product or the company, but let’s just say I have been personally working with this product on site with many different clients for the better part of 8 years.  The question I asked them is this..  “How do you know your developing what your customers want?”

Before I get to their response, let me say this.  I kind of set them up.  So let me give you a bit of background.   The product in question is being rewritten from the ground up.   So the architecture is changing.  But the architecture it self is not really of concern to me.   If they decide to use the MVC pattern with ADF that means as much to me as if they decided to build JSPs on top of hibernate objects using Axis to expose some web services.   What I care about is what happens when I take that product on site and have to make it work in front of the customers.

First of all let me say, I love working with customers.  I love the stress and the invigorating feeling of getting a idea to work, while the customer is breathing over my neck asking me when it’s going to be ready.  I don’t know, maybe I am an adrenaline junky, or maybe I just like to make people happy when they see the product working with their data.   But this part of my job is my most favorite.

With that said, I like to keep the happiness going.   I want to know that the idea I had to solve their business problem using the software they bought, is not only going to work, but is also going to make them happy long term.  I don’t want them turning around next week, and telling other people within their organization how disappointed they are.

So my focus has always been on the end game, and this always leads me to have the following questions floating around in my head.   What will happen when I leave this customer and they are no longer are paying consulting fees.  Will they be able to handle support for the installed solution?   Will they be frustrated by the software?    Do they feel as if their user base will appreciate how the solution improves their job?     In order to satisfy my questions I tend to spend a lot of time talking with the customer beyond what is required of me.

Other than the typical requirements gathering process, some of the questions that I like to pose to my customers when I am working with them.

  • What is the most frustrating part of this implementation?
  • What is the one feature you wish we could have that would make your job easier?
  • Tell me what are your users like?  (this one leads to really interesting thoughts.)  I typically follow up with what are their daily jobs like?
  • What complaints have you gotten from your user base so far during testing? (the responses here are also very different – a new blog posting someday)

So back to my original question.   The answer I got, did not surprise me.  It was a simple “I don’t know.”    Most development shops depend on a few people to tell them what the customers want.  And they code to those requirements.    This is the less costly, easiest way to go about performing development.. so it has it’s advantages.   However I don’t think it works well, and the answer to my question proved it.

This has to change.

Introduction to Agile / Scrum Development By Rob Dempsey.

Part 1

Your organization must change in order to gain the full effect of Agile.   If your organization will not change, you will not improve, and Agile is not for you.

In a nutshell here is the Scrum process.

Product Back Log -> Release Planning -> Sprint Cycle -> Increment -> Sprint Review -> Sprint Retrospective

Part 2

Each day you have a stand up meeting where you answer these questions.

What did you do since yesterday?  What do you plan on doing today? Is there anything getting in your way?

At the end of the cycle you review it, and discuss how you can improve the last sprint.

Part 3

Agile survey outcome says..

82% increased productivity

77% increased in quality

78% increased in stakeholder Satisfaction.

In software development today, the folks developing most software programs are not the same people interacting with the users of the end product.   This often times leads to software that misses the mark when it comes to expected functionality or application flow, because it is hard to understand what someone wants when you don’t know them.

With most Software firms, as software ages, requests come in from customers either through support channels or through sales and marketing.    These requests are logged against a companies bug and feature database and are later accessed by the development teams.  A typical developer logs into either an issues database, or a feature request list, selects the feature or the bug to work on, assigns himself or herself to the problem, then proceeds to work on the problem.    If there is a question about the bug or feature, the developer will contact someone in support/marketing/sales/consulting for an explanation.    Those they contact  will give their interpretation of the feature and the developer will code to that explanation.

Today in essence customer facing people in sales, marketing, and support drive functionality within the products.    This makes sense in today’s world as these are the people closest to the customer.  They have the most experience listening to customer concerns, business scenarios, and hurdles to make the given business a success.  In IT departments in most large corporations these are the Project Managers, and Business Analysts.  However what if there was a better way?   What if we freed our development teams to just find out for themselves what is the requested feature or bug?  What if we allowed them to call the customers directly and ask them what was meant by their request?  What if we allowed them to run screen shots, and demo’s through the customer in question.  Then what?  I believe you will have two outcomes.

  • You will improve the emotional intelligence of your development teams.
  • Your software will be a lot closer to meeting the needs of the market.

First of all what is emotional intelligence?  Wikipedia tells us this;

Emotional Intelligence (EI) describes the ability, capacity, skill or, in the case of the trait EI model, a self-perceived ability, to identify, assess, and manage the emotions of one’s self, of others, and of groups[1].

What abilities does someone with emotional intelligence poses?

  1. Perceiving emotions — the ability to detect and decipher emotions in faces, pictures, voices, and cultural artifacts- including the ability to identify one’s own emotions. Perceiving emotions represents a basic aspect of emotional intelligence, as it makes all other processing of emotional information possible.
  2. Using emotions — the ability to harness emotions to facilitate various cognitive activities, such as thinking and problem solving. The emotionally intelligent person can capitalize fully upon his or her changing moods in order to best fit the task at hand.
  3. Understanding emotions — the ability to comprehend emotion language and to appreciate complicated relationships among emotions. For example, understanding emotions encompasses the ability to be sensitive to slight variations between emotions, and the ability to recognize and describe how emotions evolve over time.
  4. Managing emotions — the ability to regulate emotions in both ourselves and in others. Therefore, the emotionally intelligent person can harness emotions, even negative ones, and manage them to achieve intended goals.

In other words, someone with emotional intelligence has the able to fully understand the person or persons they are talking to.  They know the right questions to ask, and how to ask them, in order to get more information out of the people in question.  They also know how to gain the trust of others so to make those they are interacting with more comfortable, and willing to share.  These abilities are not something we are born with.  It takes time, energy, and a willingness to learn and interact with people, in order to learn them.  Most of all, a persons EQ can develop over time from simply interacting with other people.

However in today’s development shops developers spend most of their time interacting with software, and are completely detached from the world at large.    Because of this, they rarely get the opportunity to interact with customers.   Management mandates that customers – and sometimes consultants – don’t contact developers directly and that developers don’t contact the customers.

The most important aspect of software development is not which technology you choose, or the amount of lines of code you write, but whether the customer is going to be happy with what you produce.    How close you get to their vision and goal sets should be the ultimate goal of any software development project.

But by limiting the interaction our developers have with customers we limit their ability to know what the customer really wants.  For every layer of interpretive explanation, marketing->sales->product manager->project manager->developer you add risk to the process of getting the initial requirement correct.   For example; ever play that game where 20 people sit around a camp fire, and tell stories around the circle?  The first person tells a story to the second person, the second to the third, and so on.  By the time that story gets around to the 20th person it’s completely different than it was at the begging.   Well this game illustrates how people work.   Every experience consisting of sound, audio, or touch invokes different emotions and thoughts within each person, because  we all have our own vocabularies and experiences to draw from.  These thoughts and emotions are then communicated differently to the next person.

Well if we deny our developers the ability to interact with the source, how can we ever expect them to fully understand the requirements or gain Emotional Intelligence?   We can’t, which I think is how companies die, as their software gets further and further away from the actual business need.

The closer your development teams are to the actual need, the closer the developed product will be to the customers needs.  This doesn’t mean that there is no need for marketing, sales, and support, and  yes you will still have to manage time, scope, and development cycles, be they agile scrum based sprints or waterfall type methods.   However the more connected your development teams are to the needs of the customers, the more they will be able to interpret the requests, and anticipate future needs as they develop because they will understand the requests better.

Ultimately your products will be better, your development teams EQ’s will be higher, your design sessions will be better because everyone has the right information, and your customers will come back to you for more.

Follow

Get every new post delivered to your Inbox.