Archive for the ‘Uncategorized’ Category

Performance Testing – Starting Out

March 17, 2011

We recently started implementing performance testing procedures for our products in my company. The trigger wasn’t an execution of some thought-out plan but a desperate measure following a service disruption unfortunately. I always thought that we had more time. I have to admit, it was very naive and irresponsible thinking. Regardless of the precursor, here are some initial observations after I started looking for performance testing practices.

First of all, in comparison to all resources dedicated to scalability and NoSQL, the web felt semi abandoned when it came to performance testing. The reason for this comparison is not arbitrary. My line of thinking was that before jumping on scalability initiatives, and before moving from relational databases to document ones to address performance concerns, for example, people would first need to show that those are, in fact, concerns. I thought I wouldn’t have any problems locating first hand accounts on how teams approached performance testing and found pressing needs to tackle scalability and try out NoSQL. No such luck. I hope folks choose NoSQL because it’s a better tool for certain jobs, not because it solves imaginary performance issues.

Search results for performance testing tools was a list of well known and old suspects. Some of them weren’t updated in years. By itself it’s not such a bad thing. The tools could have matured and reached a level where frequent updates weren’t necessary any longer. The biggest surprise was a discovery of almost perfect vacuum in place of how-tos and tutorials on integration performance testing as a part of an application lifecycle management. No set-ups shared, no words of wisdom, no proverbial best practices.

There are two reasons that I can think of to explain this:

1) Performance testing is bordering art and magic, and it’s very dependent on the application or system being tested. There may be hundreds of companies in my city only, that do this every day, but their set-ups are so custom that they don’t feel sharing any details would benefit anybody else.

2) Performance testing is not really common. Applications go down generating wake up calls to development and operation teams, who them scramble in haste to fix the problem.

What is your experience?

Advertisements

Counting a number of added lines to a file

March 1, 2011

Problem: need a quick way to monitor number of queries executed by Hibernate as I browse a web application. All queries are logged into ‘hibernate.log’ file.

Solution:

echo "0" > counter; while true; do CURRENT=`wc -l hibernate.log | awk '{print $1}'`; echo $(($CURRENT - `cat counter`)); echo $CURRENT > counter; sleep 5; done

Frantic pace of technology

July 23, 2010

The latest issue of “Computer” has an informative article “Simplicity as a Driver for Agile Innovation” with the following gem:

… The frantic pace of technology provides its own chaos: before a certain technology reaches maturity and can repay the enormous investments for its development and production, a newer option attracts attention with novelty and fresh promises.

This quote succinctly describes the environment of IT and underlines my own 10+ years of experience. At every point and with almost every decision we have to balance out maturity of incumbent products and promises of new ones.

Ominous hashCode() method

March 5, 2010

I just spent couple of hours debugging a subtle problem only to pinpoint the root cause to an erroneous implementation of hashCode() method. It was a nice refresher in Java basics. Here is the culprit:

  @Override
  public int hashCode() {
    return super.hashCode() + (this.code == null ? 0 : this.code.hashCode());
  }

Any guesses?

CAS – Non Sharable Credentials

February 26, 2010

We have a requirement that a certain type of users cannot use the same credentials to have two or more simultaneous active sessions. I called this feature as “Non Sharable Credentials”. Probably there is a better name for it, but this one will do.

I first posted a question to cas-user mailing list and got a rather encouraging response. Even though CAS doesn’t provide such functionality right out of the box, it seems possible to search ticket registries to find existing ticket for a given principal. Luckily we have JPA-backed registry and at the time I didn’t quite understand why Scott Battaglia cautioned against loading the entire table of tickets. Couldn’t I just craft an appropriate JPA query?

Upon further inspection of database table-backed ticket registries it was quickly discovered that a principal for a ticket doesn’t have a dedicated column. Instead, this information is a small part of a serialized object stored in a BLOB field. I couldn’t query for it directly, so I had no choice but load records into memory, de-serialize the BLOB field and then check for my principal until the match is found. This approach could seriously slow down authentication process and therefore was quickly ruled out.

I really needed an efficient way to search for tickets belonging to a specified principal. I didn’t want to modify CAS code and change structure of database tables for the ticket registries. There is always a new version of CAS and an upgrade should be as easy as possible. Instead, I create another simple table:

