Wednesday, January 30, 2013

Strategy is Critical to IT Success

Why do we need a Strategy?
Many business and IT initiatives are a long term investments where we have changing markets and trends. These initiatives often take years to develop and require a lot of effort, resources, time and money.
We may have a very effective organisation with all the right processes in place and the right capabilities with all the skills, but all this will be in vain if we do not know where we are going or have a clear direction. 
This is why Strategy is extremely important as it provides Vision and Objectives which give direction for what the organisation is trying to achieve. This allows us to align our IT initiatives with the strategy so that we all develop in the same direction.

Effects of poorly defined strategy
 An organisation which has a poorly defined or communicated strategy may well find that projects or products are going off at tangents, which can lead to fragmentation or disjointed products. Another effect of a poorly defined strategy is that goals in the organisation or projects keep changing, this means that processes and projects need to be consistently re-aligned with the new goals and this can be an expensive. Goals which are changed frequently can also have an effect on the capability of the organisation as personnel become confused as to what the organisation is trying to achieve and ultimately motivation can begin to dip. 
The end result is that deadlines are missed and costs rise as the organisation battles to produce the deliverables which are aligned with frequently changing goals.

From an IT perspective this can also be evident if we see fragmented technologies or architectures within the organisation.

Working with the Strategy

Working with a strategy is difficult as we are often dealing with the long term and there are many unknown factors. An IT Strategy has to fit with other strategic aspects in the organisation, for example the overall strategy or mission of the company.

A good strategy will provide a guiding light and a "Vision" but it will also force us to make choices in order to provide focus.This is a delicate balance since a vague strategy may lack meaning while a rigid strategy will reduce flexibility. A good deal of work is required here to assess if the the strategy is feasible and that we can clearly describe the benefits and risks with the given strategy. While a strategy should be challenging, communicating an unrealistic strategy can result in a loss of faith  and motivation, no-one will want to follow a strategy which appears doomed to fail. So we have to ensure that the strategy is feasible for the organisation.

Assessing the risks associated with the strategy is very important. Since the strategy penetrates the whole organisation, getting it wrong can be costly so a good risk analysis is important. There are a number of risk analysis techniques which can be used such as SWOT analysis to help identify and mitigate risks.

To get a drive behind the strategy it is a good idea to back up the strategy with facts and reasons behind why we want to employ the strategy. Simply pushing out a strategic statement might not be enough to get your organisation actively behind the strategy, and if the organisation does not believe in the strategy it will be difficult to achieve the goals. In this area we might want to show trends in industry or show white papers or reports which support the strategy. We can also try to create an open discussion around the strategy to gain involvement from the organisation, this will make acceptance of the strategy much easier.

Since strategy in it's nature is long term it can be difficult for an organisation to envisage reaching a goal which is perhaps five years in the future. For this purpose it is good to have a reasonable strategic plan which shows milestones (or sub-goals) for the short term which in turn provide a pathway to the strategic goals. This plan is an effective way to communicate and measure progress towards the strategic goals.

In some cases a change of strategy may be pushed upon us due to circumstances we cannot control. This can mean large changes in the organisation such as changing business sectors or even existing technologies. This can have an adverse effect on an organisation where certain skills may no longer be a focus of the new organisation goals. This can lead to turbulence in the organisation as personnel may feel that their skills are are no longer relevant, so it is important to have a plan as to how the strategy is to be launched and communicated to reduce this effect.

Actively using the Strategy

Once the strategy is defined it can be used at all levels of the organisation to guide and provide governance. When working with product management this can help in defining requirements. We may find ourselves debating over which features or technologies to use in a product. If we reflect on the strategy it can help us to decide and prioritise, we can ask ourselves "Do these features or technologies help us reach our strategic goals?". If the answer is "no", we then have to ask ourselves why we want to employ them.

We can use the strategy in our project teams to motivate and guide. A clear idea of how the project fits into the strategy can focus the team, give a greater sense of contribution and increase motivation.

We should also be open to feedback as high levels of activity which is not aligned with the strategy can indicate a flawed strategy or a lack of capability to carry out the strategy.

Conclusion

Having a clear and well communicated strategy is essential for an IT Enterprise. It provides direction and focus for the organisation and provides an foundation for governing the Enterprise. A poorly defined strategy can result in an ad-hoc organisation where projects go off at tangents and this can affect both the motivation of personnel in the organisation and even the marketing of services and products.
The strategy can be used at all levels of the organisation to pull everyone together and strive towards the same goals, providing synergy between leading groups, departments and teams.




