#Google Analytic Tracker

Pages

May 26, 2010

Who are the Business Analysts (Part 2/3)

In the conference, there are quite a number of presentations I could choose to go. Here were the ones that I attended:

  1. Collecting, Connecting and Correcting the Dots – Roger Burlton, BPTrends
  2. From Tactical to Strategic: A Business Analysts Path to Leadership – Kathleen Barret, IIBA
  3. Experience Agile: The Lego Game – Kim Szuta & Chris Lavallee, ThoughtWorks Canada
  4. That’s what I said but not what I meant or … Getting the Language right, right from the start – Gale Anshelm, Sierra Systems
  5. Panel – Metrics – What and how do you meansure a BA’s work? How do you know what makes a good BA?
    Moderator: Aman Sidhu, Cenovus Energy,
    Panellists: Marlene Barker, MLB2 Enterprise Ltd
    Andrea Borle, CGI
    Murray Laatsch, Enerplus
  6. Agile Requirements: Critical Success Factors for Acceptance Test Driven Development – Jennitta Andrea, The Andrea Group, Inc.
  7. Requirements Gathering for Business Intelligence and Data Warehousing Projects - Francisco Rios Gascon, RIOSOFT LTD

By all means all these topic are interesting. However, I find that materials presented were general a guideline instead of a “How to”, or “Best Practice”. That is probably the biggest different when compare a technical seminar with a non-technical seminar. Every businesses deal with their own problems. There is no single recipe that would solve the business problems. As a result, a guideline would be more appropriate.  

How to Measure a BA Success

As mentioned before in my last post, one of the most interesting topics is how to measure a BA success. A BA may involve in many aspects of a business. Some BAs have direct influences to the business case, some are indirect.  These aspects may not be quantifiable. For example, if a BA implements new policy that improve the moral inside a company, what metrics do you use to determine how successful the BA did his/her job? If a BA proposes a new features development for a piece of software, which indirectly drives the sale of the hardware , could you easily relate the sale increase of the hardware is due to the BA decision.

In the world, we tries to come up with “thing” to be measure.  Some suggests I heard were: compare the BA with a benchmark, BABOK, PM inputs, objective counts, etc.

Just like everything, we create an abstract of things we want to measure. For me, this is just human nature. In the conference, one of the presenter talks about her company would invest money to figure out how to measure their BA performance.  Unfortunately I found that most of the discussion focused too much on tools and methodologies on how to measure a BA, but not so much on how to improve the BA.

If you step back and think about the reason you hire a BA , the basic reason comes down to the fact that you want to make your business more profitable.  I hope that companies would focus on improving the BA skills, and performance, instead of emphasising the measuring part.

Agile and ATDD

ATDD – Acceptance Test Driven Development

As a software developer, I probably heard this term “Agile” at least one or twice a week. Just last week my team watched an agile development video.

There are many favour of agile software developments. My team is moving from the tradition waterfall software development to SCRUM development. I can probably spend months and months to talk about agile, but that isn’t necessary since you can easily google it.

In the conference, one of the topics presented is acceptance test driven development. Regrettably, I have to express my disappointment in the content that was presented. The content focused too much on “how to write a acceptance test”, instead of “how ATDD improve your software development” or “how to apply ATDD to your software development”.

Instead of presenting what I learned about how to write an acceptance test, I would like to talk about how ATDD is integrated in an agile development. Remember, ATDD is NOT a requirement in agile development, instead, agile development promotes the use of ATDD.

In agile development, it is very important to have fast feedback, and deploy results. With ATDD, it helps to ensure new development does not break old functionalities, and ensure new functionality works. The test is one of the important feedbacks for the development team, or the BA to know the health or your software product.  As your software becomes more complex, more tests will be needed. As a result, your tests need to be maintainable. Many time the tests need to be refactored because the business requirement changes.

Your tests ensure the quality of your software, but you also need to ensure the quality of the tests. Here are some tips:

You want the acceptance tests to be:

  1. Based on business cases – when there is a business requirement, there should be an acceptance test.
  2. Readable – BA needs to understand what the tests do, and Developer needs to read the code easily
  3. Easily to maintain – Business cases changes all the time, the tests need to be easily refactored, or be prepared to toss the tests and write a new one
  4. Useful – Don’t waste time on writing tests that cover the same thing over and over again. Testing scenarios that never happen is useless too.
  5. Can be automated – i.e. Continuous Integration, which is another big topic that can’t be covered here.