CREATE TABLE `principalticket` (
  `ticket_id` varchar(255) NOT NULL,
  `principal` varchar(255) default NULL,
  PRIMARY KEY  (`ticket_id`)
)

The purpose for this table is self-evident. The real question is how to populate it every time a new ticket is issued. CAS is a perfect example of well written code thoroughly utilizing Spring framework. I decided to use Spring AOP and have an aspect that would be run as a ticket gets persisted. A snippet from deployerConfigContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

  <aop:aspectj-autoproxy/>

  <aop:config>
    <aop:aspect id="ticketAddAspect" ref="nscBean">
      <aop:pointcut id="interceptingAddTicket" expression="bean(ticketRegistry) and execution(public * add*(..))"/>
      <aop:around pointcut-ref="interceptingAddTicket" method="addTicket"/>
    </aop:aspect>
  </aop:config>

  <bean id="nscBean" class="com...NSCBean">
    <constructor-arg index="0" ref="entityManagerFactory" />
  </bean>

  ...

I wanted to use the same approach for deleteTicket pointcut on ticketRegistry bean but I kept running into AOP related exceptions when a scheduled quartz job was trying to clean up ticket registries. I was not AOP guru and I had to finish the task in 2 days and I opted for a less glamorous solution of removing records from principalticket table. If I get back to this task and refactor the approach then I will update this post as well.

NSCBean (NonSharableCredentialsBean) is rather simple:

package ...;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import org.aspectj.lang.JoinPoint;
import org.jasig.cas.ticket.TicketGrantingTicket;
import org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint;
import org.springframework.orm.jpa.JpaTemplate;

public class NSCBean {

  private JpaTemplate jpaTemplate;

  public NSCBean(final EntityManagerFactory factory) {
    this.jpaTemplate = new JpaTemplate(factory);
  }

  public void addTicket(JoinPoint point) throws Throwable {
    if (point.getArgs() != null && point.getArgs().length > 0 && point.getArgs()[0] instanceof TicketGrantingTicket) {
      TicketGrantingTicket ticket = (TicketGrantingTicket) point.getArgs()[0];
      if (ticket.getAuthentication() != null && ticket.getAuthentication().getPrincipal() != null) {
        String principal = ticket.getAuthentication().getPrincipal().getId();
        EntityManager em = this.jpaTemplate.getEntityManagerFactory().createEntityManager();
        if (em.createNativeQuery("select * from principalticket where ticket_id = '" + ticket.getId() + "'").getResultList().size() == 0) {
          em.getTransaction().begin();
          em.createNativeQuery("insert into principalticket (ticket_id, principal) values ('" + ticket.getId() + "', '" + principal + "')").executeUpdate();
          em.getTransaction().commit();
        } else {
          // ticket/principal is already recorded
        }
      }
    } 

    if (point instanceof MethodInvocationProceedingJoinPoint) {
        ((MethodInvocationProceedingJoinPoint) p).proceed(p.getArgs());
    } 
  }

}

Records from principalticket table are cleaned up in a rather contentious way. During authentication process, if a ticket doesn’t exist in ticketgrantingticket but exists in principalticket then it gets deleted from the latter. Authentication itself, checking for non sharable credentials and cleaning up the new table is all part of a custom AuthenticationHandler. There is no point providing its code here as it deals with lots of logic particular to my company.

This post explains one way of achieving non-sharable credentials with CAS. At the heart of the approach is a usage of Spring AOP. AOP is usually advocated while dealing with cross-cutting concerns but it also comes very handy when you want to extend functionality of an existent product beyond its predefined extension hooks.

CAS “branded” Authentication Filter

February 15, 2010

Seemingly complex tasks can have surprisingly easy resolutions. All is needed is not trying to make things more complex than they are.

We have two domain names for two distinct categories of customers: http://www.example1.com and http://www.example2.com. These domains point to the very same Web application – Super Widgets 2.0. The application has to redirect new visitors to CAS log-in page. Super Widgets 2.0 provides “service” (or “serverName“, please read on) parameter to CAS so that CAS can redirect users back to Super Widgets 2.0 after a successful authentication. “service” parameter comes from web.xml of Super Widgets 2.0 and it’s a constant value as far as CAS Client is concerned. So the “service” value can either be http://www.example1.com or http://www.example2.com. When it comes to CAS, it knows where to redirect users after the authentication but it doesn’t know the original URL users tried to access (CAS Client doesn’t pass Referer HTTP header).