Wednesday, January 2, 2013

Tracking Performance in Java with Perf4J

Where are the Bottlenecks?

Performance is a critical aspect of any solution and pretty difficult to measure since we have to account for all the different load scenarios a system might meet in production. There are a good number of performance profiling tools which can help find bottlenecks in development, but what happens when the system is in the test or production environment and you need to check performance? We can't use the profiler in the production environment so we probably have to fall back on good old logging. Even in development and test environment performance logging may be quicker and simpler especially if you know what you are looking for. This is where we might use the Date class and the "getTime()" can solve this problem as shown below.



However this can become messy and difficult to track and re-use in many parts of your code. Therefore we are probably faced with creating a framework of classes to manage this function and to manage logging of the data. This is such a common test requirement in development I thought there must be a framework out there which already does this, but at the same time is simple to use. I was right, there is and it's called Perf4J.

Simple Performance Logging with Perf4J

Perf4J is a framework for performance logging  which comes packaged in a single JAR. It is simple to use and provides support for timing code sections and exporting the result to standard logging tools such as Log4J.
However it doesn't stop there. Perf4J supplies a number of features for helping you analyse the results of your performance logging. Support is provided for generating real-time performance information using an appender in Log4J. There is also support for generating graphs using the Google Chart API.
The advantage of using a standard framework like Perf4J is that we don't need to maintain the code and that it has a much larger user base than a "build your own" solution which means help is available from the community. Perf4J is licensed as open source under the "Apache License Version 2.0".

Logging Execution Times

The logging of execution times is based around using a StopWatch class which allows you to "start" and "stop" a timer for a section of code. The StopWatch can be setup to send this data to the log of of your choice. A nice feature here is that when you start the StopWatch you can give a "tag" which identifies the performance measurement and a "message" which can identify a particular section of the performance measurement. This is really useful if you are taking many measurements and want to organise these measurements so they are easily readable. This allows us to group our performance measurements together making the resulting log much easier to understand.

Below is an example of a simple JUnit test for logging two sections of code. In order for this example to work the "rta.test" logger has been configured in a log4j.xml file.


As can be seen from the code, the StopWatch is set up in the Log4JStopWatch  for compatibility with Log4J. We are then free to log times using our "tags" and "messages". The result of the above code is shown below.


Conclusion

Perf4J is a simple framework for performance logging. It allows you to easily take performance measurements and organise these measurements. If you want more advanced visualisation of the statistics there are features provided for this as well. Using this framework reduces the maintenance associated with "build your own" solution and a broader user base provides better support. In short a nice framework which makes you life a little easier when performance testing.







Sunday, December 9, 2012

Control Change and Projects with JIRA

Why do we need to control change?

Ever been in a software development project where the scope continually creeps, the budget is ever increasing and the time plan is slipping? If this seems familiar you are probably already familiar with the importance of Change Control in software development projects. In projects with weak change control we can see that changes are often accepted into the product by a number of stakeholders, there is often difficulty in tracing decisions taken to include changes and as a result the project can lose direction. Ultimately this is very costly for the project and in extreme cases can lead to the failure of the project, where we end up delivering something which does not meet the requirements. Tracking changes during a software development project is both essential to the success of the project and the long term life of a software product. This is not an easy task, but change control/project management tools can reduce risk and help keep your project on time and budget as well as keeping your product in shape.

Change Control Tools

I have worked with a number of tools for Project and Change Management since 1995. These have ranged from "in-house" developed systems to well established open source and commercial products. Most recently I have worked with Bug Genie and Microsoft's TFS. Around 8 months ago we switched over to JIRA to help us with product planning, project planning, project tracking and change control.
I immediately liked this product. It is easy to use, configurable, and provides advanced features without imposing these complexities on the user if they are not required. In virtually no time we had our project setup, the team members added, we were logging change requests and organising them into product releases. An added benefit is Green Hopper (Agile Tools), which comes as an add-in module. If you are running an Agile or Iterative and Incrementive development model this is a must.

Installing and Getting Started

Installing JIRA is pretty simple. If you are looking to evaluate you can download the installer from the download page and install. The installer gives an option to install with an embedded database so you don't need to bother with setting up a database instance. If you are installing a production instance of JIRA you will want to use a proper database instance. The major database vendors are supported, for simplicity we used MySQL. After installation it was just a case of opening up the web browser and logging in.