Ultimately, you want to test your software as much as possible to ensure it works.

Data Warehousing

Another interesting topic that I attended was about data warehousing.  I won’t get into the detail of what is data warehousing. However, there are two points that I like to share. When you want to develop a data warehouse, please remind yourself these:

  1. You need a business case to create a data warehouse
  2. Use waterfall model, no agile!

The presenter pointed out that data warehouse extracts very specific information from the database. If there is no business case to create, you shouldn’t spend invest resources in creating one.  Developing a data warehousing can be expensive, and you want to do it right in the beginning. It is hard to modify afterward. That also lead to the 2nd point, use waterfall model when developing a data warehouse.  Data warehouse tends to be rigid, changes are very hard to make once it is created. Therefore the waterfall development model works best.

Who are the Business Analysts (Part 1/3)

About a month ago I was given an opportunity to attend the BA World conference in Calgary.  BA, which stands for business analyst, describes those professional who analyze the business. This was a two days conference, and the ticket was around $800 CND. This is rather an expensive conference relatives to my past conferences.

So, why did I paid to attend this conference which has almost nothing to do with programming? Well, I didn’t pay. I was lucky to win a draw for a free ticket in one of the CAMUG (Calgary Agile Methodology User Group) seminars. I would like to thank CAMUG organized the monthly seminar, and gave out free tickets to the conference.

Welcome to the BA World

I had never attending a non technical conference, so this is a totally new experience for me. The majority of my time deals with technical matters.  I kept reminding myself to stay away from being too technical when talking to the people in this conference.

I particularly remembered two things from the keynote that seems to be a recurring challenges for the BA in this two days conferences:

  1. BA has not been receiving the recognition that he/she should have deserved.
  2. BA as a discipline is not well defined, and the BAs need to promote themselves better in the business world.

These two problems puzzled me in the beginning.  However, soon I understood the reason behind it as the conference progresses.

Here are my reasons:
First, BA is relatively a new discipline, and yet people in the business world has been practicing BA. It just that it was not well defined the role of a BA in a company. In another, BA is a very general term describes people who analysis business.  Second, it appears that many company’s employees act somewhat like BA.  In another sense, there is not a need for a specific BA role if everyone in the company does a bit of BA so that company can archive its goal.

As a result, to better define BA as a profession, an organization called IIBA was created.

Role of a BA

In general,  BAs help the company grows.  For example, they do this by providing specific objectives for the company to achieve.  They might help implements polices, business processes to ensure the company stays in focus.

Specifically, BA may do some of the followings:

  • Collect business requirements
  • Linking the people to come to a business solution
  • Implement a new business process or policy
  • Finding new business opportunities
  • Finding opportunites to save company money

Values of a BA

The following diagram shows the values of a BA in an organization

image 

Types of BA

Generalist – This is basically the standard BA. This person oversees the general aspect of a business. A example would be a management consultant.

Specialist – This person has focus on a specific aspect in a business. For example: Data Analyst, Methodology BA, Process Analyst.

Hybrid – This person carries multiple roles in a company. For example, BA/PM, BA/QA, BA/Developer.

My Thoughts

BA as a professional appears to be very general. It almost like if you are doing business, but can’t find a proper title in a company, you will be categorized as a BA.  That’s properly one of the reasons why BA is not that well define.  However, because the profession appears to be very general, it seems hard to measure the performance of a BA.  This has become one of the most interesting questions in the conference – how do I measure the BA performance.

Feb 18, 2010

C# Overriding Base Class Explicit Method

Recently one of my colleagues asked the team how to override a base class method that was declared as explicit. This is actually an interesting question. An there is a lengthy discussion on why you can’t override a explicit base class method from your derived class.

http://bytes.com/topic/c-sharp/answers/271737-how-can-i-call-base-interface-method

