Thinking About Architecture

I was just reading the article, Enterprise Architecture is Strictly for Business, that I wrote years ago and I thought to myself, “What a shame that this never got published. It’s really very good.” Then I thought to myself, “Duh! It’s 2012. I don’t have to get someone else to publish an article for me. I can do it myself.” It isn’t agile and it doesn’t discuss strengths so it doen’t exactly fit within the theme of this blog. But it is my history and I am proud of it.

Beautiful Things

I love all things beautiful… My house is beautiful, not expensive, but beautiful none the less. The design of the exterior reminds me of a mountain top retreat. I really didn’t have anything to do with that except that I selected it from all the other houses on the market at the time. The interior is a totally different story.

I love color and I use the color wheel and the laws imposed by it to make my selections. I chose the triad of orange, green and purple in similar hues and varying intensities. As for furniture selection and placement, I selected smaller/modular pieces and use design principles learned from decades of design magazines and HGTV so that your eye flows seamlessly from room to room.  I purposefully, deliberately designed the interior of my house to produce a feeling of welcoming coziness. And it works. Everyone who comes to visit me says the same thing, “Your house is so cozy!”

I also love beautiful architecture.

I scored a 20 on Optimize Application Architecture and a 15 on Optimize Technical Architecture. What is the difference between Application Architecture and Technical Architecture? Rather than get into a heated discussion about that (just search the internet for all the various descriptions) let me just be specific about the system qualities that I attempting to categorize with the terms.

I use the term Technical (or System) Architecture to categorize the practical qualities of a system such as security, scalability, availability, and performance that are usually achieved with COTS components. Therefore someone scoring 20 in Optimize Technical Architecture would have thorough knowledge and extensive experience with COTS components and/or frameworks that provide qualities such as these. I use the term Application Architecture to categorize the softer qualities of a system such as reusability, modifiability, extendability and the like. More of an art, design principles/patterns are creatively applied to conform architecture to the unique aspects of a business domain. The outcome – if you understand the business then you understand the system. I am of course concerned with the practical aspects of the system and enlist help from qualified persons to make these quality decisions – I care! But I am truly motivated to set the mood. I want everybody who works on my systems to say, “Your software is so cozy! …It is so easy to understand. …It is so easy to fix. …It is so easy to extend!” But cozy architectures take planning and time which is why I enjoy RUP. I hold dear the RUP best practices to Model Visually and Use Component Architectures. I also hold dear the Lifecycle Architecture Milestone that postpones Construction until the architecture is proven stable with the implementation and testing of architecturally significant use cases (now, user stories).

“But this is not agile,” you complain. What about the Agile principals “The best architectures, requirements, and designs emerge from self-organizing teams” and “Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done”? But what if the self-organizing team in question has an influential member that scores high on Optimize Application Architecture that is motivated to create “cozy” architectures? What would you do? Ostracize them? Kick them off the team? Make sure you don’t hire them in the first place?

Thank goodness for Agile Architecture.

People First Process Second

Several months ago I delivered a presentation, People First Process Second, at a local developers conference. I was so excited to be able to present material that I had been mulling over for several years. I brought it all together in what I thought was a brilliant delivery… until I got the feedback. Although my audience was thoroughly convinced that I was knowledgeable on the subject, they voted adamantly that the subject was not completely appropriate for the venue. I concede; only persons who score 15 or higher on Optimize Process or Optimize Performance would have embraced the concepts. But why would they be at a developers conference? Oh well, I am extremely grateful for the opportunity because since I “brought it all together” I am now convinced that I am onto something really big – People First Process Second!

I Care…

I got quite a few responses to the Who Cares? survey, more than I thought. Thank you!

I took the survey myself and was surprised by my own results: Design (20) Process (20) Planning (20) Implementation (17) Business (15) Technical (15) Usability (13) Quality (12). No surprise that I care so much about Process, Planning and Design but I was surprised to see that Implementation ranked higher than Business & Technical. This could be because the rankings are not linear… but let’s ignore that for now. For the sake of curiosity, I will attempt to make some sense of it.

A couple of weeks ago I wrote that we are motivated to use our strengths because we are innately wired to them. That we are motivated to use our knowledge because we purposefully pursued it – sometimes to great expense. And that we are motivated to use our skills because it took time and effort to get good at what we do. Taking this into consideration, I believe my BS in Computer Science has a lot to do with why I care so much about Implementation. I purposefully pursued this field of study with great expense; I worked full-time while raising 2 young children – much of the time as a single parent. I have to say it was one of the hardest things I have ever done – and done well (3.4 GPA).

So what does this mean, should I be a developer? Well, I guess so. I enjoy writing code and I am the lead developer on my current projects using C# as my programing language of choice. I am also interested in learning Ruby.

As for the remaining categories, I realize that these gaps need to be filled. I need to pair up with people who care about Business, i.e. my business partners. I need to pair up with people who care about Technology and I have had the opportunity to partner with some really good architects, Kiran, Atin, John and Eric. I really need to pair up with people who care about Usability and I have also had the opportunity to partner with some really good usability specialists, Anand and Gina. And I really, really need to pair up with people who care about Quality and I have also had the opportunity to partner with some really good testers, Joyce and Franziska.

I know what I need to develop my team and I know how to do it.

Never too many responses! If you are actively participating in a SDLC, click here to see what motivates you.