Once you are in you can start configure JIRA by setting up users and creating a project. This is done in the  administration console. There are a large amount of configuration options, but these are well organised so it is pretty easy to find what you are looking for.

For example, we can see the User Management console above. Here we can add users and modify their properties. Users can be assigned to different project and have different roles. This provides a good deal of flexibility, you can create a role for end-users and they can report issues directly into JIRA. So once the users and project are setup you are ready to go to work.

Doing the Basics

After logging in with a user account we can start creating tasks, improvements and bugs. Creating and editing issues is intuitive and allows for assigning a good number of useful fields on each issue. These fields help with management  and make issues easy to find.
Another core part of JIRA is the issue search function. This comes in two flavors, the simple search allows you select the most common search fields and give conditions for the search. The advanced search allows you to specify searches using a query language similar to SQL. This is a really nice feature and what is impressive is that there is an intelli-sense feature which suggests the field names you are looking for as you type. The intelli-sense can even suggest the possible values of the field you are searching for. Altogether this gives you a very powerful feature for searches and your searches can be saved and re-used.

Product Management

A JIRA project can be thought of as a collection of issues for a specific Product. A smart feature here is that you can define the planned releases for your Product and even break down your product into components. Issues can later be assigned to releases and components. This is a nice way to manage your product releases since you can assign issues to a specific release, this is very useful in retrospect when you want to know which changes you have made to which release. Releases can be released to production or planned.
On the project dashboard you can also see the Road Map for your releases so you get an idea where you are in the long term development life-cycle. To save time when you are in the process of a release JIRA also offers automatic generation of release notes.

Working with Green Hopper

Green Hopper is a plug-in to JIRA for supporting Agile projects. This is perhaps the absolute best feature of JIRA. Of all the time I spend working with JIRA 80% of it is spent in the Green Hopper. Don't be misled by the term Agile, you can use the Agile tools even if you are working in an "Iterative and Incrementive" Waterfall model. It is pretty easy to use, issues are added to a Backlog,  plan your Sprints (or Iterations) and then you can use a Scrum Board to work with your Sprint. Both Scrum and Kanban are supported.

The Scrum board is very easy on the eye, and clearly represents which issues are not started, which are in progress and which are finished. The interface supports drag and drop so you can simply drag activities between the different columns. Another advantageous feature here is that "swim lanes" are supported. This allows you to clearly separate issues based or a status or a field. I use "swim lanes" to clearly separate "blocked" items. This way I can clearly see problem areas in the project. Each issue is easily editable from this page. You can add comments and manage Spent and Remaining Time. Another area which is important is the tracking project time to make sure you meet your deadline. A "burndown" graph is commonly used in Agile methods to show whether a Sprint is on track for delivery or not. This does rely on the team members regularly reporting "Remaining Time" on their issues but this is a very worthwhile as it clearly shows the team the status of the project. There are other graphs available, for example the issue flow in the Sprint. This helps visualise how the team is working and shows if we are trying to work with too many issues at a time.
Each JIRA project allows you to create a number of "Boards" where you can filter the back log and create Sprints. We can even create parallel Sprints, so if you have a large project and have a number of teams in the same JIRA project, each team can work in their own Sprint.

Other Nice Features

JIRA has a wide range of reports which can be automatically generate on any project. If you are a project manager looking for a quick status on your project these will help reduce your administration and help steer the project. JIRA allows us to create a number of dashboards from a library of "Gadgets". These are generally a collection of graphs, statistics or status summaries regarding the project. This is a great way to remind the team how the project is doing, or even create an overview of a number of projects.

Licences

JIRA has two licencing models, "On Demand" and "Download". The "On Demand" solution is a subscription based model which is hosted on the cloud. So no installation or maintenance is required, just login and use. This model is based on a monthly subscription starting at 10$ per month for 10 users. The "Download" model is a host your own model. Download JIRA, set it up on a server and maintain it in your own organisation. This is a one time licence cost starting at 10$ for 10 users.
It's pretty cheap to get started but the licence cost rises more steeply after 10 users, however I find the pricing reasonable. More information regarding JIRA pricing can be found at http://www.atlassian.com/software/jira/pricing.
*( Prices given above were taken from the JIRA web site 2012-12-09.)

Conclusion

