Friday, October 23, 2009

adding complexity to reduce complexity

In a recent Software Engineering radio episode Markus Voelter in his interview with a guest described complexity as energy. More specifically he talked about the law of conservation of energy (energy cannot be created nor destroyed, it can only be transformed). The topic of complexity can be viewed similarly.

By addressing some nuance of complexity in a project (e.g. growth of a team) we're applying tactics (e.g. hire a manager) that may solve the issue of coordination, but introduce the issue of bureaucracy.

We have come to accept these unattended consequences (or collateral damage) as a fact of life, but it's good to remind ourselves to question why we choose one tactic over another. Some of our "trivial" decisions are binding with no undo button.

Constantin K.
Firebrand Architect®

Wednesday, October 21, 2009

See the ecosystem, not the forrest

As a software architect one must see a forest and not just trees. As a Firebrand Architect® one must see an ecosystem and not just the forest.

Constantin K.
Firebrand Architect®

Tuesday, October 20, 2009

Architecting Windows 7

"To Rebuild Windows, Microsoft Razed Walls " is the title of an article in the October 20th 2009 edition of the Wall Street Journal.

There is something interesting about Microsoft's software development approach taken for Windows 7.

The article attributes the perceived initial success of Windows 7 to a different, more humble, approach taken by Microsoft and the Windows 7 team. While the quality of the operating system is yet to be determined by the real world tests it appears that the design and execution of the product was different.

"A key problem was that the Windows team had evolved into a rigid set of silos—each responsible for specific technical features—that didn't share their plans widely. The programming code each created might work fine on its own, but cause technical problems when integrated with code created by others."

This article exert contains a key observation. Operating system development can be viewed as a set of semi-independent silos united by a kernel. But it appears that the demand for effective integration of various operating systems components is essential for successful end-to-end experiences. And this is the key - Vista was not developed with the user's end-to-end perspective at all stages and that resulted in what we have today. For Windows 7 Microsoft appears to have taken a different approach.

And while the article doesn't use the words such as "architecture" of "design" it appears that Microsoft took a user and architecture centric approach to unify the work of all developers under an umbrella of clear objectives (which probably translated into specific quality attributes). For example, "An important new objective called "quieting the system," which sought to minimize windows and dialogue bubbles—such as security warnings—that pop up on screen during the normal operation of the PC." Another key feature of the operating system is a touch-sensing function that adapts to user's strokes and does not simply mimic a mouse. It's clear that a number of cross-cutting features were implemented in the operating system and initial response to the quality of software has been favorable.

It appears that highly collaborative engagements with an end-to-end perspective were enacted as part of the software development process; a known design approach finally taken by Microsoft at the operating system level.

You may find a link to the article here (available for about two weeks).

Constantin K.
Firebrand Architect®

Sunday, October 18, 2009

What kind of leader are you?

An architect role is a leadership role - that's a fact. Your leadership style and your capability to lead will enable or cripple your team.

