Friday, May 23, 2014

Why EA? Know your business context and your stakeholders

NOTE: This text is work in progress. Please check back for updates.

When developing an EA function you need to be extremely value-oriented. There are so many traps to avoid so unless you continously ensure you deliver value to your stakeholders it is only a matter of time before management  close down the EA function.
So why is this so hard? To start with, here is Gartners definition of EA:

"Enterprise architecture (EA) is a discipline for proactively and holistically leading enterprise responses to disruptive forces by identifying and analyzing the execution of change toward desired business vision and outcomes. EA delivers value by presenting business and IT leaders with signature-ready recommendations for adjusting policies and projects to achieve target business outcomes that capitalize on relevant business disruptions. EA is used to steer decision making toward the evolution of the future state architecture."

Sounds good, right? But how do you deliver value in such a discipline?

Know your business context

There are a few things you need to understand:
1. The business context. Which are your companys key strategic issues?
2. What are the main transformation processes that the company is going through now?
3. For these key strategic issues, how can the EA function bring most value?

Know your stakeholders

In order to drive value with the EA function you need to have a clear understanding who to deliver what value to. EA typical stakeholders are both on high and low level. It could be:
  • top management striving for running the projects with most value from a business strategy perspective. 
  • business executives driving change processes in their businesses. 
  • CIO and IT management striving for cost efficiency or increased business flexibility in their IT services.  
  • PMO in the work to prioritize the project portfolio
  • Project managers needing help to design solutions that both delivers according to requirements and are in line with the IT strategy.
  • System architects that wants clear description of a solution architecture to be able to break it down into a detailed system design.
  • Application maintenance striving for solutions that fits with existing services and are easy to modify and manage in general.

Obviously there are lots of stakeholders, and they have all different needs. The first common mistake is to try to make everybody happy. You will spread your efforts so thin that the value delivered will not be recognized.

So how do you ensure the value delivered is recognized, and even measurable?

Know your Stakeholders key questions

How do you find out what keeps them awake at night? What are their challenges and questions they need the EA function to answer? It is very simple. You need to ask them. How many EA tems never talk to their stakeholders? Far too many. Not only once but a key success factor is to have regular contact with your stakeholders and evaluate your performance in their perspective.

Now you have the next problem: When you compile all the stakeholder's questions you will realize that there are far to many questions, and it you will be gone for a year or so just building the models, implement the tools and gather tha information needed to meet all och your stakeholders extectations.
That is the second commonly made mistake. You are not ready yet. If you disappear for a year the management will close you down before you have delivered anything.

So you need to prioritize very hard, and find a way to choose what to do to deliver some value fast.

Know the business value of the stakeholder's questions

You may have to ask them again. Of all their questions, which one(s) are really crucial for them? What type of decision can they take with the answers and the intelligence that you will bring them?
Now we are getting somewhere. With this information we can move to the next stage:
Make a prioritized shortlist of the stakeholder's key questions.

To be continued...

© Copyright 2014, Tomas Elfving

Sunday, January 1, 2012

Performance counters for Sharepoint 2010 WFEs

Hi, this is a set of performance counters covering both general performance and counters for how Output & ASP.NET cacheing works (providing you have them enabled) including problem description an possible resolution options.