On CAS log-in page we would have to know the original URL so that we could greet users with either “Welcome to Example 1” or “Welcome to Example 2” messages (can be easily achieved with a simple JSP scriplet).

In the nutshell the solution (suggested by my colleague Alexey Malyshev) is to initialize and call org.jasig.cas.client.authentication.AuthenticationFilter from within our own custom filter. As we initialize Jasig’s AuthenticationFilter we calculate “service” value dynamically based on the value of request.getServerName(). I’m not really sure what design pattern should be selected form the list to describe this approach.

First, we need a custom but simple implementation of FilterConfig:

package com.superwidgets;

...
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;

public class BrandingFilterConfig implements FilterConfig {

  private FilterConfig parent;

  private Map<String, String> params = new HashMap<String, String>();

  public BrandingFilterConfig(FilterConfig parent) {
    this.parent = parent;
  }

  public String getFilterName() {
    return "Super Widgets Branded Filter";
  }

  public ServletContext getServletContext() {
    return this.parent.getServletContext();
  }

  public String getInitParameter(String s) {
    if (this.params.containsKey(s)) {
      return this.params.get(s);
    } else {
      return this.parent.getInitParameter(s);
    }
  }

  public Enumeration getInitParameterNames() {
    return this.parent.getInitParameterNames();
  }

  public void setParam(String key, String value) {
    params.put(key, value);
  }

  public void removeParam(String key) {
    params.remove(key);
  }

}

Second, we need to implement our own Authentication Filter:

package com.superwidgets;

import javax.servlet.Filter;
...

public class AuthenticationFilter implements Filter {

  protected final Log log = LogFactory.getLog(getClass());

  private String serviceMapping;

  private Properties serviceProperties = new Properties();

  private String serverNameMapping;

  private Properties serverNameProperties = new Properties();

  private BrandingFilterConfig filterConfig;

  public String getServiceMapping() {
    return serviceMapping;
  }

  public void setServiceMapping(String serviceMapping) {
    this.serviceMapping = serviceMapping;
  }

  public void init(FilterConfig fc) throws ServletException {
    this.filterConfig = new BrandingFilterConfig(fc);

    // service

    this.serviceMapping = fc.getInitParameter("serviceMapping");
    log.info("serviceMapping = " + this.serviceMapping);

    try {
      if (this.serviceMapping != null) {
        this.serviceProperties.load(new ByteArrayInputStream(this.serviceMapping.getBytes()));
      }
    } catch (Exception ex) {
      log.error("Cannot load serviceMapping property: " + ex.getMessage());
    }

    log.info("serviceProperties = " + this.serviceProperties);

    // serverName

    this.serverNameMapping = fc.getInitParameter("serverNameMapping");
    log.info("serverNameMapping = " + this.serverNameMapping);

    try {
      if (this.serverNameMapping != null) {
        this.serverNameProperties.load(new ByteArrayInputStream(this.serverNameMapping.getBytes()));
      }
    } catch (Exception ex) {
      log.error("Cannot load serverNameMapping property: " + ex.getMessage());
    }

    log.info("serverNameProperties = " + this.serverNameProperties);
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    org.jasig.cas.client.authentication.AuthenticationFilter realFilter = new org.jasig.cas.client.authentication.AuthenticationFilter();

    String hostKey = request.getServerName();
    log.debug("hostKey = " + hostKey);

    if (serviceMapping != null) {
      if (serviceProperties.containsKey(hostKey)) {
        this.filterConfig.setParam("service", serviceProperties.getProperty(hostKey));
      } else {
        this.filterConfig.removeParam("service");
      }
    }

    if (serverNameMapping != null) {
      if (serverNameProperties.containsKey(hostKey)) {
        this.filterConfig.setParam("serverName", serverNameProperties.getProperty(hostKey));
      } else {
        this.filterConfig.removeParam("serverName");
      }
    }

    realFilter.init(this.filterConfig);
    realFilter.doFilter(request, response, chain);
    realFilter.destroy();
  }

  public void destroy() {
    // nothing to do
  }

  public Properties getServiceProperties() {
    return serviceProperties;
  }

  public Properties getServerNameProperties() {
    return serverNameProperties;
  }
}

Now we have to modify web.xml and everything falls into places:

---
<filter>
  <filter-name>CAS Authentication Filter</filter-name>
  <filter-class>com.superwidgets.AuthenticationFilter</filter-class>
  <init-param>
    <param-name>casServerLoginUrl</param-name>
    <param-value>https://cas.superwidgets.com/login</param-value>
  </init-param>
  <init-param>
    <param-name>service</param-name>
    <param-value>http://www.example1.com</param-value>
  </init-param>
  <init-param>
    <!-- new -->
    <param-name>serviceMapping</param-name>
    <param-value>
      www.example2.com=http://www.example2.com
      www.example3.com=http://www.example3.com
      www.example4.com=http://www.example4.com
    </param-value>
  </init-param>
</filter>
---

serviceMapping” is a secret sauce here. The value is loaded in an instance of java.util.Properties class and then it’s used to dynamically calculate “service” value for Jasig’s AuthenticationFilter.

If AuthenticationFilter is using “serverName” parameter instead of “service“, then instead of “serviceMapping” parameter, “serverNameMapping” should be used.

A little summary. AuthenticationFilter has a dynamic behavior based on the original URL a user was trying to access. To achieve this we wrapped Jasig’s filter inside our own filter and we didn’t have to change Jasig’s filter internals in any way. Jasig’s AuthenticationFilter filter is initialized on every request and this has a light and acceptable (for us) performance implication.

New York ITARC 2009, Final Thoughts

October 18, 2009

During the Architect Boot-camp Paul ran through perspectives people have about architects and architecture and one of them was Cult of Personality. The idea is that some people respond on challenges, uncertainties and arguments in a somewhat predictable way: “Grady Booch already figured it out”, “Eric Evans solved that problem already”, etc. After 3 days of lectures, presentations and discussions I think I found an antidote for the Personality Cult.

All you have to do is attend a similar industry event like New Your ITARC. The biggest discovery for me was how individually smart but collectively distant though leaders were. Everybody was paying a due respect for each other but was also quick to note that they disagreed with many points as well.

As a side observer I didn’t think any of the statements of any of thought leaders were particularly wrong. In my opinion it’s all about context. Give me a pattern and anti-pattern and I can turn them upside down by changing the context within which they were applied. The same is with thought leaders. They worked for decades on a certain slice of a huge IT Architecture pie and they were influenced and constrained by a corresponding context. They figured out patterns and anti-patterns but they were not universal. So when I saw, for example, Rogers Sessions disagreeing with Grady Booch, I was witnessing a clash of different opinions stemming from different contexts and nothing more than that.

Next time I develop a Cult of Personality, I only wish it’s going to be within the right context.

Day 1
Day 2
Day 3

New York ITARC 2009, Day 3

October 18, 2009

The third day started with probably the best keynote presentation of the whole conference. Of course I’m talking about Grady Booch and his “Thoughts on Architecture”.

If I had the whole day I would tell you all the things that I don’t understand about architecture. But I have 1 hour only, so I will tell you what I reasonably understand.

I took a picture of almost every slide from this presentation but I probably shouldn’t post them here. Even if the legal aspects don’t prohibit me from doing so, the bare slides wouldn’t make a justice to Grady’s talk. You have to be there to hear how intelligently he weaves the slides together and produces a though-provoking story on architecture. Here are just some notes I found particularly memorable:

  • One of the greatest challenges is to connect Enterprise Architecture to Software Architecture
  • Google is not search but an advertising companies. Interesting to see where they end up.
  • Innovation cannot be outsourced. Grady gave GM a really hard time here, calling their decision to outsource all software development the stupidest thing.
  • Grady was surprised and pleased to see how far UML went but he never intended it to be a programming language (shot at MDD)
  • It was interesting to learn that Grady was a very spiritual person. He is on the board of Iliff School of Theology in Denver.
  • Presence of software intensive systems changes the context in which they run – it offers additional capabilities.
  • Grady disagreed with previous comparison of architecture to a road, made by William H. Inmon on the first day. He said the road was just a tactical decision. Grady then spent some time going through his famous “Architecture is like river” work.

    You cannot move the river. You can only move banks. The river will do what it will do.

    There are many forces in the river ecosystem. Architecture is to balance those forces.

  • The industry has responsibility for legal, ethical and moral aspects of the architecture profession. This is one of the biggest challenges for the future.
  • Third edition of “Documenting Software Architecture” is coming!
  • The reason why we have so many EA frameworks is because we don’t have the right answer yet.
  • The reason why we have fewer number of technical frameworks is because we are closer to the right answer here. Example: 4+1
  • Models should be predictable and elicit questions
  • IRS has an assembly program comprised of 5000 lines they cannot replace. Only one person knew how to run tax rebates promised by government last year. Ouch.
  • Good documentation tip: if you can express it in programming language – don’t put it in UML
  • Google and Facebook also have architectural problems. (but he didn’t elaborate)
  • eBay spends 10% of their budget on refactoring

