Welcome to EMC Consulting Blogs Sign in | Join | Help

Tamer Shaaban's Blog

  • Microsoft Architect Insight Conference 22nd 23rd March 2006

    Dave Morris and I will be presenting a session on the second day of the under solutions titled: "Delivering Agile Business Process & Integration Solutions". This session will cover architecting and implementing Business Process and Integrations solutions (BPI) the Agile way. We believe that a traditional waterfall process often demands unrealistic skills and accuracy that inevitably leads to the architecture either being invalid or out of date even before development starts.  An Agile approach to implementation of Business Process and Integration (BPI) solutions provides a far more realistic framework for solution delivery. This session is for everyone interested in discovering how this has been successfully implemented across varying project sizes and multiple architectures

     

    To register for the conference visit: http://www.microsoft.co.uk/events/registermulti.aspx?event=ArchitectEvent

     

    The Agenda:

    What does Agile really mean?

    Discover how Agile project management impacts BPI solutions.

    Just how Agile can you really be in the integration world? 

    Does Agile really mean XP?

    What is the difference: Agile Integration vs. Waterfall Integration

     

    What is the real cost of integration?

    Pay now vs. pay later

    How to justify the cost

    Tactical solutions vs. Strategic architectures

     

    What is the impact of strategic BPI on an organisation?

    Coping with change

     

    How does this work in the real world?

    The simple task of integrating SAP, Siebel, and AS400 legacy in one project

    Using BizTalk to implement a Chip and PIN Payment Gateway solution

     

    Was there any pain along the way?

    Setting the right iteration durations

    Working with external suppliers

    Working with waterfall projects the agile way

    When not to use Agile?

  • Using Agile Project Management with Integration Projects

    I have been recently involved in a number of BizTalk 2004 integration projects using Agile Project Management (Also known as Scrum). Conchango (http://www.Conchango.com) has also been involved with Microsoft in designing and implementing the Agile add-in for VS2005.

     

    If you are unfamiliar with Agile Project Management, have a look at the following links:

     

    http://www.controlchaos.com/ (Its all about common sense) The official Website with all the resources

    http://www.scrumalliance.org/ For Certified Scrum Master Resources

    http://wiki.scrums.org/index.cgi?HomePage  and http://c2.com/cgi/wiki?ScrumProcess

     

     

    Background

     

    First, a bit of background, I don’t want to assume that you are an expert on the subject and will try to give a bit of info to get you going for this post.

     

    Agile project management was introduced for development projects. The standard sprint duration is 30 days and at the end of each sprint the project team presents “Production Quality” features. At the beginning of the project the team organise their deliverable (Called Products) in a “Product Backlog”. A representative (Called Product Owner) from the stake holders helps them identify the products and prioritise the product backlog. The team starts with the most valuable tasks first, then the less valuable till they deliver the entire system or run out of budget. The emphasis is on two things: The stake holders are seeing results very early on. So after four working weeks the team would have produced real business value. The second is that the products of each sprint are production ready. So, if the stake holders decide to put this to live today, they can do that.

     

    The Chickens and the Pigs

    The first time I was called a chicken I was insulted! Then I was called a pig and I was insulted again, well not really because by then I knew what it meant! The story is that a pig and a chicken wanted to open a restaurant. The pig asked: What should we call our restaurant, and the chicken replied: Let’s call it Ham and Eggs. The pig thought about it for a minute and said, I can’t have a restaurant with you because I would be committed and you would only be involved.  Therefore, only the scrum master, product owner, and members of the team are pigs (Committed), all the rest are chickens (Only involved). The advantages of this are countless: How many times were projects ruined/delayed, went over budget and/or lost focus because of restrictions imposed by non relevant people. How many times did meetings drag on because you had to involve everyone in the department? How many times where you misinformed because you could not find the correct answer or talk to the right person. Being a pig (If you excuse the expression) not only empowers you, it also clears unnecessary obstacles, and gives you direct access to other pigs.    

     

    The scrum meeting

    The scrum meeting is the hallmark of Agile project management. It is a daily meeting, capped at 15 minutes, held in the same place, only pigs are allowed to talk, chickens can listen. Each person (Pig) tells the team what he/she has done yesterday, what he/she are intending to do today and finally mention any impediments they have.

     

    Tip1: Have the scrum meeting standing up and away from your desks. This ensures people focus on the meeting, and prevents the quick peak to the old email inbox

    Tip2: Pigs stand in a circle, chicken outside the circle. This enforces the separation between committed and non committed resources

    Tip3: Establish a fine for those who are late for the scrum meeting. Mine is a pack of Bahlsen Choco Leibniz dark chocolate biscuits (http://www.bahlsen.co.uk/), or two if you someone has been really naughty!! Most people though tend to gather the money and later donate it to a charity of their choice.

    Tip4: The daily scrum time is very important. If you make it too early, you might have people stuck in traffic and start having problems with people missing very often. Having your scrum meeting too late, say at 10 am or 10:30 am, people will tend to do whatever (not work related) waiting for the scrum to begin. Scrum time of 9:30 am is on average a good time.  

     

    Semi-committed pigs*

    Sometimes you require resources for a short time only, or have to share them with other projects. I call these Semi committed pigs. The first problem with having semi committed pigs is time management and estimation. They will often say: “I have to work on this other project, so you can have 40% of my time.” This is very difficult to estimate because they will not always give 40% every day. The second problem is that you always try to have the team in the same room. Semi committed pigs will generally not be able to do that because of their other engagements. This introduces plenty communication issues.  

     

    * The term “Semi-committed pigs” is truly my term and you will probably not find it in any of the books. If you do find an equivalent please let me know.

     

    Why use Agile for integration projects?

    So far I have been involved in four (and counting) BizTalk project using Agile. I am a certified Scrum Master. I had the privilege of working on the first integration scrum project ever.  The following is why I think Agile is very well suited for Integration and BizTalk Projects.

     

    Communication

    Having daily scrums with relevant involved stakeholders is the biggest advantage Agile projects have over other Traditional approaches. In addition, there is a benefit of delivering functionality early to business users:

    -         The feedback is much more relevant to what has been delivered so far. Therefore if the delivered functionality is not completely correct, it could be easily altered as you did not build any additional functionality on top of it, and the development knowledge is still fresh in developers’ minds

    -         The feedback is immediate, and updates the team’s knowledge of the system. This is very important especially if in the next sprints there will be functionality that either uses this feature or extends it.

    -         Reprioritising functionality: Very often stakeholders will re-evaluate their priorities because they have identified additional benefits in what has been delivered making other products on the backlog either redundant or less attractive. This is key as, in traditional projects, we see large budgets being spent on features that are rarely used. This is because the business did not get to see the solution until development was completed for all the features of the system.

     

    Project Inception vs. Scrum Sprint 0

    In traditional waterfall projects business analysts, technical architects, and project managers spend considerable amount of time identifying the business requirements, business processes (Existing and changing) existing legacy applications to integrate with, human interaction, etc. They try to define this for the entire product they are supposed to deliver at the end of the long term project. Not only is this a very complicated task, but by the time you reach, say, user acceptance, this is often outdated because everyone would have gained much better understanding of what actually needs to be done. Also the complexity of the systems we usually build forces us down routes that were not anticipated at the beginning of the project. The end result is a change request process that usually drags on, as well as out of date documentation. The other problem with the waterfall approach, and I had this recently, the inception process is very loose and undefined by definition. The room for error is very large especially that the waterfall model does not enforce the concept of daily update meetings. The result is that business analysts, Technical architects,  PMs would have initial project meetings with the stakeholders, go away for few weeks and think about it, and come back with a design and a project plan that they feel would solve the problem. Doing this, the stakeholders are led down a road that the “Experts” thought through, and they will trust them to have considered all the options. The point is, that there was no daily involvements from the stakeholders on the decisions being made during this very important phase of the project. The end of inception is usually one or very few options that are presented and discussed. In my experience, we started a project using scrum after the inception phase produced an invalid solution. I was lucky because I was critical and questioned everything before I started development. It took some time to discuss the shortfalls of the proposed solution and convince my client to adopt what I called “Sprint 0” or Sprint Zero. Because it was agile, we had daily scrum meetings with a representative from the stakeholders, a product owner. Every morning we discussed our options, and made decisions together because we were on the same level. At the end of sprint 0, we presented our alternatives to the rest of the stakeholders and really felt that by that time we have reached a decision together. Everyone was much more involved just because they were part of the decision making process.

     

    So what should be in Sprint 0?

    Basically this should include everything to get the project started with Sprint 1. Therefore, this sprint could include everything from identifying the business case for the solution or project, identifying business benefits, revenue potential, and cost savings, present the different cost options, rollout strategies, etc This sprint could also include decisions regarding vendor selection, pricing models for hosting systems, leasing hardware, evaluating Components Off the Shelf (COTS), identifying the tasks that could potentially be on the product backlog, and the team structure that could be required and their skill sets. In one project we talked about peeling the onion, i.e. identifying the layers of complexity and costs with the knowledge that we still have to be agile and account for changes and modifications in later sprints. At the end of sprint 0 you should end up with a working product backlog, or at least one that will let you start the first sprint. Also consider that you might finish the project without doing all the items of the backlog, as well as being prepared to stop the project after each sprint review and deploy your application to production.

     

    Sprints and Sprint Duration

    The standard sprint duration is 30 days. Sprint durations should be equal. I used 10 day sprints for my first agile BizTalk project. The advantage is that it fits with the average time you need to build a demonstrable BizTalk Project, or part of it. In that project I had to write a custom BizTalk adapter that allows us to integrate with Chip and Pin devices. That was easily done “Production quality” in a ten day sprint. On the other side of the interface was integration with the AS400 system using Attunity. Again this was easily done in a ten day sprint. I passed this by Ken Schwaber (The father of Agile) and he was fine with. He said: As long as you are fine with it I’m fine with it! The disadvantage of a ten day sprint was that external vendors usually fund our pace overwhelming and struggled to keep up with our demands. We were too agile for then and I think they were not used to that. The second disadvantage was with Semi committed pigs. The short sprints allowed little room for error and if the semi committed resource is stuck with another non project related task you could not compensate easily.

     

    Architecting SOA the Agile Way

    It is now agreed that SOA increase the flexibility and the reusability of software components. As enterprise applications evolved and the adoption of SOA increased, integration among all the services became critical. By definition, each service is an independent component, has its own schema(s), unit tests, architectural views, etc. Architecting SOA the agile way is about incremental delivery of production quality services. This could mean that in certain sprints the development team will deliver production quality incomplete services but they are complete in the context of the sprint. In other words, the service would do the functionality required for this sprint and subsequent sprint will extend that service further. The result is a business targeted delivery rather than an IT based approach. At the end of each sprint, it is the decision of the stakeholders if they would want to move this service to production and reap the rewards of that functionality. This is a very strange concept to developers as they are used to dealing with complete architecture, and technical specifications when they start coding. In fact, if the agile process is implemented, the development team should have an incremental architecture with every sprint, which should be much more accurate and up to date in comparison with what would have been produced in a waterfall planning session. Architecting SOA the Agile way is really about implementing corrective incremental steps towards the end result. In golf talk, in a waterfall context the architect is expected to score a “hole in on” every time, while Agile is all about taking steps in the right direction.

     

    Coping with Change

    If I had a pound for every time someone changed his/her mind on a project I would have been a very rich man indeed. Actually, it is more likely that business analysts, stakeholders, project managers, developers, and admit it even architects, will change their minds during the duration of the project. In fact, the longer the project, the more likely change will be introduced. Last year I worked on a large project integrating SAP, Siebel, and AS400 legacy applications. Change was the only thing that hasn’t changed throughout the project. Even during “Code freeze” periods, we where often asked to implement the changes in the middleware interfaces because of the code freeze in SAP and Siebel. Modular delivery does help cope with change, for a start you don’t have to design everything up front and change it later. In addition, you don’t have to spend a lot of time designing everything only to implement part of it, or even none of it. Delivering incrementally will put the team in the right frame of mind required for the change because you only plan for this sprint, and if things change then you will plan for them in the next sprint and so on. Of course if things change for this sprint then the team will have a problem, but I think this is where a shorter sprint duration comes in handy. In integration projects things can change all the time. Even when we were doing the SAP and Siebel interfaces we knew exactly needed to be delivered, but testing was an issue; not everything could be tested the same way or by the same testers. Therefore planning for what takes place when and what to work on next is a challenge. Shorter sprint durations, say ten days, might be an advantage during some integration projects, especially if you want to deliver small modules and reach you goal quicker coping with change along the way. On another project I had to share some resources, and my project was not the most critical. With shorter sprints I could re-organise the sprints to cope with resource availability, a situation not ideal but will be the difference between frustrated demoralised project team, and well, not!

     

    And Finally

    These were few points from my personal experience, and every time a new agile project starts and finishes there are loads to learn. If you are still reading, I hope you have found this useful, and I look forward to your comments and questions

  • Multiple source messages in BizTalk maps and updating schemas schemas don’t refresh

    Here is something I’m sure I’ll come across again. So this is a note to self (I’m very forgetful), and a little helper if anyone out there gets the same issue.

    If you have multiple messages in your BizTalk map ( if you don’t know how then Google for “biztalk map multiple schema”), and then you need to update one of the messages’ schema, the schema in the source pane does not show the added fields! I think this mainly happens if you update the schema of the second, third, etc but not for the first message (The one that has the ns0 prefix).

    The simplest way to correct this is to open the map in another editor, say the HTML/XML editor, or notepad if you are feeling lucky! Then fine the “import” lines. The should look like this:

    <xs:import schemaLocation="..\schemas\[[FileName]].xsd" namespace="http://YourNamespace\Whatever1"/>

    <xs:import schemaLocation="..\schemas\[[FileName]].xsd" namespace="http://YourNamespace\Whatever2"/>

    <xs:import schemaLocation="..\schemas\[[FileName]].xsd" namespace="http://YourNamespace\Whatever3"/>

    Depending on the number of imports you have in your map, you should have a few of these. All you have to do is swap them around, save the map file and reopen it in the BizTalk editor. By swapping them around I mean move the import line using cut and paste. This seems to “magically” refresh the map file. I know! Sad but true!

  • Large messages in BizTalk 2004, what's the deal? What's the effect?

    This is a very interesting post I was more interested in scenario number 1 because I came across that on my project. The problem really was not that the file was too large (7 MB Flat file), and it was not the amount of time it took to stream the flat file to disassemble it (40 mins), do the business logic and send the messages to the queue (20 mins). The problem really was that nothing else could run during the disassembling bit. You start seeing SQL locking issues, as the streaming is one transaction. The way we worked around it is described here which basically bypasses the pipeline disassembling bit and allows us to control the number of message we wanted to deal with at one batch. So even though there is good support in BT2004 for “Large messages” you need to be very careful about the other messages going through your system and how they are affected by this.

  • Microsoft SAP Adaptor for BizTalk 2004

    This was a popular topic for discussion at the BizTalkEAI session at the community day. Lots of people had lots of good questions. So I’ll recap here. Microsoft Biztalk 2004 SAP adaptor is actually two components, a run time module called BizTalk 2004/SAP adaptor, which is the actual adaptor that communicates with SAP. The second module is a design time components that integrates with your Visual Studio within the “Add Adaptor Wizard” (SAP .Net Connector). This is what you use to connect to SAP through a port defined on your machine, search lists of SAP functions (BAPIs and IDOCS), and select the function you want to call. At the end of the wizard steps, you will end with the schama (xsd) you need to contact SAP. If the port you chose was two way (Request/Response) then you will end up with a two root schema for the request and the response types.

     

    From an architectural point of view, use IDOCS if you want to asynchronously send or receive message to and from SAP, and use BAPI if you want to synchronously send a request and receive a reply (RPC call). SAP can not call BT using BAPI (Otherwise it will be too easy!!!). From a port setup point of view the choice is between a one way and a two way port, you select SAP as the “Transport Type” for both.

     

    To setup a receive port is very simple. You need to find out the Client ID, Program ID, the SAP gateway machine name, user name and password (Simple!!). One very important thing to note, especially if you have multiple environments (e.g Dev, test, UAT, etc), make sure you have unique Program ID s per environment. Otherwise your message will end up on the wrong environment!

     

     

    Few issues that I came across and you need to be aware of: I only managed to connect to SAP R/3 with the Wizard/Adaptor. I tried with SAP DP(APO) and it did not work, the same will apply for SAP DW.  The first time you use the adaptor to make a BAPI call you will have a dll created in the {Program Files}\Microsoft BizTalk Adapter v2.0 for mySAP Business Suite\Bin folder with the name of the BAPI function you are calling. These dlls will only be created on a machine that has VS installed on them, the design time component will not create them for you. This makes deployment interesting. Also, every time the SAP guys change the BAPI signature, i.e. add, remove, rename a field, you have to manually delete the BAPI dll created on the development machine because the old dll will be in use and VS will not have permission to delete it. There are also few issues around sending and receiving large numbers of IDOCS, as well as sending and receiving them in order. We obtained few hot fixes from Microsoft to fix that but we are too close to our “Go Live” date, so we will continue with our reliably tested work-around till go live then re-evaluate with SP1.

Powered by Community Server (Personal Edition), by Telligent Systems