<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5891751027872049837</id><updated>2011-07-30T12:19:37.199-07:00</updated><category term='Enteprise Architecture'/><category term='Currently Working On...'/><category term='Software Architecture'/><title type='text'>BW's IT Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bwsitblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bwsitblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>BW</name><uri>http://www.blogger.com/profile/03023482028858398985</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5891751027872049837.post-107302948091248361</id><published>2011-03-28T00:55:00.001-07:00</published><updated>2011-03-28T00:59:11.909-07:00</updated><title type='text'>SOA: Requirements and Architecture</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;In the past 5 years, SOA has made enormous leaps and bounds. Some organizations swear by it, others swear at it. But one thing is for certain... CIO's love it.&lt;br /&gt;Why? Because SOA makes the business feel like they are in control.&lt;br /&gt;&lt;br /&gt;What is less understood, is that  SOA, like its predecessors (COA, OOA and POA), is still Architecture, which puts its application in the hands of technical, and not business people. What SOA does provide is a simplified way of business people and technical people to talk to each other. This talk happens in terms of:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Business Process&lt;/li&gt;&lt;li&gt;Services&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;big&gt;Business Process&lt;/big&gt;&lt;/b&gt;&lt;br /&gt;One of the architects that puts this brilliantly is Brian Petrini. In all his seminars that I attended he made it a point to say that an SOA should always first be described in terms of the "current process" and then later refined to a "better process".&lt;br /&gt;&lt;br /&gt;My own definition of a business process is: "A business process is a set of steps/actions undertaken by one or more business units that has a specific business outcome."&lt;br /&gt;&lt;br /&gt;As such it is my opinion that only a business person can define a business process.&lt;br /&gt;Business tasks are also in the realm of a business person.&lt;br /&gt;In essence: The business process and all the steps/actions that it entails are within the domain of "The Business".&lt;br /&gt;&lt;br /&gt;This brings us to a clean outcome... namely that "The Business is responsible for defining the Business Process".&lt;br /&gt;&lt;br /&gt;In many an occasion I have found that The Business misunderstands this to be "The business is responsible for Automation of the Business Process" just as many times as I have seen technologists believing that "Technology is responsible for defining the Business Process".&lt;br /&gt;To be truthful, both automation and definition of Business Process may influence (but &lt;b&gt;only&lt;/b&gt; influence) each other.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;big&gt;Business Service&lt;/big&gt;&lt;/b&gt;&lt;br /&gt;I define a Business Service as: "A set of repeatable (and related) Business Tasks that are performed by a (single) Business Unit that attribute to a know Business Outcome for which that Business Unit is responsible".&lt;br /&gt;As you see, the description of a Business Service is almost identical to the one of the Business Process with the following&lt;br /&gt;exceptions:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A Business Process is not necessarily performed by a single Business Unit, but may consist of "collaboration between" different Business Units.&lt;/li&gt;&lt;li&gt;A Business Process has a specific Business Outcome, just like a Service, but that outcome is not restricted to be the responsibility of a single Business Unit.&lt;/li&gt;&lt;/ol&gt;In fact, these small differences make it possible for me to assert that a Business Process is a special Business Service that has the whole business as the responsible provider of the service (rather than just a single Business Unit). A Business Process generates overall outcome, whereas a Business Service generates specific outcome.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;The business process defined for an insurance claim, aims to provide the single outcome of a processed claim (which is either paid out or declined).&lt;br /&gt;The business process of a money transfer provides the single outcome of a completed transfer (either credited and then debited or rejected in its simplest form)&lt;br /&gt;&lt;br /&gt;However, many business services may have been involved... For example&lt;br /&gt;The claims process involved a Fraud Check (provided by legal services), a damage report (provided by valuation) etc...&lt;br /&gt;A money transfer process involved a Disposition Check (by Accounts) and a Transfer Route Calculation (by Interbank Transfer) etc...&lt;br /&gt;&lt;br /&gt;As you see, even though each service has a specific outcome, there is no holistic process outcome (no end-to-end result). The process however did have an end result.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;big&gt;So what does Architecture have to do with all this?&lt;/big&gt;&lt;/b&gt;&lt;br /&gt;This brings me back to the "who is responsible for what" question that Business and IT sometimes get entangled in.&lt;br /&gt;Most of the time the Business wants to ship a product fast or change their strategy in an ad-hoc fashion. Being the owners of the Business Process and the Business Services, they want to dictate "HOW" these changes should be made and this is the problem. Changing a Business Process is not the same as changing an automated Business Process. Implementing a Business Process is not the same as implementing an Automated Business Process.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;big&gt;So how is this different?&lt;/big&gt;&lt;/b&gt;&lt;br /&gt;This is different because of Service Level Agreements and Key Performance Objectives&lt;br /&gt;&lt;br /&gt;Both of these points have a Business, as well as a technical impact.&lt;br /&gt;The choice on how to implement a Business Service may have far reaching repercussions on the key architectural markers (Architectural KPI) e.g.:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Availability | The way in which a process is automated may affect availability e.g. during system upgrades or maintenance or when the system is under load.&lt;/li&gt;&lt;li&gt;Performance | The way in which the process is automated may affect performance e.g. when the system is under load or the hardware environment is not up to spec.&lt;/li&gt;&lt;li&gt;Reliability | The way in which the process is automated may work well if all the components/services are in operation, but what happens if one part fails?&lt;/li&gt;&lt;li&gt;Scalability | The way in which the process is automated may not allow the system to scale if its use increases.&lt;/li&gt;&lt;li&gt;Cohesion | The way in which the process is automated may be such that services are tightly coupled, which makes everything fail if only one thing fails.&lt;/li&gt;&lt;li&gt;Complexity | The process or its services may be defined in too complex a way for these to be adjusted or maintained.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;There are many more of these markers that influence the overall outcome, but they all lead to any the following being affected:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Resources | People or Money&lt;/li&gt;&lt;li&gt;Time | Time to Market/Time to Adjust&lt;/li&gt;&lt;/ul&gt;They i.e. affect the main reason for SOA: Management of TCO/TCA.&lt;br /&gt;&lt;br /&gt;Architecture (and to a degree Development and Infrastructure), i.e. Technology Specialists are the ones who (should) understand technology and implications of technology choices. This takes many years of training and experience. Computer Architecture, Database capabilities (indexing and partitioning), network bandwith, compression, search algorithms, caching, queuing mechanisms, webservice complexities etc... etc... are things that Business People do not understand well enough to be able to understand the implications it may have to Architecture markers. It is therefore of vital importance that The Business describes their &lt;b&gt;requirement&lt;/b&gt; (the what) and not the solution (the how), because no matter how simple it may seem... the underlying technology is still technology. We still deal with processors, memory, disk and network... In fact over the years these have become more and more complex (diverse) due to the&lt;br /&gt;introduction of mobile computing, wireless networking, solid state storage devices etc... etc...)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;big&gt;SOA, Requirements and Architecture&lt;/big&gt;&lt;/b&gt;&lt;br /&gt;So, what does this mean for requirements and architecture?&lt;br /&gt;The business should describe:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The information.&lt;/li&gt;&lt;li&gt;Each step of processing the information (i.e. the order).&lt;/li&gt;&lt;li&gt;What happens as part of processing the information (what changes).&lt;/li&gt;&lt;li&gt;Who/what may access the information (and in which way... read, update, remove)?&lt;/li&gt;&lt;li&gt;How long do we expect each step to take?&lt;/li&gt;&lt;li&gt;How long do we expect the process to take?&lt;/li&gt;&lt;li&gt;When should the system be accessible?&lt;/li&gt;&lt;/ul&gt;Technology should describe:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;How the information is stored (information storage... do we use a database?).&lt;/li&gt;&lt;li&gt;How the information is transmitted (information format/exchange... will we use XML?).&lt;/li&gt;&lt;li&gt;How each step will be interconnected (process definition implementation... are we going to use BPEL).&lt;/li&gt;&lt;li&gt;How the information is changed (information processing implementation... will we use a business rules engine? do we use web forms?).&lt;/li&gt;&lt;li&gt;How the system will make sure that the information is accessible according to definition (security... do we use single sign-on?).&lt;/li&gt;&lt;li&gt;How the system will perform (performance... will we use caching? will we use compression?).&lt;/li&gt;&lt;li&gt;How we meet system accessibility (scalability, reliability, availability... do we use HA? do we need failover? disaster recovery?).&lt;/li&gt;&lt;li&gt;How do we make sure that IT professionals can be efficient in changing the system (homogeneity, cohesion, complexity... will we use pointers? how will we name variables? do we deploy on Linux)?.&lt;/li&gt;&lt;/ul&gt;The next 10 years will define how we adequately define the responsibilities of "The Business" and "Technology". SOA has taken us a step ahead. SOA Governance is only the cap of the iceberg. We need to further define what "ownership of technology means"...  After all, how many business people fix their own car after a crash or decide to architect their own highrise? And how many technologists are brave enough to borrow millionsin one place and invest them in another? Like shortcuts in business principle and risk assessment, shortcuts and unsound technology decisions can cost a lot of money (infact it is costing us billions every year). Let those who know what they are talking about do what they have to do.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5891751027872049837-107302948091248361?l=bwsitblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bwsitblog.blogspot.com/feeds/107302948091248361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5891751027872049837&amp;postID=107302948091248361' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/107302948091248361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/107302948091248361'/><link rel='alternate' type='text/html' href='http://bwsitblog.blogspot.com/2011/03/soa-requirements-and-architecture_6183.html' title='SOA: Requirements and Architecture'/><author><name>BW</name><uri>http://www.blogger.com/profile/03023482028858398985</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5891751027872049837.post-6857979878456061530</id><published>2009-11-04T00:27:00.001-08:00</published><updated>2009-11-24T22:15:45.463-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Architecture'/><title type='text'>Service Interfaces</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Lately I have found myself in discussions about "Service Interfaces" again.&lt;br/&gt;Based on these discussions I have found that there is still tension between service providers and consumers about interface size.&lt;br/&gt;Regarding this issue, there are two schools of thought:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;GCD&lt;/li&gt;&lt;li&gt;LCD&lt;/li&gt;&lt;/ul&gt;In the GCD (Greatest Common Denominator) school of thought, the service interface has to encompass every item of business information in its model. The full model is used as a vessel between consumer and provider. All information items on the model are considered optional and each Business Service "picks" the items that are of interest to it.&lt;br/&gt;&lt;br/&gt;The problem with the GCD model is that every service provider and service consumer NEEDS TO BE AWARE of the full business model as a whole, even though they may only use a fraction of the model.&lt;br/&gt;&lt;br/&gt;In the LCD (Least Common Denominator) school of thought, the service interface contains only the items of information REQUIRED to fulfill the service. Each Service has its own vessel of information interchange, that is passed between consumer and provider. The physical interface contract is strict. This facilitates that most of the semantic validation of the interface is enforced syntactically.&lt;br/&gt;&lt;br/&gt;I found that adversaries of the LCD approach fear that soft-semantic changes to the service requires change to the interface.&lt;br/&gt;This statement may not necessarily be correct.&lt;br/&gt;&lt;br/&gt;The key lies in "separation of concerns". To be more precise, the separation of "Service" concern and "Data Management" concern.&lt;br/&gt;Consumers are primarily interested in Services and concerned about "Service Integrity". Providers are traditionally concerned about "Data Integrity". Service Integrity and Data Integrity are not always the same thing, even though they are often heavily influenced by one-another.&lt;br/&gt;&lt;br/&gt;Service Integrity strives for predictable behavior of services.&lt;br/&gt;Data Integrity strives for consistency of information.&lt;br/&gt;A Service provided by a system that has data integrity problems tends to behave unpredictable.&lt;br/&gt;&lt;br/&gt;If the concerns of data management and service integrity are separated in the service interface, the service consumers will be issued with a LCD type interface into a course grained service. Additional information required by the service providers (but not the service consumers) is acquired by the provider through "choreography".&lt;br/&gt;This approach includes the following steps&lt;br/&gt;&lt;ol&gt;&lt;li&gt;The consumer provides the information that it needs to know in order to use the service.&lt;/li&gt;&lt;li&gt;Choreography is used to aggregate the information provided by the consumer with other pieces of information required by the service providers. This could entail the use of ancillary services.&lt;br/&gt;&lt;/li&gt;&lt;li&gt;Providers process the aggregate information.&lt;/li&gt;&lt;li&gt;The service returns ONLY the information that pertains to it.&lt;/li&gt;&lt;/ol&gt;In the Policing domain, updating charge information would not require all the information regarding a Person of Interest including their criminal history etc... Typically a Charge Service would need a Person of Interest artifact and a Charge Artifact. The Person of Interest artifact could consist of only a reference number (integrity concern), name and date of birth (client concern) so that both service and end-user can make an accurate decision of adding a charge. The implementation of the Charge Service itself (rather than the service consumer) could then orchestrate the charge update in such a manner that Case Information, Criminal Activity statistics and such are appropriately maintained (data integrity).&lt;br/&gt;&lt;br/&gt;LCD based interfaces do not necessarily have to be disjunct from a CIM (corporate information model). Items that make up the request can (and should) still use types that are defined in the CIM. This is precisely why a CIM must be carefully crafted.&lt;br/&gt;&lt;br/&gt;The 3-way model for CIM model elements generally serves well.&lt;br/&gt;This 3-way model provides each entity in a CIM to have:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;a "reference representation". The "reference representation" only includes a system based identifier and a human based identifier (where required).&lt;/li&gt;&lt;li&gt;a "full representation". The "full representation" contains every element that makes up the entity with ALL elements that are required for data integrity purposes (from the perspective of the corporate model) set to "required"&lt;/li&gt;&lt;li&gt;a "loose representation". The "loose representation" contains every element that makes up the entity with ONLY the system based identifier set to required.&lt;/li&gt;&lt;/ul&gt;"Reference representations" are generally only used by services that require the indication of dependency with non-service parts of the model. "Loose representations" are used by services that primarily require information for display purpose. "Full representations" are generally only used by the service providers and within the service itself.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=5b48e064-f167-88f3-86ac-3ba00c10b6f6' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5891751027872049837-6857979878456061530?l=bwsitblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bwsitblog.blogspot.com/feeds/6857979878456061530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5891751027872049837&amp;postID=6857979878456061530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/6857979878456061530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/6857979878456061530'/><link rel='alternate' type='text/html' href='http://bwsitblog.blogspot.com/2009/11/service-interfaces.html' title='Service Interfaces'/><author><name>BW</name><uri>http://www.blogger.com/profile/03023482028858398985</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5891751027872049837.post-1103457044693055236</id><published>2009-09-07T00:03:00.001-07:00</published><updated>2009-09-08T00:06:21.237-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Architecture'/><title type='text'>The Stories that make a Service</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I have been a supporter of Agile Software Development for many years now. The simplicity of Agile principles and practices, for me, provide an excellent framework for timely delivery of code.&lt;br/&gt;&lt;br/&gt;Until fairly recently, application of Agile in IT, to me, has only been applicable in the area of Application software development. This is because I used to see Agile’s “Develop only what you need right now… Test first… Refactor to eliminate waste… Release often” to be extremely difficult to apply in an Enterprise context because:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;    It was hard for me as a “techie”, to predict changes to a system of components that underpin a business process.&lt;/li&gt;&lt;li&gt; Building only for “what is needed right now” can be extremely complex, when what one system needs right now, is not necessarily what all the other systems in the complete applications landscape need “right now”&lt;/li&gt;&lt;li&gt;    Refactoring components in a complex system of autonomous, heterogeneous parts has significant risk to the system as a whole&lt;/li&gt;&lt;/ul&gt;There have been other reasons why I was reluctant to apply Agile across the Enterprise, but none matter anymore since I understood the real benefits of SOA.&lt;br/&gt;&lt;br/&gt;Which brings me to the title of this blog “The Stories that make a Service”&lt;br/&gt;&lt;br/&gt;To be truthful, of all the Agile approaches that I have really followed, XP is the only one that I have used in practice fully.&lt;br/&gt;&lt;br/&gt;In XP user requirements are defined as “User Stories”.&lt;br/&gt;&lt;br/&gt;As such “User Stories”, to which I will further refer to as “Stories”, are the building blocks for systems developed using XP.&lt;br/&gt;&lt;br/&gt;For the purpose of this exercise, it is important to understand that I see an information system as a giant ensemble of Consumers and Producers of Information.&lt;br/&gt;&lt;br/&gt;What brings Consumers and Producers together in an SOA are: Services.&lt;br/&gt;&lt;br/&gt;A Service delivers the information required by Consumers from information provided by Producers.&lt;br/&gt;&lt;br/&gt;Often, in order to be able to provide the information “as required” by the consumers, the information provided by the Producers needs to be “massaged” (which can mean… aggregated, transformed, or processed into derivations). It is for this reason that in an SOA, the Consumers do not obtain information from the Producers directly, but from Providers instead.&lt;br/&gt;&lt;br/&gt;With this breakdown in Consumers, Providers and Producers, applying XP (and I believe most other Agile methodologies) has become easy.&lt;br/&gt;&lt;br/&gt;This article explains why.&lt;br/&gt;&lt;br/&gt;In order to understand how Stories, through the Consumer-Provider-Producer paradigm, suddenly become applicable across the Enterprise, it is important to generally make these acronyms more concrete.&lt;br/&gt;&lt;br/&gt;An Application (i.e. a piece of software that a user interacts with) is generally seen as a consumer. There are other types of consumers, but Applications are easy to understand.&lt;br/&gt;&lt;br/&gt;A Data Source (or Repository) is generally seen as a producer. Please note that I see a Data Source to be anything that provides data (a file, a database, a business rules engine...).&lt;br/&gt;&lt;br/&gt;Services are in an SOA deemed the Providers. Services provide their Consumers with the ability to manage (create, retrieve, update and delete) information that is maintained by Data Sources.&lt;br/&gt;&lt;br/&gt;Just as functionality within an Application can be described by its users using Stories, Services can be described by business representatives using Stories.&lt;br/&gt;&lt;br/&gt;Instead of each Story describing part of the process of using an Application, in the SOA a Story will mainly describe a part of the Business Process within the Enterprise.&lt;br/&gt;&lt;br/&gt;Because, in using SOA there is no translation required from Business Requirements to IT Components, each (technically) delivering part of the Business Process, but rather, the Business Process is defined as a ensemble of Services, the Story paradigm can effectively be put to work.&lt;br/&gt;&lt;br/&gt;The principle being: “The Business, understands their Business Process best and is therefore the most capable of describing the Business Process in terms of Business Tasks and group these Business Tasks together in a way that they make business sense in terms of the business process”.&lt;br/&gt;&lt;br/&gt;If a Story represents the afore mentioned grouping of Tasks, each story then represents a Service.&lt;br/&gt;&lt;br/&gt;The beauty of it is that:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;    Consumers (mostly applications) can be defined in Stories&lt;/li&gt;&lt;li&gt;    Providers (services) can be defined in Stories&lt;/li&gt;&lt;li&gt;    Producers (almost always within the “techie” domain) can be defined in Stories&lt;/li&gt;&lt;/ul&gt;Stories can be estimated, a Velocity can be determined and in every case, there is traceability from both Business and Technical perspective, thereby solving the problems mentioned at the beginning of this article so that:&lt;br/&gt;&lt;ul&gt;&lt;li&gt;It is no longer hard for me as a “techie” to predict changes to a system of components that underpin a business process, because these components (i.e. Services) already represent groupings of Business Tasks that make up the Services that again make up the Business Process.&lt;/li&gt;&lt;li&gt;Building only for “what is needed right now” is no longer complex, when what one system needs right now, because these systems are built on Services that underpin the Business Process for the complete applications landscape as it is “right now”&lt;/li&gt;&lt;li&gt;Refactoring components, now defined and interfaced as Services in an environment that is built on these Services is now isolated on a per Service basis and will predictably affect the entire process (and therefore predictably affect each Application that “participates” in that process).&lt;/li&gt;&lt;/ul&gt;Of course it should be understood that SOA is not a magic bullet for Agile to work. SOA still requires solid Governance practices to ensure that changes in Business Process, Supporting Applications, Services, Data Sources and Infrastructure continue to be able to meet the Business' competitive needs.&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=47df9f86-3d2e-816b-8f32-4ea00fb3dd88' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5891751027872049837-1103457044693055236?l=bwsitblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bwsitblog.blogspot.com/feeds/1103457044693055236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5891751027872049837&amp;postID=1103457044693055236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/1103457044693055236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/1103457044693055236'/><link rel='alternate' type='text/html' href='http://bwsitblog.blogspot.com/2009/09/stories-that-make-service.html' title='The Stories that make a Service'/><author><name>BW</name><uri>http://www.blogger.com/profile/03023482028858398985</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5891751027872049837.post-7354526192513594985</id><published>2008-11-27T14:57:00.001-08:00</published><updated>2008-11-27T15:40:06.898-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enteprise Architecture'/><title type='text'>Enterprise Architecture?</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Now the reason why there is a question mark at the end, is not because I don't think Enterprise Architecture is not a worthy field in the IT landscape. The reason I am writing this article is to "vent my spleen" on the way that organizations "apply" Enterprise Architecture (or at least what they advocate as Enterprise Architecture). And, yes I know there is a maturity model, but I do expect that as soon as organizations start introducing an EA, they will steadily climb up the ladder of EA maturity.&lt;br/&gt;&lt;br/&gt;Now I'm not sure that it is the "resistance of the organization" or the "incompetence of enterprise architects", both or just due to the fact that "EA is too hard to apply" in most organizations. I can't judge the truth of this matter, because I am not an Enterprise Architect (although it is my ambition to once fill that role), nor did the management of the organizations that I have worked in to date explained their "EA goals" to me (or my fellow "staff").&lt;br/&gt;&lt;br/&gt;What I have found organizations call EA, is generally a whole lot of "Hot Air" and "No Substance".&lt;br/&gt;Expressions such as:&lt;br/&gt;- We are aligning IT to the Business&lt;br/&gt;- We are establishing governance&lt;br/&gt;- We are trying to get high ROI&lt;br/&gt;do NOT convince me that there is an EA.&lt;br/&gt;&lt;br/&gt;Usually, when I ask for at least an outline or a high level excerpt of the EA, I am told, that this cannot be dissiminated due to "high confidentiality". This really makes me wonder how an organization can achieve their "strategic IT direction" without disclosing to the people who will make it happen, what that direction IS. Frankly, it is like the captain NOT giving the crue any idea where they are going, but expect them to brief the passengers on this very same topic.&lt;br/&gt;"Ladies and Gentlemen, this is your purser speaking... We welcome you to our flight to... well, don't know that yet, but the captain knows..."&lt;br/&gt;&lt;br/&gt;I believe that if the strategic IT direction contains Business Secrets, than it cannot be the IT direction... frankly, it cannot even be a Business Direction.&lt;br/&gt;&lt;br/&gt;Funnily enough, many (unfortunately not all) organizations that I have worked in, thoroughly cover the Strategic Business Direction. This makes me wonder even more how it becomes impossible to even outline a high level Strategic IT Direction as general IT Strategic Goals and Guidelines to achieve the Strategic Business Direction that is well known.&lt;br/&gt;&lt;br/&gt;I have even seen an organization, where on my question where the Enterprise Architecture was documented so that I could make my Solution in line with it, the Enterprise Architect (yes you have read it correctly, not an IT Manager or a Project Manager or some other Manager, but the Enterprise Architect) handed me a tabulized list (a 1 pager) with technologies that were approved.&lt;br/&gt;&lt;br/&gt;Now... how scary is that?&lt;br/&gt;&lt;br/&gt;To this end, as an Application Architect, I am writing this blog, backed by my understanding of what an Enterprise Architecture should entail, so that the professionals that need to REALIZE the EA, know exactly how to define, build and implement their solutions.&lt;br/&gt;&lt;br/&gt;1. A Mission Statement&lt;br/&gt;An Enterprise Architecture MUST have a mission statement. This is a very short excerpt that summarizes the Strategic Business Direction, and outlines which type of IT solutions will be key to achieving this direction&lt;br/&gt;&lt;br/&gt;2. An Architecture Landscape&lt;br/&gt;A Graphical representation of all the high level IT components (i.e. applications running in networks on hardware) and their inter-relationships that make up the IT infrastructure. This graphical representation should be accompanied by a tabular data-dictionary that map each system to a set of Strategic Business Goals and highlight the level of importance in achieving the related goal&lt;br/&gt;&lt;br/&gt;3. A "Gap Analysis"&lt;br/&gt;An analisys of which Strategic Business Goals supporting components have been fully realized by IT, which ones have been partially realized, and which ones are yet to be realized.&lt;br/&gt;&lt;br/&gt;4. A "Grand Plan"&lt;br/&gt;That outlines which existing components will be reused, which components will need to be obtained (purchased or built) in order to achieve maximum capitalization on the Strategic Business Direction with the highest level of ROI possible in an agile way so that it can suit the "ever changing needs of the business".&lt;br/&gt;&lt;br/&gt;5 A "Technology Plan"&lt;br/&gt;A list of technologies that will be used within the organization in order to achieve the "Grand Plan", as well as a process for deprecation of existing technology and introduction of new technology (be it either hardware or software)&lt;br/&gt;&lt;br/&gt;6 A "Tracability Matrix"&lt;br/&gt;This would be a glorified checklist that identifies the Strategic Business Goals in association with the Strategic IT direction and how progress to meet these Strategic directives can be measured.&lt;br/&gt;&lt;br/&gt;It is important that from a "high level", ALL IT STAFF, ALL MIDDLE and SENIOR MANAGEMENT and KEY BUSINESS STAKEHOLDERS are aware of the Enterprise Architecture.&lt;br/&gt;&lt;br/&gt;I also believe that the road to a mature EA starts with:&lt;br/&gt;- Understanding Strategic Business Needs&lt;br/&gt;- Creating Strategic IT Awareness&lt;br/&gt;&lt;br/&gt;Well, those were my 2 cents worth...&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5891751027872049837-7354526192513594985?l=bwsitblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bwsitblog.blogspot.com/feeds/7354526192513594985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5891751027872049837&amp;postID=7354526192513594985' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/7354526192513594985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/7354526192513594985'/><link rel='alternate' type='text/html' href='http://bwsitblog.blogspot.com/2008/11/enterprise-architecture.html' title='Enterprise Architecture?'/><author><name>BW</name><uri>http://www.blogger.com/profile/03023482028858398985</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5891751027872049837.post-6019797704172914519</id><published>2008-05-28T19:00:00.001-07:00</published><updated>2008-05-28T19:03:50.070-07:00</updated><title type='text'>Code Reviews</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Thought it would be good to include this article from my other blog (&lt;a href='http://iblog.net.au/brian/' target='_blank'&gt;Brian Welch's TechBlog&lt;/a&gt;). Njoy!!!&lt;br/&gt;&lt;br/&gt;A while back, my organization introduced code reviews...&lt;br/&gt;I wanted to take the opportunity today to provide you with a snippet of the particular points of note while reviewing code (and why this is useful). The snippet is part of an e-mail I sent out to my fellow team members when we were initially establishing our code review process (in 2005). These principles still apply when reviewing code... so here goes:&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Code Reviews&lt;/b&gt;&lt;br/&gt;Code reviews are put in place to as a last quality check of the code before it goes into the released system.&lt;br/&gt;Quality of code means:&lt;ul&gt;&lt;li&gt;Is the code in line with the detailed design and the existing architecture?&lt;/li&gt;&lt;li&gt;Does the code adhere to the coding standards provided?&lt;/li&gt;&lt;li&gt;Is the code self explanitory (naming and structuring are key here)?&lt;/li&gt;&lt;li&gt;Does the code attempt to solve problems that were solved elsewhere (i.e. were design patterns applied to solve common problems)?&lt;/li&gt;&lt;li&gt;Does the code attempt to solve problems in a way that is known to cause other issues (i.e. were anti-patterns avoided)?&lt;/li&gt;&lt;li&gt;Where the naming is not sufficient to describe the code, is proper API documentation provided?&lt;/li&gt;&lt;li&gt;Are useless comments cluttering the code? (e.g. rewording of a something that is already explained by a name)&lt;/li&gt;&lt;li&gt;Are the corner cases in the code well guarded (Exception handling)&lt;/li&gt;&lt;li&gt;Do the unit tests test the main functionality provided by the developed unit?&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;&lt;b&gt;Is the code in line with the detailed design and the existing architecture?&lt;/b&gt;&lt;br/&gt;Generally, developed software applications are existing production systems that are in line with an existing architecture and technical design. These systems are supported by a production support team, that needs to be able to quickly respond to defects in systems, as well as develop enhancements requested by the business stakeholders. Changes to the architecture or technical design, slow the production support developers down in providing these changes timely, as there is a learning curve involved and the production support team is generally on a very tight (forthnightly) release schedule. Any change to the architecture or to the technical design of these systems must be approved by the Application Architect (in collaboration with the senior developers in your team).&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Does the code adhere to the coding standards provided?&lt;/b&gt;&lt;br/&gt;Coding standards may at time seem limiting in coding freedom, or may (when first adopting) slow a developer down a bit. Mostly, the reason not to have coding standards is: "It's too hard to think about trivialities such as formatting, naming and API documentation... "The logic is more important". Sadly, this is not really true... having consistently formatted code makes reading the code easier for everyone (not just the person who did the coding, but also for persons having to maintain the code afterwards). Most of the formatting can be done by IDE templates or special programs (e.g. XML-tidy or Checkstyle). However, the discipline comes into the picture when checking the code back into the source repository. Consistently styled code also makes differencing CVS and local code easier (much easier).&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Is the code self explanitory (naming and structuring are key here)?&lt;/b&gt;&lt;br/&gt;Code styling is part of a coding standard, but there are less automatable constructs that should also be part of a coding standard. Naming is a very important one... Code reviews should ensure that proper care is taken that classes, objects, methods, parameters etc... are named clearly (no exceptions). Reading code should be like reading the instructions in a cookbook.&lt;br/&gt;1 e&lt;br/&gt;1/2 on&lt;br/&gt;1 clv glk&lt;br/&gt;1 tsp btr&lt;br/&gt;chp the glk and on, then bt together with the e&lt;br/&gt;fry the btr in a pan, then add mxt,.Fry for 10s on both sds.&lt;br/&gt;&lt;br/&gt;is a lot less clear than&lt;br/&gt;&lt;br/&gt;1 egg&lt;br/&gt;1/2 onion&lt;br/&gt;1 clove of garlic&lt;br/&gt;1 teaspoon of butter&lt;br/&gt;&lt;br/&gt;Chop the garlic and onion, the beat them together with the egg&lt;br/&gt;Fry the butter in a pan, then add the mixture. Fry for 10 seconds on both sides&lt;br/&gt;&lt;br/&gt;The same goes for code... Care should be taken to keep the abbreviations to the minimum (except when these are business acronyms). And most of all, this should be enforced by the conding standard and policed through a review.&lt;br/&gt;&lt;br/&gt;Strucururing of the code is almost as important. The key to this is that generally code becomes alot less readable when the logical collection of "actions" becomes greater. I.e. the more lines of code to read, the harder to focus on what the code actually does. As a rule of thumb, I use the "15 lines per method" rule. If a piece of code is more than 15 lines long, there is a 95% chance that the method that contains the code is doing more than it hints (through its name) it is doing, which means that there probably is a good chance that the code should split into more cohesive units (methods, sometimes classes etc... depending on the granularity). When this practise is kept (and only in combination with proper naming), the code becomes alot more clear. Of course it is hard to set a clear rule about this in a coding standard... and this becomes a suggestion to be enforced where appropriate... The code review is there to ensure that the code is broken up into "cohesive units" where appropriate&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Patterns and Anti-Patterns&lt;/b&gt;&lt;br/&gt;When reviewing code, care should also be taken that the code does not attempt to solve problems that were solved elsewhere. What this means is that if a common problem is solved with different code, where a "simpler/clearer" existing solution could be applicable. Existing could mean elsewhere in the system, or maybe a "well known solution" published in literature (e.g. Design Patterns, by Gamma et al, or Patterns of Enterprise Architecture, by Fowler). Of course this adds the responsibility of maintaining a "catalog" of well known, properly documented solutions for problems (patterns), from which developers could obtain these patterns. The reviewer of code should also make sure that if problems are solved in code that are solved elsewhere (and known to work there), the code is augmented/refactored to apply the pattern. Please note that this is not the same as reviewing the design as a whole... it is only a review of a self-contained piece of code that solves a problem that is solved (and documented) elsewhere. I.e. the reviewer is expected to point out where patterens could be applied. Recurring patterns make it easy for code maintainers to read the code.&lt;br/&gt;It is just as important for a reviewer to spot code that solves a problem in a manner "known to have caused other issues in the past", and recommend that these anti-patterns be refactored to a safer solution (usually a pattern). There is alot of literature documenting anti-patterns (including Manning Publication's Bitter...,  series). However, there are undoubtedly cases where anti-patterns are in-house application or framework specific. These anti-patterns should also be documented in a "catalog".&lt;br/&gt;As a side note... code reviews could be a very good start to documenting in-house patterns and anti-patterns, because in the beginning, these will be identified by team members that have more knowledge of the code base (i.e. problems that were solved in the past, both patterns and anti-patterns). For the "younger" developers, they provide an opportunity to "highlight" areas in existing code that were refactored (or could be refactored) to "well known" patterns that are applied in the industry.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Providing useful API documentation and code comments&lt;/b&gt;&lt;br/&gt;Another area of code review should be the providion of API documentation. API documentation is important in 3 ways:&lt;br/&gt;- To provide the developer a "high level" overview of which fine grained components (classes and interfaces) are there and how they should be applied&lt;br/&gt;- To provide the developer with corner conditions in which these fine grained components are guaranteed to work/not to work, where naming alone is not sufficient.&lt;br/&gt;- To provide the developer with a brief overview of what each fine grained component's function is from a business point of view.&lt;br/&gt;The reviewer of the code should make sure that where appropriate this documentation is provided.&lt;br/&gt;The reviewer should also police that documentation and code comments are not used "in vain". In-vain documentation/comments are used for instance rewording variable names or function names.&lt;br/&gt;EG&lt;br/&gt;&lt;br/&gt;/&lt;font face='Courier New'&gt;**&lt;br/&gt; * this method displays the premium&lt;br/&gt; */&lt;br/&gt;public void displayPremium()&lt;br/&gt;&lt;/font&gt;&lt;br/&gt;The comment used here is clearly useless, since the name of the method already explains what the code does&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;font face='Courier New'&gt;/**&lt;br/&gt; * Only displays the premium if the associated&lt;br/&gt; * risk is not declined, otherwise 0 is displayed&lt;br/&gt; */&lt;br/&gt;public void displayPremium()&lt;br/&gt;&lt;/font&gt;&lt;br/&gt;In the case above, comments are used to augment non-obvious functionality, namely that the premium is only displayed if the risk is not declined... this cannot be ascertained from the method name.&lt;br/&gt;&lt;br/&gt;The reviewer should also make sure that proper methods are used instead of comments over statements&lt;br/&gt;E.G.&lt;br/&gt;&lt;br/&gt;&lt;font face='Courier New'&gt;...&lt;br/&gt;// if disabled just show the value, no dropdown &amp;amp;lt;-- comment over statement&lt;br/&gt;if (getDisabled() &amp;amp;&amp;amp;amp;amp; parent != null) {&lt;br/&gt;  String displayValue = (String) RequestUtils.lookup(&lt;br/&gt;    pageContext, name, property, null);&lt;br/&gt;&lt;br/&gt;  if(!GenericValidator.isBlankOrNull(this.codeTranslator)) {&lt;br/&gt;    CodeTranslator translator = (CodeTranslator) RequestUtils.lookup(&lt;br/&gt;      pageContext, this.codeTranslator, null);&lt;br/&gt;    displayValue = translator.translate(displayValue);&lt;br/&gt;  }&lt;br/&gt;&lt;br/&gt;  if(displayValue == null) {&lt;br/&gt;    displayValue = "";&lt;br/&gt;  }&lt;br/&gt;&lt;br/&gt;  ResponseUtils.write(pageContext, ResponseUtils.filter(displayValue));&lt;br/&gt;  return SKIP_BODY;&lt;br/&gt;}&lt;br/&gt;...&lt;br/&gt;&lt;/font&gt;&lt;br/&gt;could be refactored into a new method&lt;br/&gt;&lt;br/&gt;&lt;font face='Courier New'&gt;private void showValueOnly() {&lt;br/&gt;  String displayValue = (String) RequestUtils.lookup(&lt;br/&gt;    pageContext, name, property, null);&lt;br/&gt;&lt;br/&gt;  if(!GenericValidator.isBlankOrNull(this.codeTranslator)) {&lt;br/&gt;    CodeTranslator translator = (CodeTranslator) RequestUtils.lookup(pageContext,&lt;br/&gt;      this.codeTranslator, null);&lt;br/&gt;    displayValue = translator.translate(displayValue);&lt;br/&gt;  }&lt;br/&gt;&lt;br/&gt;  if(displayValue == null) {&lt;br/&gt;    displayValue = "";&lt;br/&gt;  }&lt;br/&gt;&lt;br/&gt;  ResponseUtils.write(pageContext, ResponseUtils.filter(displayValue));&lt;br/&gt;}&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;this method could then be called without the need for the comment like so:&lt;br/&gt;&lt;br/&gt;&lt;font face='Courier New'&gt;if (getDisabled() &amp;amp;&amp;amp;amp;amp; parent != null) {&lt;br/&gt;  showValueOnly();&lt;br/&gt;  return SKIP_BODY;&lt;br/&gt;}&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;Note that the simplicity of this construct already tells the story, there is no comment needed&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;Are the corner cases in the code well guarded (Exception handling)&lt;br/&gt;What the revierw should also look for, are corner cases. Corner cases are cases in the code where method calls or variable assignments are not guaranteed to change the affected component(s) into a stable (well known) state. There are 2 ways to guard for this in the code:&lt;br/&gt;&lt;ol&gt;&lt;li&gt;Assertions (i.e. exceptions)&lt;/li&gt;&lt;li&gt;Pre- and postconditions&lt;/li&gt;&lt;/ol&gt;&lt;br/&gt;With assertions, the code itsself checks that the parameters passed are guaranteed to bring the code into a valid state and once the affected component's state is changed assure that the state is valid. When the state is not the expected state an exception is thrown (application if at the application level or system when at the system level).&lt;br/&gt;Pre- and postconditions do exactly the same, but at documentation (rather than implementation level). This can usually be done in the API documentation&lt;br/&gt;When reviewing the code, the reviewer must see to it (to a reasonable degree) that the corner cases are covered in either of these was. The reviewer must also see to it that either method is used where most appropriate (within reasonable bounds). I agree that this is a grey area, but at least this should be discussed in the code review. The reviewer should also make sure that when assertions are used, the appropriate level exceptions are thrown. And in cases where code is called that throws exceptions they are properly handled (which includes forwarding). The reviewer must also insure that pre- and postconditions are observed (either handled or documented when ignored) by code that uses pre-/postconditioned functionality.&lt;br/&gt;&lt;br/&gt;&lt;b&gt;Do the unit tests test the main functionality provided by the developed unit?&lt;/b&gt;&lt;br/&gt;Automated unit tests should test the functionality of a fine grained component. The reviewer should at least make sure that there are unit tests written for the changed or introduced components. At a more detailed level, the reviewer could also review the "isolation" of tests to make sure that tests do not rely on infrastructure, but are contained to test the unit (this speeds up the unit testing and also makes tests more reliable, since they do not rely on other code, that may or may not be working within specifications).&lt;br/&gt;The reviewer will also need to verify (using the unit test logs), that the tests all pass AND have the appropriate coverage of the component tested.&lt;br/&gt;&lt;br/&gt;Well, that was it for today.&lt;br/&gt;Oh yes, and... we've finally managed to complete the "homegrown framework" change today... As was to be expected, we ran into pop-up after pop-up... but it's working... Would that we could have done it with Spring. Thank goodness the next few deliverables don't require "framework changes"&lt;br/&gt;&lt;br/&gt;TTFN&lt;br/&gt;(that is: Ta... Ta... For Now...)&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5891751027872049837-6019797704172914519?l=bwsitblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bwsitblog.blogspot.com/feeds/6019797704172914519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5891751027872049837&amp;postID=6019797704172914519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/6019797704172914519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/6019797704172914519'/><link rel='alternate' type='text/html' href='http://bwsitblog.blogspot.com/2008/05/code-reviews.html' title='Code Reviews'/><author><name>BW</name><uri>http://www.blogger.com/profile/03023482028858398985</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5891751027872049837.post-529313472662974394</id><published>2008-05-24T19:15:00.001-07:00</published><updated>2008-05-24T23:28:36.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Currently Working On...'/><category scheme='http://www.blogger.com/atom/ns#' term='Software Architecture'/><title type='text'>Thought for Today</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Today, after about a whole day of restructuring our automated build, I am getting back to doing architecture.&lt;br /&gt;I find it a bit hard to get back into it... it takes a while to re-focus from the practical, back to the theoretical, but at the same time it is good to just be able to not write documents the whole day long.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Automated Build &amp;amp;amp; Deployment&lt;/b&gt;&lt;br /&gt;I must say that I am quite pleased with the restructure of the automated build.&lt;br /&gt;The tool:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Builds&lt;/li&gt;&lt;li&gt;Runs Unit Tests and Checkstyles and generates JUnit and Checkstyle Reports&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Instruments Classes and generates a Coverage Report&lt;/li&gt;&lt;/ol&gt;It is the first time in my organisation that we've got this level of build automation, which is quite exciting for me.&lt;br /&gt;&lt;br /&gt;We have also introduced and automated deployment process, by which we can identify which version of which application will be deployed to the Development Integration Environment and then move through the higher environments (test through to production) in a controlled manner.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Architecture&lt;br /&gt;&lt;/b&gt;Well then, now back to Architecture.&lt;br /&gt;&lt;br /&gt;For this specific part of the project, most of the architecture is "Hardware and Network Architecture", my least favorite view in the architecture. However, it must be done... I am also looking at the "Security View", since more than half of securing the System involve securing the Networked System.&lt;br /&gt;&lt;br /&gt;Most of my focus is currently set to the definition of a "High Avialability" environment for our systems to run in.&lt;br /&gt;I have been working on this part of the architecture (off and on) for about 2 weeks and I am almost ready for a first draft release to our "Infrastructure Services Group" and our "Security Services Group". With their feedback I will finally be able to finalize these two views and move on to the more exciting part "Application Architecture"&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5891751027872049837-529313472662974394?l=bwsitblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bwsitblog.blogspot.com/feeds/529313472662974394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5891751027872049837&amp;postID=529313472662974394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/529313472662974394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5891751027872049837/posts/default/529313472662974394'/><link rel='alternate' type='text/html' href='http://bwsitblog.blogspot.com/2008/05/thought-for-today.html' title='Thought for Today'/><author><name>BW</name><uri>http://www.blogger.com/profile/03023482028858398985</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
