Skip to content

Month: October 2014

Make or Buy Decision for Software Solutions

(Padillo, et. al., 1999) recognised that the make-or-buy decision problem, also known as “sourcing”, “outsourcing”, or “subcontracting”, is among the most pervasive issues confronting modern organizations. (Cáñez, 2000) further added that the companies have finite resources and cannot always afford to have all manufacturing technologies in-house. Other authors have also acknowledged the heightened importance of the process for buy-or-make decisions results from environmental pressures and the intensifying of global competition.

(Stojanović, et al., 2011) argued that at its core there is a very simple logic. Comparing the costs of own production and vendor purchasing for a different number of units, there is an equilibrium Q* between cost effective “make” and “buy” solutions.

Figure 2: Basic economic “make or buy” decision-making model (Männel, 1976)

On the topic of make-or-buy decisions, (Probert, 1997) proposed a four-stage methodology that may be implemented by practising managers to resolve this issue. The various stages in his methodology are:

  • Initial business appraisal. This phase addresses issues related to the direction of the business and the customer preferences.
  • Internal/external analysis. This is the heart of the review. Details of the company’s internal performance as well as the competitors’ performance are collected.
  • Generate/evaluate options. Having the information from phases one and two, make-in and buy-out options are analysed.
  • Choose optimal strategy. Considering the different options generated in phase three, the optimal strategy is chosen.

(McIvor & Humphreys, 2000) recorded the key problems encountered by companies in their efforts to formulate an effective make or buy decision.

  • No formal method for evaluating the decision.
  • Inaccurate costing systems.
  • The competitive implications of the decision.

Many theories are used in the literature to further explore the make-or-buy decisions. The list includes, but it is not limited to, transaction cost theory, network theory, competency theory, resource-based view theory, and total cost of ownership. These topics would be explored further in the subsequent chapters.

Transaction Cost Theory

Transaction cost economics (TCE) has a long past since what we generally speak of as ‘transaction costs’ have been present in economic discourse for centuries. The past of TCE is rich in metaphors describing the idea of transaction costs, but the one with the most profound impact on the later development of TCE was the notion of frictions.

(Coase, 1937) in his classic 1937 paper on “The nature of the Firm” was the first to bring the concept of transaction costs to bear on the study of firm and market organization. (Coase, 1937) asked that if production could be carried on without any organisation at all, well might we ask, why is there any organisation? The answer was that firms exist because they reduce transaction costs, such as search and information costs, bargaining costs, keeping trade secrets, and policing and enforcement costs.

(Walker & Weber, 1984) argued that the effect of transaction costs on make-or-buy decisions was substantially overshadowed by comparative production costs. (Walker & Weber, 1984) further added that the extent to which market competition affects make-or-buy decisions may reflect the ability of the component purchasing manager to indicate how low competition leads to contracting difficulties. The purchasing manager may not have considered, however, the causal relationship connecting market competition and production costs.

On the other hand, (Barney, 1991) points out that transaction cost economics tends not to pay a due amount of attention to the capabilities of a company’s potential partners when deciding which economic exchanges to include within a firm’s boundary and which to outsource.

Resource Based View

(Atkinson, et al., 2012) recognized that the resource-based view of the firm has its roots in the organizational economics literature, where theories of profit and competition associated with the writings of various authors focus on the intimal resources of the firm as the major determinant of competitive success. Central to the understanding of the resource-based view of the firm are the definitions of resources, competitive advantage and sustained competitive advantage.

(Penrose, 1980) suggests that there is a logical limit to how big a firm can get and how many things an individual manager can concern himself with. This perspective is rooted in the understanding that a single manager—or cohesive, functioning management team—can only attend to so many details and issues at any one moment in time, and that a team necessarily only has a finite number of competencies at its disposal.

According to (Barney, 1991), the concept of resources includes all assets, capabilities, organizational processes, firm attributes, information, knowledge, etc. controlled by a firm that enable the firm to conceive of and implement strategies that improve its efficiency and effectiveness.

(Atkinson, et al., 2012) further recommended that in the resource-based view of the firm, these resources are the sources of competitive advantage. Barney describes a competitive advantage as occurring when a firm is implementing a value creating strategy not simultaneously being implemented by any current or potential competitors. According to the resource-based view of the firm, competitive advantage can occur only in situations of firm resource heterogeneity and firm resource immobility, and these assumptions serve to differentiate the resource-based model from the traditional strategic management model.

(Barney, 1991) advocates that, for a firm resource to have the potential of generating competitive advantage, it must be:

  • valuable, in the sense that it exploits opportunities and/or neutralises threats in a firm’s environment;
  • rare among a firm’s current and potential competition;
  • imperfectly imitable (either through unique historical conditions, causal ambiguity, or social complexity); and
  • without strategically equivalent substitutes

(Akio, 2005) asserts that the resourced based view suggests that the resources possessed by a firm are the primary determinants of its performance, and these may contribute to a sustainable competitive advantage of the firm.

Core Competencies

(Prahalad & Hamel, 1990) expressed their view on core competency as the collective learning of an organization and involves coordinating diverse production skills and integrating multiple streams of technologies. It includes communication, involvement, and a deep commitment to working across organizational boundaries, such as improving cross-functional teams within an organization to address boundaries and to overcome them. (Prahalad & Hamel, 1990) also stressed that core competency does not diminish by with use. Unlike, physical assets which deteriorate over time, core competencies are enhanced as they are applied and shared.

(Fine & Whitney, 1996) argued that the main skills companies should retain transcend those directly involving product or process, and are in fact the skills that support the very process of choosing which skills to retain.