Grady’s presentation was unique. He has the best grasp of English language I’ve ever heard. Each slide was like a poem: deep and beautiful. There was something profound in every statement he made. He’s a very humble person and his eyes are paragon of sadness. I think they reveal the true love for what he does, acceptance of never ending challenges and a refusal to give up. He is an excellent ambassador for IT architects and it was my sincere privilege to see and hear him speak.

The next session was by Roger Sessions and it was called “Simple Iterative Partitioning”. Behind the cryptic name there was a straightforward message: complexity is the root of all IT troubles and we should relentlessly attack and eliminate complexity.

Roger introduced Glass’s Law and its application for IT. He used it to devise a concept of SCU – Standard Complexity Unit. He then used this combination to calculate a number that gave a certain design a definite numeric value for its complexity. This is an exciting development as far as I’m concerned. As a saying goes: “you can’t manage what you can’t measure”.



Here are some highlights:

  • Grady said we have to have simple systems. But how do we know the system is simple? Grady gave metrics but they are not enough. Sometimes they can only be applied to the system once it’s completely built.

  • Code re-use can sometimes create more complex systems.
  • There is no simplicity, there is a relative absence of complexity just like there is cold, there is an absence of heat.
  • Yesterday Len Bass presented us with six key non-functional architectural requirements, but where is simplicity among those six?
  • By measuring complexity of solutions and using SIP, we can part ways with “decibel based decision making”
  • If you want high availability, you build simplicity, not redundancy

There parting thoughts:

  • Complexity is the enemy
  • It’s simple to make things complex. It’s complex to make things simple, thus the paradox.
  • Only the simple will survive

The conference ended with a thought leaders panel. All the questions but one was asked by Paul Preiss. Here are some most memorable excerpts:

  • Q: what’s in store for architecture in 5 years?
    • Scott Anderson: cloud computing will mean more changes to service companies than to architects themselves
    • Lean Bass: a) we will see a bigger split between state of art and state of practice in the architecture; b) the trend is that we’re casting ourselves as dictators on what should be done
    • Paul: questions of ethics and integrity will move closer toward central stage
    • Angela: a) I would like to see us more as a community; b) architects in large companies will get a seat at stakeholders table
    • Roger Sessions: problem of complexity will be the most critical one
    • Grady Booch: a) software intensive systems will keep increasing in their complexity and we have to counter-balance it by increasing transparency; b) we will still be arguing what architecture means
  • Q: What would our commercial be?
    • Scott: “Architects – we make order out of IT chaos”
    • Paul: “Technology working for you and making you more human”
    • Angela: “First call you make is for architects. Architects – foundation of your business”
    • Roger: “Simplifying world one IT project at a time”
    • Booch: “Join IASA and improve your sex live”. (did I miss something about this conference?)
  • Q: what would you take with you on a deserted island?
    • Grady: “How to build a boat” book

New York ITARC 2009, Day 2

October 18, 2009

Today I had a notepad with me, so be ready for a long read. Additional observations about New York: mountains of garbage bags are along sides of streets ready for collections. I think it’s because there are no back alleys in Manhattan. So much different from Vancouver. I also tried and beat couple of cars by crossing on the red line. I got couple of honor honks. I felt completely assimilated.

The day was opened by Paul Preiss who talked about “Next Generation Activities”. After having gone to Architect Boot-camp, most of Paul’s talk sounded already familiar but there was new information as well. Paul said that he started in the industry as a programmer but he didn’t feel completely at home doing that. He noted that it wasn’t like he didn’t like programming, it just didn’t make sense for him. He didn’t like writing code for the sake of writing code. This sounded familiar to me. Sometimes I felt a void inside me, some dissatisfaction about my role and my contributions. I went on crazy programming spikes, creating solid and sometimes elegant code, and wholeheartedly enjoying the process of discovery and creation. I finished those spikes only to discover the void inside me grew even bigger. The code did solve some problem, but the amount of effort and sophistication was disproportionally big compared to the actual problem being solved. In many cases I was writing code and refactoring it only for the sake of writing code and refactoring.