Objects and Counters Problem Resolution Options
% Processor Time (_Total) Over 75-85% Upgrade processor
Increase number of processors
Add additional server(s)
% Processor Time - Process (w3wp)
% Processor Time - Process (OWSTIMER)
Avg. Disk Queue Length Gradually increasing, system not in a steady state and queue is backing up Increase number or speed of disks
Change array configuration to stripe
Move some data to an alternative server
% Idle Time Greater than 90% Increase number of disks
Move data to an alternative disk or server
% Free Space Less than 30% Increase number of disks
Move data to an alternative disk or server
Available Mbytes Less than 2GB on a Web server. Add memory.
SQL server available memory will be low, by design, and does not always indicate a problem.
Cache Faults/sec Greater than 1 Add memory
Increase cache speed or size if possible
Move data to an alternative disk or server
Pages/sec Greater than 10 Add memory
Paging File
% Used and % Used Peak The server paging file, sometimes called the swap file, holds "virtual" memory addresses on disk. Page faults occur when a process has to stop and wait while required "virtual" resources are retrieved from disk into memory. These will be more frequent if the physical memory is inadequate. Add memory
Total Bytes/sec Over 40-50% of network capacity. This is the rate at which data is sent and received via the network interface card. Investigate further by monitoring Bytes received/sec and Bytes Sent/sec.
Reassess network interface card speed
Check number, size, and usage of memory buffers
Working Set Greater than 80% of total memory Add memory
% Processor Time Over 75-85%. Increase number of processors
Redistribute workload to additional servers
Errors/sec The number of errors per second that occur during the execution of HTTP requests, including any parser, compilation, or run-time errors
Application Pool Recycles Should be as low as possible, 0 or close to.Several per day, causing intermittent slowness.  Make sure that you have not implemented settings that automatically recycle the application pool unnecessarily throughout the day.
Worker Process Restarts The number of times a worker process has been restarted on the server computer. A worker process can be restarted if it fails unexpectedly or when it is intentionally recycled. If this counter increases unexpectedly, you should investigate as soon as possible.
Requests Queued Hundreds or thousands of requests queued. Implement additional Web servers
The default maximum for this counter is 5,000, and you can change this setting in the Machine.config file
Request Wait Time As the number of wait events increases, users will experience degraded page rendering performance. Implement additional Web servers
Requests Rejected Greater than 0 Implement additional Web servers
Application Restarts Should be as low as possible, 0 or close to.Several per day, causing intermittent slowness. 
Cache Total Entries The total number of entries in the cache. 
Cache Total Hits The total number of hits from the cache. 
Cache Total Misses The number of failed cache requests per application. 
Cache Total Hit Ratio The ratio of hits to misses for the cache. 
Cache Total Turnover Rate The number of additions and removals to the cache per second, which is useful in helping to determine how effectively the cache is being used. If the turnover rate is high, the cache is not being used efficiently
Output Cache Entries The total number of entries in the output cache.
Output Cache Hits The total number of requests serviced from the output cache.
Output Cache Misses The number of failed output-cache requests per application.
Output Cache Hit Ratio The percentage of total requests serviced from the output cache.
Output Cache Turnover Rate The number of additions and removals to the output cache per second. If the turnover rate is high, the cache is not being used effectively.
Session SQL Server Connections Total The total number of session-state connections made to the Microsoft SQL Server database in which session-state data is stored.

© Copyright 2012, Tomas Elfving

Wednesday, September 21, 2011

Database scalability tips

  1. Avoid Object Relational Mappers. They create complex queries that hard to optimize.
  2. Analyze locks. Row level locking is better than table level locking. Use async replication
  3. Single database choke point? Create parallel databases and let a driver select between them.
  4. Use metrics. Visualize what's happening to your system using one of the many monitoring packages.
  5. Lack of Feature Flags. Turn off features via a flag so when a spike hits less important features can be turned off to reduce load.
© Copyright 2011, Tomas Elfving

Friday, September 16, 2011

WS consumer performance tips

WS call are always expensive with the overhead each call require. Caching is a way to avoid unneccesary WS calls and improve performance: 

The general rules for cacheing are:

Always cache WS data which is not very dynamic in nature, bu at the same time make sure you don't get functional error by caching data that needs to be fetched fresh.

Use the ASP.NET cache with a timeout instead of some custom cache like hash table

Invalidate cache based on business rules or time-out

Consumers of Web services have the option of calling web services asynchronously or synchronously. Your code should call a Web service asynchronously only when you want to avoid blocking the client while a web service call is in progress. If you are not careful, you can use a greater number of worker and I/O threads cause by asynchronous WS calls, which negatively affects performance. It is also slower to call a service asynchronously; therefore, you should avoid doing so unless your client application needs to do something else while the service is invoked.