Over the years I have used a number of Change Control and Project Management tools in IT projects. Since starting with JIRA I can honestly say that this is absolutely the best application I have used for Change Control and Project Management in an IT environment. It makes a significant contribution in making information available to the team and makes project planning simpler. It allows the product owner to effectively manage change requests and issues but more importantly allows everyone to gain a real-time status on the project. Problems, showstoppers and blockers are all clear to the team and this means that action can be taken much faster and with the correct priority. The support for Agile methods is really good, it is easy to use and doesn't force you to use all aspects of the Agile model, it can also be used even if you are using an Iterative Waterfall method.
JIRA is reasonably priced and I think if you have a significant requirement for change control and project management it would justify the investment cost. If you consider the amount of time to be saved on reports, administration and team communication the ROI (Return on Investment) can come pretty quick.
In short JIRA gets a big thumbs up from me, and is a product I would recommended for organisations working with software development.

Saturday, November 24, 2012

IASA CITA-P Certification

In 2012 after many years working as a Enterprise/System Architect I wanted to verify my skills via certification. Many of the certification programs were vendor specific and mainly knowledge based. You read the book, do the course and then take the test. However I was looking for a certification which was based on real experience, which was not vendor specific and was recognised globally. I had taken the IPMA Project Management certification which was experience based and found that I not only verified the skills I have, but also allowed for time to reflected on my experience and how I could improve my skills. A really worthwhile certification. After some searching I found the IASA CITA-P Certification which has a similar model to IPMA and is a widely recognised certification for IT Architects.

IASA CITA-P has a three stage process:

  • Application
  • Submission of Assessment Documentation
  • Interview with a Panel

The certification required that self-assessment documentation be supplied which was estimated to take around 80 hours. In actual fact I think it took around 160 hours to write the documentation and compile my references but it was worth it. The certification required a lot of effort and was challenging but at the same time was inspiring, opened new perspectives and provided insight into myself as an Enterprise/System Architect.

Application and Acceptance

In order to be accepted for the certification I had to supply a CV, Assessment Document and attend a telephone interview with IASA to ensure that I had the right level of experience to take the certification. Once my application was accepted I received instructions regarding the Self Assessment documentation.

IASA Proficiency

The proficiency assessment consisted of following pillars which are described in detail in the ITABoK:
  • Business Technology Strategy
  • IT Environment
  • Design Skills
  • Human Dynamic
  • Quality Attributes
  • Software Architecture
This was where a lot of the effort was placed in the certification. Each of these pillars have a number of sub-sections where the candidate describes their experience and knowledge in the given skill areas, this is supported with examples of work from projects the candidate has been active in.

Candidate Experience

The second document to be submitted is the Candidate Experience document and is based on a description of experience from projects. The candidate is required to describe experience in terms of project failures and successes. This was basically a case of selecting actual projects I been involved in, detailing the experiences and what I had learned from these projects.

Interview with Panel

After submission of the documentation I was called to an interview with the panel of assessors. I was required to give a presentation for the panel regarding IT Architecture. After that there were two sessions of question and answer. This was possibly the most nerve racking part of the process as the panel directed a sustained series of questions based on the assessment throughout the interview. After the interview was complete the panel thanked me for my time and then it was just a case of waiting for the result.

Conclusion

Looking back at this certification I can say that it did require a great deal of effort. During the certification I had a chance to reflect on my experience as an architect and perhaps gain another perspective on my skills. Even after the certification process I continue to be inspired and motivated from having received the certification and from being a member of IASA.
I would highly recommend this certification program to any Enterprise/System Architects who are looking for a professional certification. It is a challenging but very rewarding experience.


Friday, November 16, 2012

Internet of Things: A New Integration Age

The Arrival of The Cloud

In the last few years we have been hearing a lot about the The Cloud. Software, Platforms and Servers all delivered nice and easy without having to bother about setting up hardware or perform complex configurations. The difference from a few years ago is that The Cloud is no longer something of the future, it is here and it is growing fast. Companies like Microsoft, Amazon, Red Hat and Oracle are ramping up their Cloud offerings. Wait a minute, wasn't this supposed to be about integration, so why is The Cloud important?

For many years integration platforms have been aimed mainly at big businesses but in the last few years we can see medium size companies joining the movement. Since the arrival of SOA, integration with services has been much easier and less expensive than in the past. This has been a real enabler for integrations platforms because there in now a cost benefit in "integration" as opposed to a "build your own" solution.
Today smaller organisations and even single developers can build services and make them available on the Internet but for small actors there is perhaps the difficulty of purchasing platforms, maintaining and hosting these services. This is where The Cloud comes in. With The Cloud growing in maturity and many of the big stakeholders offering very inexpensive hosting (in some cases free) this allows small and medium actors to publish services which with a guaranteed accessibility. In addition to this we are seeing the appearance of the "Internet of Things" (IoT). This means we can expect a huge amount of devices all connected to The Cloud  and all communicating with each other (see Internet of Things).
All of this means that integration is going to be of huge importance in the coming years.