Paul then went on to deliver one of his, in my opinion, main statements. He argued that we’re the only group that separates us from the rest of the company – “the business”. We’re just IT and we’re here to server “the business”. Finance doesn’t “serve the business”. They do what they are good at and they are part of the business. This caught me by surprise. I was completely content with being a second class citizen to “the business”. That is what was engraved in my head. Well, it’s a good practice to question everything and this was an excellent example.

Paul

This central thought led him to suggest that IASA was to make architecture actionable. He was surprised that there were no solid requirements for entry for profession that impacts so many people and influences budget of billions dollars. He joked that his hair-dresser had to meet more state requirements before they can practice their trade than an IT Architects had. Comparisons with professions in medicine was even more grimmer.

Paul continued and underlined that IASA chapter was not meant to be a user group. The chapter is there to support us and our career growth, give us jobs and make sure they’re paid well. I see where Paul is going and what he want IASA to become. What’s different about IASA that it’s not run by geeks. Paul is a business savvy and a shrew person and he wants to carve out a bigger piece of the corporate pie for IT Architects. He will have lots of challenges and resistance from other groups along the way. But this is where we, as members, here to support and help. He emphasized that he’s practicing architecture only 20% of his time and he’s selling it 80% of his time. This is what chapter leadership also has to expect.

He then shared some numbers, problems and priorities for IASA. The association has more than 8000 members. He acknowledged the IASA web site sucked, they knew about it and kept working. That’s nice to know. About 6 months ago I sent email to Paul to confirm IASA is still alive since the web site didn’t give me any signal of pulse at that time. IASA problems included being to big, underfunded and unfocused. The problem of size would be solved by giving local regions more responsibilities. Focus for the next year was to create filters for bad architects and recognize good ones through education, certification and accreditation.

Paul then introduced various aspects of body of knowledge for architects. He mentioned, among other things, rigorous taxonomy of skills and that the foundational skills for architects was Business Technology Strategy. He cut to the chase by stating that developers were there to write code and architect to get rid of code. Code has to make money. Architects should concentrate on delivering the most value for the least number of lines written. I tend to agree. This could be also a reason why some good coders fail to become good architects. They always stay coders in their hearts and cannot have no code written either by themselves or developers in their companies.

Paul also clarified IASA position that Enterprise Architect is not a specialization but a role. The comparison was with a chief of surgery in hospitals. I had a benefit of learning this statement from Max Poliashenko, digesting it and having agreed with it, but I wonder what Rogers Sessions would say. Paul then outlined four levels of Architect certification. This is the quick summary:

  1. Aspiring architect – knowledge test
  2. Associate architect – experience + knowledge test
  3. Professional architect – experience + board exam
  4. Master architect – thought leaders, speakers, writers and notable contributors

Local chapters would run certification board as local values matter for every profession.

Paul concluded that IASA’s mission statement is to empower the profession and, as an example, added that cloud wasn’t future. Cloud is just another tool. Future are people standing up and speaking for themselves and IASA is there help and facilitate.

I liked Paul’s speech (I can give Toastmaster evaluation as usual, if he interested). I think IASA has a good leadership. Paul possesses the right amount of technical and business knowledge, energy and charisma.

The next key note “Principles of Software Architecture Design” was delivered by Len Bass. Lean is a legend and I personally read couple of books he co-authored. Seeing him and listening him was a great opportunity. He started with outlining types of requirements and noting that requirements are good things. Requirements are constraints and the more we have the less decisions we have to make.

Len then delved into non-functional requirements and ways of their elicitation. He explained differences between categories and taxonomies and suggested to stick with categories. The essence is that in taxonomies, a thing can only fall under one taxonomy element. His example with “denial of service” proved to be a challenge for taxonomies. During denial of service, many non-functional requirements are impacted: availability, performance, security, usability. He offered then a common for for quality attributes:

