May 2007 - Posts

The following conversation is a conversation with Microsoft Financial Services Sr. Architect Colin Cole discussing Office Business Applications (OBA).  This is a new type of blog post for me and a Drowning In Technical Debt first.  I hope to conduct similar conversations in the future.  Finally, I would like to thank Colin for making time to have this conversation with me.

dbottjer says: So I figured a good place to start would be with a definition.  What is OBA?  I did some research and here is what I came up with. Office Business Applications (OBA) use the Microsoft Office Suite of programs (Outlook, Word, Excel, etc) as a presentation layer for connecting line of business applications and executing business processes.

Colin Cole says: Cool, I have a few more things.

dbottjer says: Ok great.

Colin Cole says: OBA is kind of the centerpiece of what we call a "people ready" solution.

Colin Cole says: It’s really about designing a solution to give the end user more control and agility to interact with the application.  Rather than having the IT defined screens with text boxes and validation.

dbottjer says: The user has more control to personalize.

Colin Cole says: You get instead something that brings data down to the tools you're familiar with (as you state), but also have server piece as well and that's where office server (SharePoint) comes in.  By exposing data through something like a SharePoint the business user can define their own reports bring the data down to a cube and open it up in excel.  Slice and Dice.  Create a dashboard.

dbottjer says: Right

Colin Cole says: Define their own KPI's.  Etc.  So like you state -- leveraging familiar tools, but also interacting with the solution data as appropriate for their role.

dbottjer says: So this leads to the Problem. I thought that a good problem definition is: a fundamental inconsistency between how business systems work and how people work.

Colin Cole says: Agreed

dbottjer says: Basically applications today are very rigid

Colin Cole says: Absolutely, take an investment scenario for example.  The investor interacts with the canned application to analyze their portfolio.  But there's always 5-6 things they want to know to make business decisions that aren't available.  So what do they do?  They call IT and ask for a new report.  2 months later they get their report.  But by that time the need is totally different. 

dbottjer says: Exactly.

Colin Cole says: So the reality is they don't even bother....and just create their own one-off spreadsheets that aren't reused, etc.

dbottjer says: So if they have an export feature they could export to Excel and do some quick processing there.

dbottjer says: But that is an one-off.

Colin Cole says: Right.

dbottjer says: So the idea of OBA is just to allow users to work in tools like Excel to begin with an augment excel with the missing services necessary for the problem domain.

Colin Cole says: Right, as well as interacting with dashboard/reporting type functionality bringing down tasks into Outlook, --like I showed you guys with our lending solution. Stuff like that.

dbottjer says: I guess this leads us to why use OBA? OBA's offer a familiar interface – Most business users are familiar with at least one or more programs within the Microsoft Office Suite.  For example, Outlook is commonly used groupware that remains open throughout the business day on many corporate desktops.  It would seem like a win-win situation to take advantage of a program that users are already familiar with and that is running on their desktops.  Excel.

Colin Cole says: Exactly, why not plug a CRM tool into Outlook, since the sales folks are already familiar with the paradigm?

dbottjer says: OBA integrates line of business applications such as Enterprise Resource Planning (ERP), Customer Relationship Management (CRM), and Supply Chain Management (SCM) in a presentation layer the user is already familiar with and productive in.  For example, a sales associate may depend heavily on Outlook to communicate with his/her clients.  The associate keeps To Do lists within Outlook and a calendar of all meetings.  Integrating the sales associate’s Outlook with CRM would centralize all the company’s customer information.  This would give the sales associate a place to add customer notes and perhaps a way to look up additional customer information such as support cases.

Colin Cole says: Exactly.

dbottjer says: So it seems like an efficient model for developing line of business applications?

Colin Cole says: Right, obviously not for everything, but some % of apps it's a better fit.

dbottjer says: Something else I noticed is that OBA is a great reuse story. For example, to implement an OBA solution you use an office product like Word, Excel, Outlook, SharePoint, etc. You also can use existing web services. Furthermore, you use VSTO and .NET.

Colin Cole says: InfoPath plays nicely as well.  Especially the server forms stuff.  Very cool, each InfoPath form can have C# Code Behind, just like aspx.  It makes for a simple model to build professional looking web pages.

dbottjer says: So OBA is a culmination of technologies to provide a business solution designed for how people work. It seems like OBA's have the potential to have a big impact in the line of business application space.

Five Things You Didn’t Know About Me:

 

A while ago I was pinged to answer the five things you didn’t know about me question circulating the blogosphere.  Anyway, I procrastinated but here are my answers.

 

1.     I love animals.  I grew up with Dogs and Cats.  Currently I have 3 cats.

2.     I’ve been playing guitar since I was 9 years old.