The Rise of the Enterprise Service Bus (ESB)

Integration Platforms have been around for many years running batch integrations (ETL) and real time integrations (EAI). The difference is that in the past these platforms were pretty heavy stuff, sometimes tough to configure, difficult to deploy and manage, and time consuming to develop. With the projected volume of integration and more focus on EAI we need something which is lightweight, flexible and can deliver a high performance. Some years ago with the popularity of SOA the Enterprise Service Bus (ESB) arrived on this scene as a core component in a SOA architecture. The ESB is the component in our architecture which facilitates Integration by providing routing, mediation, transformation and protocol transparency among other things.
It has taken sometime for acceptance of the ESB but the market for ESBs is now in full swing. The Forrester Wave: Enterprise Service Bus, Q2 2011 report details that in a survey that 32% of the Enterprises surveyed were considering an ESB and 32% were already expanding or upgrading.
While ESBs have been traditionally focused on EAI some of the vendors are even packaging ETL tools with their offerings as a complete Integration package.

Choose your Weapon

The ESB market is hotting up and there is a healthy competition. Which ESB you choose will depend on your specific environment. But here are some of the contenders:


  • MuleESB (MuleSoft)
  • Oracle Service Bus (Oracle)
  • Azure Service Bus (Microsoft)
  • FuseSouce (RedHat)
  • WebSphere Enterprise Service Bus (WESB)
  • Sonic ESB (Progress Software)
  • webMethods ESB Platform (Software AG)
  • ActiveMatrix Service Bus (Tibco)
  • WSO2 ESB (WSO2)

From these products we can see some of the old familiar faces. An interesting development is the arrival of the Azure Service Bus which puts Microsoft firmly in the ESB market but raises questions about the future of BizTalk. Mule ESB is gathering a lot of momentum with a growing collection of connectors and a growing collection of customer cases too. Another interesting move is the purchase of FuseSource by Red Hat. Red Hat have had difficulties in establishing their ESB offering and the recent purchase of FuseSource should certainly strengthen their position.

Conclusion

With new technologies and maturity of The Cloud integration is an important issue on the agenda and the ability to integrate with devices, services and applications will be a critical business factor. We can expect a more competitive ESB market with affordable products for small actors all the way up to big enterprises. It certainly feels like we are entering a new age for integration.

Wednesday, November 14, 2012

Windows 8: Smart OS?

I had my first brief look at Windows 8 during the weekend. Microsofts new offering is certainly different and the idea of using the same OS on your PC, tablet and phone certainly would have it's benefits. First impressions is that Windows 8 has a split personality, trying to accomodate PC users at the same time as phone and tablet user. These devices are different in thier nature and that things don't feel as though they quite fit together yet. It is also a big change to go from a menu and windows based system to a solely Smart Phone/Tablet based system and this can mean a substantial learning curve for many users.
Other operating systems are also following the trend with Fedora 17 sporting a distinctly Smart Phone look and feel, but at the same time combining Window/Menu system.
I think that Windows 8 may benefit from the same approach. As it stands Windows 8 may be too big a step for some users. What may be needed is a compromise where Windows 8 still offers a Windows 7 like mode to allow users to bridge the gap. Possibly even a different variant of the system for server based systems where "user experience" may be less of a concern.
Windows 8 is out on the market and packaged with new PCs, the comming 6 months are going to be interesting. Is this going to be a system broadly for home users or will it be picked up by business users too? What ever happens it is a bold move by Microsoft, only time will tell if it was the right move.

Tuesday, November 13, 2012

NOSQL Databases: The Next Generation?

For decades we have been using a relational model for data storage. However since most modern application logic is modelled on an Object Oriented Model the border between the logic and data storage is a bit of a difficult fit. The use of Entity Frameworks help bridge the gap but we still need the help of a query language like SQL. In the last few years we have seen the rise of NOSQL databases which appear to be reaching another level of maturity, and with . These databases are boasting better performance, better capacity and better scalability than the traditional RDBMS. With Oracle also offering a NOSQL solution are we facing a shift in our approach to data storage?

10 Things You Should Know About NOSQL Databases