Len followed with a really deep dive into concepts of ASP – Architecturally Significant Requirements. He started describing ATAH – Architecture Trade-off Analysis Method, utility trees and designing paths. One interesting thought he offered was that in many cases architecture and design testing are thought experiments. So much for xUnit frameworks. At some point I caught myself losing my attention. What was supposed to be a keynote speech turned into highly technical lecture by a university professor. His topic was much better suited for one of the tracks rather than a keynote address.

The day was coming to the end closing keynote speech was presented by Angela Yochem. It was titled “Architecture *is* the business”. This was a logical continuation of Pauls’s message and I liked this connection through a common theme. Paul introduced Angela with humor: “Somebody told me that enterprise architects are like unicorns. Yes, they would be pretty if they existed. But they do exists!”, and he gave her a stage.

Angela started with a message that already had a chance to be absorbed by the audience: we’re just as business as finance, HR, purchasing, legal, etc. We’re all partners. She then compared architects to a really bad salesmen: they annoy people by asking them for couple of hours of undivided attention so that they could learn about our problems and then offer us products and services to solve them. I recognized here myself on a couple of occasions…

Angela threw another observation that caught me by surprise: there was no reasons architects couldn’t apply for funding for some future benefits. She saw it done successfully. Hm… Here is a thought. Now I just have to come up with a value proposition.

For all us, wondering where to start, she suggested creating a functional view of our business or a segment to gain a perspective and to spot inefficiencies.

Angela concluded with a bitter pill. She paraphrased John Zachman: if you cannot describe your value to your company then may be you’re not bringing that much value. I’m definitely bringing value as a developer, designer and occasional operational support but hardly any value as an architect. Well, I honestly have to thank Angela for this perspective.

Brief Q&A session then followed:

Q: what organizational metrics could be used in architecture?
A: develop architecture scorecards. Track delivery of components and enablers by all company units that contribute to enterprise architecture.

Q: how to sell architecture initiatives?
A: Understand the value you deliver. Formulate the value as clear as possible.

Q: One thing you wish you knew looking back (asked by Grady Booch)
A: Waited many years to be noticed as a decision maker. The reason was not taking ownership of problems.

The day ended with a productive Open Space session. I heard about this concept from Java Posse but never participated before. I threw 3 topics in the mix:

1) Documenting software architecture
2) CTO vs. Architect role (since architects own IT strategy)
3) Company’s revenue level to afford dedicated architects

The first topic received a critical mass of votes and was included in the main session. Hedging the bets paid off. When the discussion started, my corner got fewer people than votes – it’s hard to compete with Grady Booch’s topic.

My discussion was interesting but not in the best way – everybody had questions but hardly anyone could offer answers. The group ended up sharing what worked for them and what didn’t – that the main point of Open Space. One person recommended Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives which I should definitely investigate. There was a consultant from Sparx System among us who advocated Enterprise Architect and a certain framework he developed. I also own a copy of this package. Almost everything he was suggesting wasn’t applicable to small and medium companies unfortunately.

For the second round of discussions I joined “Web Frameworks Components” discussions. I pitched in by describing our experience with Open Social API and Shindig in particular and contrasted it with Java Portlet API. Other people described their experiences with Flex, Google Gears, etc. After the session, one gentleman approached me with some questions about Shindig. We had a good conversation and found that we have similar set-ups in our companies. The last discussion I jumped to was revolving around a question of a single IT architect in a company. This situation was common among attendees. It looked like if a company had only one IT Architect, then what they really had was a senior developer and a team lead who happened to be called an architect for whatever reason. Oh, that sounds very familiar. Some people were seriously upset by not being able to escape from the chains of development, testing, deployment, etc. I offered a thought that “pure” IT architects are not needed for all companies. Not all companies have a dedicated lawyer. This is actually why we need a profession and this is why I wanted to discuss “Company’s revenue level to afford dedicated architects” topic. We also agreed that everybody in this position should do what Angela prescribed – articulate our value proposition as architects, and if we cannot – well, keep writing more code pal.

New York ITARC 2009, Day 1

October 18, 2009

I’m a lucky attendant of “IT Architect Regional Conference” held in New York City from October 12-14. I signed up for the conference mainly because of the impressive line-up of speakers, many of which I admire professionally, and I also wanted to learn more about IASA, its president, its mission and other people behind it.