© Copyright 2011, Tomas Elfving

Tuesday, August 16, 2011

WS design for improved performance

In my experience, these three are the most commonly seen performance-related design mistakes in web service development:
1. Chatty calls. 
Network round trips to and from a Web service can be expensive. This issue is magnified if clients need to issue multiple requests to a Web service to complete a single logical operation. The web services should be designed to maximize the amount of work performed with each request. Make sure that the functionality you are offering is worth the time and effort the client had to go to in order to get the request to you in the first place. For better performance, consider combining smaller requests into a larger single request.

2. Serialization of large amounts of data.
Serializing large amounts of data and passing it to and from Web services can cause performance-related issues, including network congestion and excessive memory and processor overhead. Consider redesign.

3. Inefficient state management.
Inefficient state management design in Web services can lead to scalability bottlenecks because the server becomes overloaded with state information that it must maintain on a per-user basis. Common pitfalls for Web services state management include using stateful Web methods, using cookie container–based state management, and choosing an inappropriate state store. The most scalable Web services maintain no state.

© Copyright 2011, Tomas Elfving

Wednesday, August 3, 2011

Windows Azure Tools extend Visual Studio 2010 out now

Windows Azure Tools for Microsoft Visual Studio extend Visual Studio 2010 to enable the creation, configuration, building, debugging, running, packaging and deployment of scalable web applications and services on Windows Azure.
Find it on , install using the Web Platform Installer.

© Copyright 2011, Tomas Elfving

Sunday, April 4, 2010

Commerce Server 2009 and Sharepoint 2007 Evaluation VPC

On Microsoft Connect, there is a Commerce Server 2009 Evaluation VPC (February 2010 version) available for download to partners and customers. This VPC has Commerce Server 2009 and Microsoft Office SharePoint® Server 2007 (MOSS) fully installed and configured (Core Systems, Multi-Channel Commerce Foundation, SharePoint Commerce Services), including the new Default site with the Template Pack running in SharePoint using the 30 new Web Parts.

Register to download the latest VPC update, complete with a demonstration script, sales collateral, samples, and videos at

© Copyright 2010, Tomas Elfving

Saturday, April 3, 2010

Commerce Server vs MOSS 2007

First of all, Mei Ling has written a great blog about getting Commerce Server 2007 working with MOSS, definately recommended reading.

There does seem to be some disconnect between the MOSS team and the CS team. This blog post looks into the areas of overlap of functionality.

Catalog Management
Commerce Server gives you rich catalog management functionality. Here, you could go down different paths. If all you needed was a catalog management function, you could easily define a few custom Content Types and some lists and you'd have the same functionality. However, you wouldn't have the integration with the basket and order management functions, so it’s probably best to leave it in the CS database. So here you have a choice, either:
a) Use the BDC to consume your CS catalog
b) Write your own CS web parts to use directly within MOSS
A combination of these last two methods are probably a good way to go.

Checkout Processing and Order management
I wonder why the CS team didn’t decide to rip out the (difficult to debug) pipeline framework and replace it with Windows Workflow. An alternative to the checkout processing and order management is to use InfoPath forms and workflow to put stuff in the correct databases, and send messages through BizTalk (or other service bus technology)  to actually take the money and send orders to the fulfillment houses.

One of CS's other big functional areas is in eMarketing, and again we see more than one way of doing stuff. Do you use the CS targeting system or MOSS audiences? I’m not sure, but it’s at risk confusing my users with two different systems to target their users. I think audience targetting through MOSS is better, simply because we will want to target both products and content to the same audience groups.

Discounting System.
This is one of the stronger points of CS, and I can't see anything obvious in MOSS to replicate this functionality.

Reporting and Analytics
CS uses SQL 2005 Reporting and Analytics, so these reports can be consumed into a Report Center within an MOSS Intranet.

Membership and Role providers
The out of the box providers are hooked up to CS as well as in MOSS so this is no area of concern. Using Forms Authentication, you could reuse the same in a MOSS environment.