3.     I was born and raised in New York. My family moved from NY to Tulsa, OK when I was a junior in High School.

4.     I went to Space Camp when I was in 3rd grade.  It was the first time I ever went to “Sleep Away Camp” and needless to say my parents ended up spending the week in Orlando.  (Living in New York at the time.)

5.     I have an hour or so of flight time actually piloting a Cessna.

6.     Bonus: My first computer was an IBM PC Jr.

I Tag: Dave Strommer, Roy and Scott Roycraft

We've been using the Composite Application Block (CAB) and Smart Client Software Factory (SCSF) since they first emerged.  Most of my focus has been on the middle tier and service layer which our smart client front ends consume.  However, recently we have needed more manpower building smartparts.  As result I've been refreshing my knowledge of the CAB and SCSF.  I found found a great blog series http://geekswithblogs.net/kobush/category/3702.aspx on understanding the cab.  The series does a great job defining the CAB terminology and explaining the basic architecture.

Last year we deployed a new underwriting system.  Since the Fall of 2006 we have been steadily releasing updates to the system.   Supporting the large user-base of this application has required us to improve our debugging and performance monitor skills.  For example, we have become huge fans of unit testing and made strides to better understand memory management and profiling.  To protect the health of the application we needed to understand the recycling of application pools / worker processes.

Thoughts on Application Pool Recycling and Application Availability explains in detail how IIS6 is designed to gracefully transfer client connections to the new worker process.  In general devising a health strategy and recycling application pools is a good idea.  It is a bad idea to be overly aggressive in the recycling of Application Pools.  For example, recycling an application pool every hour would be very aggressive.  If application pool recycling is required that frequently I would profile the application's memory usage to determine how garbage collection is working.  Perhaps objects aren't being disposed of in a timely manor.  It is always a good idea to create a connection or instantiate an object as late as possible and dispose of them as soon as possible.  Furthermore, forced Garbage Collection like the GC Collect method is not recommend b/c it can corrupt Garbage Collection Statistics.

When recycling an application pool for an application that maintains session state, the way in which the session state is maintained should be considered.  For example, maintaining In-Process session state will result in a loss of session state when the Application Pool is recycled.  As a result users may be forced to login to an application again.

Why do I lose ASP Session State on IIS6 further explains the loss of session state when maintaining state in-process. A better strategy may be to store session state out of process.

DoNotExposeGenericLists is a Code Analysis rule exposed within Visual Studio when List<T> is publically exposed.  For example, List<T> may be exposed through properties, methods, parameters, etc.  Why does DoNotExposeGenericLists recommend that I expose Collection instead of List? [David Kean] explains that Collection<T> is the better choice b/c it exposes 4 overidable methods.  The methods are ClearItems, InsertItem, RemoveItem and SetItem.  Events can be raised from within these four methods to provide a notification when changes are made to the Collection.  

Dave Strommer copied me on an email a few months back from a colleauge regarding the FailFast method.  This method was added to the .NET 2.0 framework and basically terminates a process without executing the any application Try-Finally or finalizer code.  Additionally, this method creates a memory dump for your application and writes a log entry to the Windows Application Event Log.

Posted Tuesday, May 08, 2007 4:07 PM by dbottjer | with no comments
Filed under: ,

Dave Strommer first brought Multi-Tenant Data Architecture MSDN Article to my attention a few months ago.  Unfortunately, I've had this article in my items to review folder.  Anyway, I finally read the article in detail and thought it quite valuable.  Basically, the article describes several approaches for designing a Multi-Tenant Data Architecture.  It reviews each approach and reviews the pros and cons.

Roy blogged his thoughts on Multi-Tenant Data Architecture.

Our business partner began reporting all bullet points were being converted to question marks during the archiving of Word Docs.  An early hunch that perhaps our FTP component was defaulting to ASCII transfer mode instead of Binary proved incorrect.  With this option ruled out we knew our electronic document repository was properly receiving both the control file and the Word Doc.  We began to suspect the web service exposed by our application which returns a document and metadata for archiving.  We were using a byte array to store, in this case, the word document and write it to the http response stream.  However, we were not specifying the encoding type which was our fatal mistake.

 

   1:  StringWriter sw = new StringWriter();

   2:  XmlTextWriter xw = new XmlTextWriter(sw);
   3:   
   4:  // Save Approval Document to Text Writter.
   5:  doc.WriteTo(xw);
   6:   
   7:  // Added this line to specify encoding and resolve bullet point issue.
   8:  UTF8Encoding encoding = new UTF8Encoding();
   9:   
  10:  // Convert Approval Document To Byte Array.
  11:  byte[] docAsBytes = encoding.GetBytes(sw.ToString());
  12:   
  13:  vvDoc.FileBinary = docAsBytes;