Ahmed’s Dev-Shop

Distribution: Layers vs. Tiers

Posted in Uncategorized by Ahmed Siddiqui on December 27, 2010

Even though there’s so much written on this topic and I really don’t like to discuss the discussed, the motivation here was observing general ambiguity regarding the difference between Layering and Tiering among interns. So here without going into details we will just discuss the difference.

Though both ensure distribution, layers are logical while tiers are physical ways of distribution. Usually Layers are for us while Tiers are for machines but not necessarily.


Layering is to create logical separation in your code during design and development, based on roles and responsibilities in order to increase clarity, reduce complexity, increase maintainability and organize relationships among code artifacts. Layering itself doesn’t imply any specific implementation that how many layers you should have or which layer should or shouldn’t communication with which layer. Following is an example of having layered code or multi layering:

Data Layer

Since almost applications use data, whether it’s a business application or a game, you need to persist and retrieve data You may have a separate set of modules or classes (or whatever code snippets) to handle saving and retrieving data from database, XML file, text file, web service or any data source.

Presentation Layer

Web pages or windows forms are the most common example of presentation layer, where you just focus on the presentation delegating domain logic, data retrieval, security or any other concern to other layers.



Tiers are the physical distribution of application at infrastructure level at the time of deployment, like whether to have a single machine for database and web server or dedicate machines for both or even multiple servers for balancing the load or adding backup machines and processes for handling as failover. Again the term Multi Tier or N-Tier doesn’t restrict to any number of tiers instead it depends on the requirements and the platform.




Workflow Options with SharePoint (from out-of-the-box to customization)

Posted in Sharepoint, software, Uncategorized, workflows by Ahmed Siddiqui on December 7, 2010

A value adding mindset encourages adding some value in order to justify one’s existence on the planet. An easier way to do so is disallowing the problems, you’ve already dealt with, to bother others. So here I am going to try the easier way.

There can be multiple options to implement a functionality but there’s only one which should be opted, the most economical one. But how you can choose the best solution till you are unaware of all the available solutions. Yes you can choose the best -you-know but it’s not necessarily the best available —here best means the most optimal solution according to your case specific needs.

Hence in order to choose the best solution, you need to know all the available solutions with their benefits (pros) and costs (cons). So in the given context I am sharing the options, I am aware of, available for implementing workflows with SharePoint.


1.   By enabling ‘Required Approval’ feature on list items

If you just need a moderation by admin on the contents –whether it’s a document or any other list item–added or modified by content editors, using a workflow would  be an overkill. You may just enable  “Approval Required” option on lists to get items approved by admin. This simple feature can also be used where a Accept/Reject decision with Comments/Remarks is sufficient for the approval of an Leave Application, where the approver can be the HR manager.


2.   Using built-in OOTB (out-of-the-box) workflows

There are few very basic built-in workflows in SharePoint which can be implemented with in minutes but are very rigid and inextensible. Opt only if the following applies:

  • You need very simple approvals and you are sure that the functionality wouldn’t extend
  • No split join or parallel approvals are required
  • Inputs from approvers, except  accept/reject and comments, is not required
  • More suitable for in-house implementation not in projects where you are always expecting challenging changes request from an inconsiderate client


3.   With SharePoint designer

With SharePoint designer simple workflows can be designed with the help of a wizard using built-in activities.

  • Unlike with the OOTB workflows, you can also access other SharePoint contents in the site like Lists and lookups
  • You can also define workflow variables and use them in the activities and notifications.
  • With some tweaking you can also apply branching or parallel approvals.
  • Unfortunately SPD workflow definitions are not portable but fortunately these are part of site backups.


4.    With SP Designer and Workflow Foundation

If the built-in activities and customization with SharePoint Designer is not sufficient you may have to go for the option 5 or 6, but wait, may be you can go for an 80-20 approach, by implementing the 80% (or 90%) simple functionality without  OOTB and SPD while 20% (or 10%) missing complex activities can be written with Workflow Foundation. Instead of writing the complete workflows in WF, it would be more economical interim approach in such scenario. But start writing your own activities, don’t forget to have a look at the activities already written by the communities  at Codeplx.


5.    Featured third party solutions

When advance features are required within very short delivery time, you’ve to look for an off-the-shelf featured solution. Which fulfills all or most of the requirements without requiring too much training and implementation efforts. But in that case you have to carefully review the comparison of the available solutions, since even the most popular and well promoted solutions can become a nightmare since you are already short of time and can’t bear the cost of experiments. There are couple of products available like Nintex, K2.Net, Ultimus etc while I am not going to rank them in this post.


6.    Writing your own with Workflow Foundation

When you business logic gets involved or you need advance workflow features like conditions, loops, split and merge, or routing based on input values (state machine), or communication with other adapters or external systems; you simply cant go with the above options. For such advance workflows, the natural option in .NET is writing workflows and activities using Windows Workflow Foundation where you can also use the WCF communicating with external systems. But before opting this option, one should be aware of the fact that beside how this solution is marketed, this is not a workflow solution but a foundation to develop one, as its name depicts.


7.    Writing you own workflow engine from scratch

This option is feasible for very few since making this riskiest decision requires really convincing  reasons, for instance:

  • You are a workflow solution provider who’s interested to own the product
  • Your team has understanding of the patterns and practices of writing workflow applications
  • Your Experience on challenging workflow applications and awareness of the challenges
  • Study of few good workflow solutions that how they address common workflow problems
  • Sufficient resources for development so you wouldn’t go short of them in the middle of the development

I am pessimistic  when it comes to writing your own product, specially when it’s as challenging as a workflow solution as I’ve seen a lot more failures than successes.