This was my first time being in Manhattan, New York. Some quick observations and impressions: it’s big, it’s insanely busy, seems like half of the traffic are cabs and people always try to cross streets on the red light. Being from Vancouver, the last point feels especially foreign. Oh yes, and on my first day walking to a conference, I saw a celebrity: Elizabeth Hurley.

Elizabeth Hurley

The opening ceremony was started by Timothy Leonard who joined IASA less than an year ago as a president. He explained that he came on board with the sole purpose of adding more clarity to IASA’s mission and to grow the organization. The growth would be quantitative and qualitative. Members would now see the clear benefits of joying the association: body of knowledge, white papers, variety of on-line courses, certification and accreditation. Tim then invited VP of Education to expand on the last two benefits. Certification path IASA is taking is drawing from examples of other, more established, disciplines (medicine, construction architecture, etc) and it looks well thought-out and beneficial for the members and potential employers. Board certification is the most respectful aspect of the whole package. I hope IASA will make it tough (but relevant and fare) and will never back down from it. I have one architecture certification, which I will not name here, that wasn’t a piece of cake to obtain. It took me some time and effort to do an assignment and write two exams. Still, I would be so much more satisfied and proud had a board certification was a part of that process.

Everybody was treated by a keynote speech by John A. Zachman, the famous creator of Zachman Framework. John was a very passionate, animated and authentic speaker. It seemed like he wasn’t given all the time he would love to for his presentation, so he simply flew through his slides using an antiquated overhead projector. It’s amazing how much he managed to deliver though: the history of his studies, parallels between his framework and works of ancient philosophers and knowledge seekers, and conceptual similarities between his schema and periodic table of elements. Seemingly dry topic was sprinkled by his own funny stories which made everybody constantly engaged and the time went really fast.

John Zachman

Next there was an Architect Boot-camp – pretty much the main reason I came here for. The boot-camp was held by Paul Preiss, President and Founder of IASA. Paul is one of those people who “have you at hello”. His energy, passion and love for what he does and what he stands for is second to none. Being a member of Toastmasters club, I cannot help it but to evaluate each in every speaker in my head. Let me tell you that Paul has it all figured out. He did have quite a few “ums” and “ahs” and his body language wasn’t always sharp, but it didn’t matter in this case. He was prepared, he sounded authoritative, knowledgeable and personal. Vocal variety was rich and appropriate and his eye contact made me feel welcomed. OK, enough about Toastmasters stuff.

The main point about Architect Boot-camp is in its content. I was simply blown away. Five years that Paul and his associates spent on making IASA what it is and working on all educational material manifested itself right there and then. I will not reproduce content of his slides here, I just want to point out three things. First, I got my main question answered. I now know the value proposition of IASA and what differentiates it from other IT architecture associations and institutions. In the nutshell, IASA strives to make “IT Architect” a profession in its fullest meaning of the word. This is exciting. I cannot help but feel sometimes as a hobbyist and amateur compared to people from law, medical and traditional engineering fields. This doesn’t have to be this way. Second, the breath and depth of software architecture is staggering and it seems like IASA has all the bases covered. As I continue my studies I will test this assumption, but so far I’m impressed. Third, many things Paul mentioned really resonated with me and I want to be a more integral part of IASA.

The boot-camp was going at a tremendous pace, delivering lots of value, but then Paul had to leave and Cliff Berg stepped up to deliver the next chapter. This is where the fairy tale ended. The reason why this session was so useful and full with insight and knowledge was only in part because of content. The delivery of the content was an essential catalyst. Cliff is a seasoned IT professional and a smart man but he wasn’t ready to lead the boot-camp. I don’t mean any disrespect here, may be there was a miss-communication, lack of time, or any other objective reason. The end result was that we covered only about 20% of what was intended. Paul came back couple of hours later and finished the course as best as he could.

The day ended with another treat for all attendees: thought leadership panel with Angela Yochem, Grady Booch, Eric Evans, John Zachman, Roger Sessions and William H. Inmon. This was absolutely worth it. John predicted a new role of VP of Change in the future of organizations and William compared architecture with a road to his house. If I was making notes, I would have remembered much more… One interesting thing that I noticed is that in more than couple occasions, Grady was shaking his head in disagreement when John was answering questions. I wish the host would have caught it all those times and let Grady offer his side. John was only present at the first day of the conference, so that was the only chance for him and Grady to exchange opinions.

Panel

Looking forward for the day two now!