(Quinn & Hilmer, 1994) suggests that effective core competencies are:

  • Skill or knowledge sets, not products or functions.
  • Flexible, long-term platforms — capable of adaptation or evolution.
  • Limited in number.
  • Unique sources of leverage in the value chain.
  • Areas where the company can dominate.

Strategic Choices

There are many definitions of strategy given by various authors. (Johnson, et al., 2008) considered strategy as a long term direction of an organisation. According to them strategy is the direction and scope of an organisation over the long term, which achieves advantage in a changing environment through its configuration of resources and competences with the aim of fulfilling stakeholder expectations. (Porter, 1990) on the other hand emphasised on the competitive factor and described strategy as the search for a favorable competitive position in an industry, the fundamental arena in which competition occurs. Competitive strategy aims to establish a profitable and sustainable position against the forces that determine industry competition.

From the various defintions of strategy, it can be summarised that startegy of an organization should have the following elements in it i.e. long term, resources, competitive, profitable and position etc.

The three business strategies (Porter, 1980) propounded (cost leadership, differentiation and focus) specify the basic approaches that could be implemented in a competitive environment. According to Porter, it is impossible to succeed if a firm does not prefer one of these three strategies or implement two of them simultaneously. Porter defines this situation as being stuck in the middle.

Figure 3: Michael Porter’s generic strategies

How to Set Check-in Policies for all Projects in Team Foundation Server using PowerShell?

The Team Foundation Server 2013 provides the administrators with opportunity to add check-in policies to the Source Control Settings.  These check-in policies define that while checking in the code in the Team Foundation Server Version Control (either TFS Version Control or GIT), the user has to perform certain extra actions. These actions vary from adding comments to describe the check-in, linking the check-in to one or more work items defined the in the product backlog or to make sure that your build successfully passes all the unit tests defined in the project.

The check-in policies are defined on the Team Project level. However when you have a Team Project Collection with hundreds of various team projects, you want a way with which you can standardize the check-in policies for all the team projects.

Unfortunately,  Team Foundation Server does not support this functionality out of the box. But luckily, you can use the Team Foundation Server SDK to implement this programmatically. The PowerShell script below shows how to set Check-in Policies for all Team Projects in Team Foundation Server using PowerShell.

The script makes use of the SetCheckinPolicies on the Team Project object. What it does is basically retrieving all the available projects in the Team Project Collection and looping through all available projects to set the check-in policy individually.

You would notice that the script makes use of two policies:

  • Work Item
  • Check for Comments

However, you can extend this or change to select other installed policies on your workstation. You would notice that script makes use of InstalledPoliciyTypes on the work station. It basically makes use of the registered policy assemblies from the registry under the path:

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\12.0\TeamFoundation\SourceControl\Checkin Policies

TFS Policy


[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Common")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Controls")


function AddPolicyOnProject($project){
	$policies = @()
	
	$policies += AddToPolicyEnvelope($workItemPolicy)
	$policies += AddToPolicyEnvelope($checkForComments)
	
	$project.SetCheckinPolicies($policies)
	
	Write-Host "Adding Policies to" $project.Name
}

function AddToPolicyEnvelope($policy){
	$policyType = $installedPolicyTypes | where {$_.Name -eq $policy.Type}
	return New-Object -TypeName Microsoft.TeamFoundation.VersionControl.Client.PolicyEnvelope -ArgumentList @($policy, $policyType)
}

$serverName = "http://manasbhardwaj.net/tfs/Projects"

$tfs = [Microsoft.TeamFoundation.Client.TeamFoundationServerFactory]::GetServer($serverName)
$versionControlType = [Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]
$versionControlServer = $tfs.GetService($versionControlType)
$projects = $versionControlServer.GetAllTeamProjects($true)

$installedPolicyTypes = [Microsoft.TeamFoundation.VersionControl.Client.Workstation]::Current.InstalledPolicyTypes

$workItemPolicy = New-Object -TypeName Microsoft.TeamFoundation.VersionControl.Controls.WorkItemPolicy
$checkForComments = New-Object -TypeName CheckForCommentsPolicy.CheckForComments

$projects | foreach { AddPolicyOnProject $_ }


Shrink all databases on SQL Server

This post is intended to be used as a hack for Developers to release some disk space. Please do not use on actual production environments.

Usually, the database transaction logs also takes a lot of space.

What I also usually do is set the Recovery Mode of all the local databases on Dev Machines to Simple instead of Full. That way the growth of log files is also reduced for future.

Next to free up the space (or shrink all databases), you can use the query below. What it will do is basically set the recovery mode to simple for all databases and then shrink them.


CREATE TABLE #DataBases (ID INT IDENTITY, Name NVARCHAR(100))

INSERT #DataBases
SELECT NAME FROM sys.databases WHERE NAME NOT IN ('master','model','msdb','tempdb')

DECLARE @Count INT = 1
DECLARE @NrOfDBs INT = 0

SELECT @NrOfDBs = COUNT(0) FROM #DataBases

DECLARE @DBName NVARCHAR(100), @SQL NVARCHAR(MAX)

WHILE (@Count < @NrOfDBs)
BEGIN
     SELECT @DBName = Name FROM #DataBases WHERE ID = @Count

     SELECT @SQL = 'ALTER DATABASE [' + @DBName + '] SET RECOVERY SIMPLE'

     PRINT(@SQL)
     EXEC(@SQL)

     --Shrink Database
     DBCC SHRINKDATABASE (@DBName , 0)
     
     SET @Count = @Count + 1
END

DROP TABLE #DataBases