So in conclusion, use the catalogue management, the shopping basket and the discount system from CS whereas all the other CS functionalities could easily be handled by reasonable amounts of custom development work in MOSS.

© Copyright 2010, Tomas Elfving

Monday, November 23, 2009

Heimore Identity 2.0

Preparing a Portal/IAM-presentation for the Heimore Identity 2.0-day on Wednesday,
© Copyright 2009, Tomas Elfving

Thursday, November 19, 2009

Google has launched Go

Google has launched Go, a new programming language focusing on concurrency, simplicity, and performance.

Go is open source. It uses an expressive C/C++-similar language with pointer but no pointer arithmetic. It is type safe and memory safe. However, one of its main goals is to offer the speed and safety of a static language but with the advantages offered by modern dynamic languages. Go also offers methods for any type, closures and run-time reflection. The syntax is pretty clean and it is garbage collected. It is intended to compete with C and C++ as a systems programming language.

It features mulitcore programming by providing lightweight concurrency allowing developers to create sets of lightweight communicating processes, called "goroutines". You can run many concurrent goroutines and you don't need to worry about stack overflows. Goroutines aren't threads, they are functions running in parallel with other goroutines in the same address space. It is very easy to launch parallel functions using the goroutines. This is one of the most interesting features offered by the language. It really simplifies concurrency for systems programming.

© Copyright 2009, Tomas Elfving

Wednesday, November 18, 2009

A Web service layer versioning strategy using deprecated methods

Question: How to manage development, bugfixing and all type of both backward- and nonbackward compatible changes to a web service layer without suffering from escalating maintenance costs of having to manage lots of old versions?

Suggested solution: Do not allow different version of the WS interface. Never change namespace. Handle change by introducing replacement methods and mark the "old" method as deprecated. Leave the deprecated method in production for a grace period, giving all consumers sufficient time to move over to the new version. When all consumers have moved over, remove the deprecaded method altogether.

This strategy works for both WS and EJB interfaces.

See also

© Copyright 2009, Tomas Elfving

Monday, September 21, 2009

Visio stencil with SOA-symbols

As a compliment to his excellent book "SOA Design Pattrens", Thomas Erl also offers a Visio stencil with SOA symbols. Very useful!

Download from

© Copyright 2009, Tomas Elfving

Sunday, September 20, 2009

MOSS Audience Targeting & Audience Rules

To scope content in MOSS 2007 using audience targeting, You have three options:
1. Sharepoint Groups
SharePoint Groups are maybe the most obvious Target Audience mechanism. This is useful in situations where the site administrators may not have access to Active Directory, which generelly is the case in large organizations. SharePoint Groups have the nice feature of allowing self-enrollment. Self-enrollment is useful if the site administrator wants to setup a site that have different levels of information and allow the users themselves to subscribe to what components they'd like.

2. AD/Domain Groups
Active Directory domain groups are a valid Target Audience and it works also if you are using a Custom Authentication provider, You just use Custom Role provider as an audience. The advantage is that existing AD groups (e.g for internal use) can be reused in external sites. The SharePoint site administrator has less or no control over the membership in the group, but in large organizations, this is generally the way the security department wants it anyway :-)!.

3: Audience Rules
Audience Rules are very powerful and maybe the least understood. They can be setup to achieve a number of useful things. For instance , they can be setup with multiple rules to require a match to all rules or any rule. The rules can be as simple checking if the user belongs to a organization, is in a distribution list, in a security group or match a specific user profile property.

© Copyright 2009, Tomas Elfving

Monday, July 6, 2009

Consumer power on the Internet

After filing support issues to IBM for ten months to not much avail, it took IBM only a few weeks after I blogged about it to get a version out addressing the problems with the Clearcase for Visual Studio 2008 plugin that we have reported (, comments). Coincidence? Great news anyhow, only that we have already moved to VisualSVN and are happy now, maybe we look at the new Clearcase version at some later point in time.

© Copyright 2009, Tomas Elfving