The first question is, can you call a base explicit method?

   1: using System;
   2: namespace CSharpCodeTest
   3: {
   4:     interface IFoo { void Foo(); }
   5:  
   6:     class A : IFoo
   7:     {
   8:         void IFoo.Foo()
   9:         {
  10:             Console.WriteLine("A.Foo runs");
  11:         }
  12:     }
  13:  
  14:     class B : A
  15:     {
  16:         public void MyFoo()
  17:         {
  18:             IFoo mySelf = this;
  19:             mySelf.Foo();
  20:         }
  21:     }
  22:  
  23:     class Program
  24:     {
  25:         static void Main(string[] args)
  26:         {
  27:             B b = new B();
  28:             b.MyFoo();
  29:         }
  30:     }
  31:  
  32: }

The compiler works, and I got my result. So, we are able to call our explicit base method through the use of “this”.

So, the next step is try to override B.Foo()

   1: using System;
   2: using NUnit.Framework;
   3:  
   4: namespace CSharpCodeTest
   5: {
   6:     interface IFoo
   7:     {
   8:         void Foo();
   9:     }
  10:  
  11:     class A : IFoo
  12:     {
  13:         void IFoo.Foo()
  14:         {
  15:             Console.WriteLine("A.Foo runs");
  16:         }
  17:     }
  18:  
  19:     class B : A, IFoo
  20:     {
  21:         void IFoo.Foo()
  22:         {
  23:             Console.WriteLine("B.Foo runs");
  24:         }
  25:     }
  26:  
  27:     [TestFixture]
  28:     public class TestCases
  29:     {
  30:         [Test]
  31:         public void Test1()
  32:         {
  33:             B b = new B();
  34:  
  35:             //Call by casting IFoo
  36:             ((IFoo)b).Foo();
  37:  
  38:             //Call by casting A, then by IFoo
  39:             A a = b;
  40:             ((IFoo) a).Foo();
  41:         }
  42:     }
  43:  
  44: }

This is the result

image

So, in this sense, polymorphism still works. That means I am allow to create my own Foo() in the derived class.

How about I try to call base.Foo(), in my override Foo() that is non-explicit?

   1: class A : IFoo
   2: {
   3:     void IFoo.Foo()
   4:     {
   5:         Console.WriteLine("A.Foo runs");
   6:     }
   7: }
   8:  
   9: class B : A
  10: {
  11:     public void Foo()
  12:     {
  13:         IFoo mySelf = this;
  14:         mySelf.Foo();
  15:     }
  16: }
  17:  
  18: class Program
  19: {
  20:     static void Main(string[] args)
  21:     {
  22:         B b = new B();
  23:         b.Foo();
  24:     }
  25: }

Hey, it works too, once I cast the “this” into IFoo, I can still access the base.Foo().

At last, what if I try to override this explicit Foo()? I changed the code from “public void” to “void IFoo.Foo”

   1: class B : A, IFoo
   2: {
   3:     void IFoo.Foo()
   4:     {
   5:         IFoo mySelf = this;
   6:         mySelf.Foo();
   7:     }
   8: }

Ouch, infinite loop. In fact, I have to explicit declare class B with IFoo in order for the compiler to work. Even if I try casting to A:

   1: class B : A, IFoo
   2: {
   3:     void IFoo.Foo()
   4:     {
   5:         //IFoo mySelf = this;
   6:         IFoo myself = (IFoo)(A)this;
   7:         myself.Foo();
   8:     }
   9: }
Nothing will work.
 
The reason is because class B can only have one IFoo implementation. When I explicitly declare B as IFoo, and implemented the IFoo.Foo(), class B no longer has the original class A.Foo().
 
AND… unfortunately there is no special syntax or format to tell the compiler to execute base.IFoo.Foo(), therefore there is no way to call the base.Foo().

I believe this is a missing feature in C#. If C# allows you to call base.Foo() through the IFoo(this).Foo(), you should allow to call it when overriding the method.

To hack around the problem, in the forum, one suggested to use reflection:

InterfaceMapping map = GetType().BaseType.GetInterfaceMap(typeof(IFoo));
map.TargetMethods[0].Invoke(this, new object[]{});

I would suggest try to create a wrapper class if possible, instead of create a derive class.

In fact, there is a FXCop rule on this issue: http://msdn.microsoft.com/en-us/library/ms182153%28VS.80%29.aspx