There are many leadership gurus with thousands of books on the subject. For the purpose of this post and to keep things simple I'm using John C. Maxwell's five levels of leadership strucutre. I've been to his lecture and I like the simplicity of his approach. John's repertoire of books is significant (, but at its core the following structure stands.

Level 1. People follow you because they have to.
Level 2. People follow you because they want to.
Level 3. People follow you because of what you have done for the organization.
Level 4. People follow you because of what they have done for them.
Level 5. People follow you because of who you are and what you represent.

The first level is self explanatory.
At the second level your leadership depends on the relationships you build with the people. At this level you're connected and engaged. As John Maxwell says: "you listen, learn, and lead - constantly."
At the third level you're clearly demonstrating how you improve the bottom line. People see the results and performance that's the result of your leadership. You add clear value.
At the fourth level you're developing other people to be as effective as you are in leading others. People are attracted, because they want to be like you. Loyalty becomes very strong.
The last level, achieved by few in life, is given by others as a result of your lifetime achievement as an effective leader (think Gandhi, Churchill).

What kind of leader are you?

Watch for future posts on how to grow your level of leadership.

Constantin K.
Firebrand Architect®

Saturday, October 17, 2009

Friday, October 16, 2009

You, as an architect, must take the initiative

Simply by having an "architect" word in your title or role description automatically puts a heavy burden on you. Automatically people will assume, and rightfully so, that you have the responsibility of gathering and synthesizing information and making early design decisions. Your colleagues and stakeholders will expect guidance from you - well before and after the official software design phase commences.

As an architect you should be very well aware that you're under a spot light at all times. Nobody will ever tell you that the right time has come to start architecting. If someone has to tell you that now is the right time to start architecting it means that you're not paying attention. There are, of course, times when it appears that no action is required. For example, requirements are too fluid and insufficient to start designing, or a business case for a solution has not yet been well defined, or perhaps the funding has not yet been approved. The times of uncertainty are the times when the rest of the organization / team needs you the most.

As an architect, or rather as a Firebrand Architect, you should take initiatives to position the flow of the project / solution to enable you and the team make disciplined rational decisions. If you take the initiative, then you control the pace of the development. This does not mean that you have to fight for control with marketing or the R&D group. This means that you need to proactively monitor the environment and understand how the ongoing developments will constrain your downstream design space.

For example, if the requirements team is struggling with analysis try to evaluate if they are diving into details too soon. User your software engineering skills. Perhaps they are lacking a coherent vision document, lack requirements gathering structure, or simply lack resources. Determine if you can provide high level help based on your previous experiences. In the case of writing a business case you can provide insight of how this type of a solution would blend with existing systems and help determine time to market.

If you control or influence the pace and flow of your project progress before and after the software design phase you maximize the design surface area with which you can work to create software that's fit for purpose when the official design phase commences.

Constantin K.
Firebrand Architect®

Thursday, October 15, 2009

Interviewing future leaders at Carnegie Mellon - Heinz College graduate students

It's truly inspiring to speak with young graduate students who passionately feel about positively changing the world. This week I was asked to join a small team interviewing graduate students (Carnegie Mellon - Heinz College) who are seeking employment in late winter or late spring to put their degree to a good use.

The most exciting part of the interview was seeing how most students in my group were able to discuss concrete problems from an end-to-end perspective. Here is a general observation about the future leaders:
- they can effectively organize and leverage team members' time and skills; they are have a disciplined and patient approach for deciding who would lead and how the tasks should be distributed
- they continue to learn and care a whole lot about learning opportunities their employer offers
- they are open to new ideas and observations; change is not a distant concept, it's a way of life
- they are data driven at all the right places; they understand the value of business intelligence and they know how to formulate a problem so that the right data is gathered and analyzed so that the right insight can be provided in a timely manner
- they are professional and passionate
- they are fearless and ready to tackle new challenges
- they know they can and shall change the world

On my journey to Pittsburgh I was wondering if this trip was the best use of my time. On the way back I realized that I learned from the students as much as they learned from me. This was time well spent.

Constantin K.
Firebrand Architect®

Monday, October 12, 2009

You can't rely on your knowledge of patterns alone to architect

Design patterns are used for solving a specific known (routine) problems using a prescribed approach. For architects the patterns are the building blocks of the systems we create. An architects needs to have a working knowledge of a diverse library of patterns spawning various levels of granularity and applicability relevant to his or her domain.

It's important to note that all patterns fit somewhere on the spectrum of design decisions. All patterns can either be refined by lower granularity design patterns or rolled-up into larger patterns. However there are exceptions to these rules impacted by strategic vision and availability of resources (constraints). This is what makes architecting fun.

Constantin K.
Firebrand Architect®

Example of a solution not fit for purpose

Five years ago I architected and (with a small team) implemented a COTS centric solution (Microsoft and ProSight technologies). The design process was supported by clients and all phases of SDLC were executed well. Architecturally significant decisions were made based on factual findings. For example, after an evaluation of enterprise environment we concluded that the necessary bandwidth required by COTS software wasn't available and a decision was made to allow select user groups to access software directly on a server via a remote desktop connection. Other user groups would use web interface for simpler tasks. We estimated the number of users, application load cycles, data call spikes, etc.

In the end we crafted a seven sever solution with load balanced web front ends, separate logic server for data crunching, and a set of very powerful database servers (in 2005 fully loaded HP ProLiant 570 were the best of breed).

At UAT the solution surpassed technical and usability expectations and was well suited to handle over 3,000 users. So why is this solution (still actively used) not fit for purpose? Because the number of actual users is in the hundreds and not thousands. The client over estimated the adoption rate of the solution. The next year the business processes changed and the organization chose not to invest into reconfiguring the solution to enable the full 3,000 users to use it.

On a surface it appears that the architect is not at fault. But should the architect thought about user adoption? Should the solution have been designed with fewer servers from the start? In this case the risk of building for max size was the right choice, because this organization is large and slow moving. Procurement takes months and budgets are often unpredictable. Without knowing the history of this solution it's clear that this is an overkill and the solution is not fit for purpose (waste of computational resources). A potential way out is to scale down through virtualization, but of that's a story for another day.

Constantin K.
Firebrand Architect®

Sunday, October 11, 2009

What exactly is "fit for purpose"

Firebrand Architect® adopted the "software fit for purpose"™ mantra for a very good reason. It's the architect's job to make and bear responsibility for decisions that can make or break a software solution. Of course an architect is not the only factor in the success of a solution, but clearly early design (and approach) decisions come with high cost.

Deciding on what's fit and what's not fit, and how to reach the right balance, is a subjective and difficult question to answer. This is why software architecture (and various other flavors of IT architecture) will always be part science and part art. This is why there will be more and more architecture specialists (e.g. security architect, performance architect) over time as complexity of software solutions (or rather system of systems) grows. And this is why architects of all flavors need to have a well rounded understanding of the operating environment - including human aspects.

In order to convince oneself that something is the right fit takes discipline, experience, knowledge, and willpower. Having the willpower to question your own decisions as well as decisions and positions of those around you is a quality of a person who is a Firebrand Architect®. Ensuring the creation of software that's fit for purpose requires pushing the limits of the ordinary. It's a quality that doesn't come easy, but it's a quality that can be developed over time.

The important adjective here is the word "right." It's the right balance of requirements, constraints, patterns, decisions, and construction approaches that enables the creation of software fit for purpose. Striving for perfect or best is not a viable approach in most situations. See next post for an example of a solution not fit for purpose.

Constantin K.
Firebrand Architect®

Saturday, October 10, 2009

Software Engineering education for your clients and customers

This is not a "how to" post, but a reminder to build in time for client and customer education on software engineering. There is only one person in this world that thinks exactly like you, and that's you. Everyone else around you, even your long term colleagues, have a different perception of problem, solution, and approach even if you work well them.

This observation calls for two actions:
1. Build time (directly or indirectly) into your project to educate your clients and customers on the discipline of software engineering and software architecture. You'll have to spend time convincing them that a disciplined approach to creating software is not a choice, but the way of life.
2. Create a mini curriculum, or at least talking points, ahead of your engagements with clients and customers. You need to be proactive in your education sessions and they always should be done in the context of a specific business problem or a solution you're working on.

If a client or a customer has real world experience with enterprise grade software development or implementation you must gauge past experience. On a positive side a client may be receptive to your disciplined approach. On a negative side, if a client had negative experience, you need to understand client's perception of the software development process and demonstrate how your approach is better.

And most importantly - pay attention to the right approach. Selection of agile or highly structured software development processes and degree of requirements elicitation and software architecture analysis differs from problem to problem. Understand your client's situation and explain why your approach makes sense in a given situation.

Constantin K.
Firebrand Architect®

Wednesday, October 07, 2009

Writing down solution concept - a practical quick start guide

As an architect you’ve been tasked to come up with a business and technology solution. Where do you start? You probably have a lot of ideas and concepts in your mind. The best way to get started is to offload your ideas and concepts into a list – or better yet on paper or whiteboard (or Visio). As you dump ideas down you’ll be tempted to expand and link the concepts right away, but first concentrate on writing everything down.

The next step is to create a “back of a napkin” business perspective of your solution. What are the key components and functions? Perhaps a shopping cart, an inventory management thingie, a brain to pull it all together, and a payment processing element. Use whatever media you’re most comfortable to quickly sketch a business architectural cartoon. Show how things are linked.
Allocate all elements from your list at this stage.

The disciplined part of you may be tempted to think about decomposition using proper architectural perspectives (static, dynamic, and physical views). You may be thinking about the meaning of links between boxes. This will come later, but you’re still at a very creative stage. Keep on moving.

Next, create components that would implement / support the business elements and sketch them in the context of your existing operating environment. Again, draw loose associations between existing systems and your components. Now go one level down and decompose each of the components into sub elements (if appropriate).

In my most recent exercise I used a standard sheet of paper cut in half as my work space. As I created sheets I numbered them in sequence of creation. This allows you to spread them on a table (or tape to a white board) without the fear of forgetting your chain of thinking and decisions.

Put the resulting stack of sheets away for a few days.

Now you have enough material to create a discussion document. Use your favorite diagramming tool to create a presentation that’s targeting proper audience. Be sure to remove highly technical material out of the presentation targeting non-technical stakeholders.

Constantin K.
Firebrand Architect®

Tuesday, October 06, 2009

Using consultants for big picture insight

Few software engineers and software architects have the privilege of being meaningfully involved in so many initiatives that they see the big picture of where the organization is going. This does not apply to all architects and all organizations, so this tip is for large organizations.

If your organization is using consultants to help on various projects you should consider tapping into their experiences for a big picture perspective. Yes, they will ask you to fund the time they spend gathering the data and creating a presentation, but the insight may be worth the time and money. It’s always very beneficial to have a third party provide feedback on the elements you don’t have time or ability to see.

Caveats: only work off the existing trust level. If there is no trust between you and a consulting group you won’t benefit from provided insight. Pay attention to the recommendations and the consultants’ line of work – they may be consciously or subconsciously selling you more work (and you should expect them to do so). Reflect on the findings and synthesize with your current and future activities. This may be a good time to review your organization’s strategic plan and objectives (if it exists).

Constantin K.
Firebrand Architect®

Blockchain learning path for Enterprise Software colleagues

I wrote this post to document my learning path of blockchain concepts and Ethereum technologies while keeping my “new to blockchain” collea...