Sunday, June 14, 2009

ROSS for multi-stage deployment and multi-farm replication for SharePoint

When searching for an enterprise deployment solution for a large external MOSS platform, I've come across ROSS. RepliWeb Operational Synchronization for SharePoint (ROSS) claims to provide one thing that is missing in the MOSS box, namely support for multi-stage deployment and multi-farm replication.

SharePoint used as a mission-critical web platform is requiers IT to maintain rapidly growing infrastructures, content and application structures. RepliWeb’s ROSS addresses the challenges when managing content deployment and replication processes across multi-staged topologies and multiple farms. Agnostic to environment variations, ROSS is a scalable solution built for critical enterprise deployment processes including comprehensive scheduling, recovery and transactional deployment capabilities, efficient transfer engines, and much more.

The feature I am specifically interested in is the support for transactions, so that a deployment may be rolled back entiryly without messing up the environment.

I'll comment on ROSS again later when I have made a thorough evaluation.

© Copyright 2009, Tomas Elfving

Saturday, May 2, 2009

Clearcase for Visual Studio problems

I'm working with a large corp customer that have standardized on IBM Clearcase. It works great with all the Java development tools, but when starting up large scale Visual Studio development we have experienced lots of problems, especially with the Clearcase plugin for Visual Studio 2008. For instance:
- Clearcase looses files, especially when adding files to VS project locally
- Merge performs  poorly in general. In particular, merge of the VS project file is a source of major headache. Merge of CSS files reports successful, but when we're analyzing it there was lots of errors in the merged file.
- The Update view command is unreliable. Developers doing the Update view command doesn't always get all the latest files, and worse is that they get no message. They work on old files without knowing it, the developers worst nightmare!

If you have any experiences or tips, feel free to contact me or comment!

© Copyright 2009, Tomas Elfving

MOSS sp 2 now available

The MOSS sp 2 is now available for download at

Major improvements in the areas of:
1. Performance, availability and stablilty - lots of small fixes and improvements across nearly all the components. New/improved functions like a timer job that automatically rebuilds content database index to improve database performance. Another difference is when a content database is marked as read-only, the user interface will be modified so users cannot perform tasks that require writing to the database.
2. Broader browser support. Internet Explorer 8 is added into Level 1 browser support. FireFox 3.0 is added into Level 2 browser support. (Firefox 2.0 is no longer supported by Mozilla)
3. Improved Forms based authentification. Now the client application can store user credentials instead of asking for them every time.
4. Long-awaited improvements in product dokumentation

All the details of SP2 can be downloaded here: 

© Copyright 2009, Tomas Elfving

Friday, April 3, 2009

SIEM and logging/tracking event by Heimore

Focusing on SIEM (Security Information and Event Management), traceability, log management and regulatory requirements Heimore Group is on the 13th of May arranging a full day of presentations, case studies, and meetings round these topics. The leading software vendors are coming as well as a number of leading experts in these fields.

© Copyright 2009, Tomas Elfving

Monday, March 23, 2009

Sharepoint proprietary specs out

Microsoft have released some interesting reading in the SharePoint Products and Technologies protocol documentation. It provides detailed technical specifications for Microsoft proprietary protocols (including extensions to industry-standard or other published protocols) that are implemented and used in SharePoint Products and Technologies to interoperate or communicate with Microsoft products. 

The documentation includes a set of companion overview and reference documents that supplement the technical specifications with conceptual background, overviews of inter-protocol relationships and interactions, and technical reference information.

© Copyright 2009, Tomas Elfving

Thursday, March 19, 2009

Skype staus field in Sharepoint

A company named ObjectConnect have developed a Skype integration into SharePoint.Its first version available on Codeplex now ( featuring the Skype status field. It allows you to store the account name in the field, and it's rendered as the nice status (green / grey) picture in the list and item view. 
Also, clicking on the icon will bring you the chat window to that person if you have Skype installed locally. Nice! 

 © Copyright 2009, Tomas Elfving