Seasonal Decomposition of Time Series by Loess—An Experiment

Author: Peter Rosenmai
Let’s run a simple experiment to see how well the stl() function of the R statistical programming language decomposes time-series data.

An Example

First, we plot some sales data:

sales<-c(39,  73,  41,  76,  75,  47,   4,  53,  40,  47,  31,  33,
         58,  85,  61,  98,  90,  59,  34,  74,  78,  74,  56,  55,
         91, 125,  96, 135, 131, 103,  86, 116, 117, 128, 113, 123)
time.series <- ts(data=sales, frequency = 12, start=c(2000, 1), end=c(2002, 12))
plot(time.series, xlab="Time", ylab="Sales (USD)", main="Widget Sales Over Time")

Observe the annual seasonality in the data:

A time series of widget sales

We apply R’s stl() function (“seasonal and trend decomposition using Loess”) to the sales data:

decomposed  <- stl(time.series, s.window="periodic")
plot(decomposed)

This decomposes the sales data as the sum of a seasonal, a trend and a noise/remainder time-series:

A time series of widget sales decomposed into seasonal, trend and noise/remainder components

We may easily extract the component time series:

decomposed <- stl(time.series, s.window="periodic")
seasonal   <- decomposed$time.series[,1]
trend	   <- decomposed$time.series[,2]
remainder  <- decomposed$time.series[,3]

This allows us to plot the seasonally-adjusted sales:

plot(trend+remainder,
main="Widget Sales over Time, Seasonally Adjusted",
ylab="Sales (USD)")

A time series of seasonally-adjusted widget sales

An Experiment

How well does stl() extract trend and seasonality from data? We run three simple graphical investigations.

Case 1: Strong seasonality and low, normally-distributed homoskedastic noise

An experiment in decomposition by Loess of a time series showing strong seasonality and low, normally-distributed homoskedastic noise

The left side of each of the above images shows, from top to bottom:

  1. Generated sales data.
  2. The trend component from which the data was generated.
  3. The seasonal component from which the data was generated.
  4. The noise/remainder component from which the data was generated.

The right side shows:

  1. Generated sales data.
  2. The trend component identified by stl().
  3. The seasonal component identified by stl().
  4. The noise/remainder component identified by stl().

Note the close match between the two trend components and between the two seasonal components. This indicates that stl() works well in this instance.

Case 2: Weak seasonality and high, normally-distributed homoskedastic noise

An experiment in decomposition by Loess of a time series showing weak seasonality and high, normally-distributed homoskedastic noise

Again, stl() appears to work quite well.

Case 3: Weak seasonality and high, normally-distributed heteroskedastic noise

An experiment in decomposition by Loess of a time series showing weak seasonality and high, normally-distributed heteroskedastic noise

And stl() still seems to work fairly well. This is heartening, as it’s common for the variance in a time series to increase as its mean rises—as is the case here.

How stl() Works

When calling stl() with s.window="periodic", the seasonal component for January is simply the mean of all January values. Similarly, the seasonal component for February is simply the mean of all February
values, etc. Otherwise, the seasonal component is calculated using loess smoothing (discussed below).

Having calculated the seasonal component, the seasonally-adjusted data (the original data minus the seasonal component) is loess-smoothed to determine the trend.

The remainder/noise is then the original data minus the seasonal and trend components.

The stl() function is quite flexible:

  • The seasonality does not have to run across a year. Any period may be used for this.
  • The decomposition process can accommodate seasonality that changes over time.
  • A robust decomposition process is available that is less affected by outliers than is the default.

An Introduction to Loess Smoothing

Loess (“locally-weighted scatterplot smoothing”) uses local regression to remove “jaggedness” from data.

  1. A window of a specified width is placed over the data. The wider the window, the smoother the resulting loess curve.
  2. A regression line (or curve) is fitted to the observations that fall within the window, the points closest to the centre of the window being weighted to have the greatest effect on the calculation of the regression line.
  3. The weighting is reduced on those points within the window that are furthest from the regression line. The regression is re-run and weights are again re-calculated. This process is repeated several times.
  4. We thereby obtain a point on the loess curve. This is the point on the regression line at the centre of the window.
  5. The loess curve is calculated by moving the window across the data. Each point on the resulting loess curve is the intersection of a regression line and a vertical line at the centre of such a window.

To calculate a loess curve using R:

plot(cars$speed, cars$dist, main="Car Speed and Stopping Distance", xlab="Speed (mph)", ylab="Stopping Distance (ft)")
lines(lowess(cars$speed, cars$dist), col="red")

A scatterplot example of Loess fitting

Generating Test Data

Here, for completeness, is the code I used to generate the graphs I used in my tests:

# Parameters
start.ym <- c(2000, 1)
end.ym   <- c(2012,12)
n.years  <- 13

# Set the seed for the randomisation
set.seed(5)

# Create the 2nd derivative of the sales trend
ddtrend.sales <- qnorm(runif(12*n.years, 0.1, 0.90), mean=0, sd=0.4)

# Create the 1st derivative of the sales trend from the 2nd derivative
dtrend.sales    <- rep(NA, 12*n.years)
dtrend.sales[1] <- 0
for (i in 2:(12*n.years)) dtrend.sales[i] <- dtrend.sales[i-1] + ddtrend.sales[i]

# Create the sales trend from the 1st derivative
trend.sales    <- rep(NA, 12*n.years)
trend.sales[1] <- 30
for (i in 2:(12*n.years)){
   trend.sales[i] <- trend.sales[i-1] + dtrend.sales[i]
   if (trend.sales[i] < 0) trend.sales[i] = 0
}

# Create the seasonality
seasonality <- rep(c(10, 30, 22, 32, 26, 14, 2, -15, -14, -13, -16, -2), 13)

# Create the random noise, normally distributed
noise <- qnorm(runif(12*n.years, 0.01, 0.99), mean=0, sd=18)

# To make the noise heteroskedastic, uncomment the following line
# noise <- noise * seq(1, 10, (10-1)/(12*n.years-1))

# Create the sales
sales <- trend.sales + seasonality + noise

# Put everything into a data frame
df.sales <- data.frame(sales, trend.sales, dtrend.sales, ddtrend.sales, seasonality, noise)

# Set graphical parameters and the layout
par(mar = c(0, 4, 0, 2)) # bottom, left, top, right
layout(matrix(c(1,5,2,6,3,7,4,8), 4, 2, byrow = TRUE), widths=c(1,1,1,1,1,1,1,1), heights=c(1,1,1,1,1,1,1,1))

# Plot sales
tseries <- ts(data=df.sales$sales, frequency = 12, start=start.ym, end=end.ym)
plot(tseries, ylab="Sales (USD, 1000's)", main="", xaxt="n")

# Plot the trend
tseries <- ts(data=df.sales$trend.sales, frequency = 12, start=start.ym, end=end.ym)
plot(tseries, ylab="Actual Sales Trend (USD, 1000's)", main="", xaxt="n")

# Plot the seasonality
tseries <- ts(data=df.sales$seasonality, frequency = 12, start=start.ym, end=end.ym)
plot(tseries, ylab="Actual Sales Seasonality (USD, 1000's)", main="", xaxt="n")

# Plot the noise
tseries <- ts(data=df.sales$noise, frequency = 12, start=start.ym, end=end.ym)
plot(tseries, ylab="Actual Sales Noise (USD, 1000's)", main="", xaxt="n")

# Decompose the sales time series
undecomposed   <- ts(data=df.sales$sales, frequency = 12, start=start.ym, end=end.ym)
decomposed     <- stl(undecomposed, s.window="periodic")
seasonal 	   <- decomposed$time.series[,1]
trend	       <- decomposed$time.series[,2]
remainder	   <- decomposed$time.series[,3]

# Plot sales
tseries <- ts(data=df.sales$sales, frequency = 12, start=start.ym, end=end.ym)
plot(tseries, ylab="Sales (USD, 1000's)", main="", xaxt="n")

# Plot the decomposed trend
tseries <- ts(data=trend, frequency = 12, start=start.ym, end=end.ym)
plot(tseries, ylab="Est. Sales Trend (USD, 1000's)", main="", xaxt="n")

# Plot the decomposed seasonality
tseries <- ts(data=seasonal, frequency = 12, start=start.ym, end=end.ym)
plot(tseries, ylab="Est. Sales Seasonality (USD, 1000's)", main="", xaxt="n")

# Plot the decomposed noise
tseries <- ts(data=remainder, frequency = 12, start=start.ym, end=end.ym)
plot(tseries, ylab="Est. Sales Noise (USD, 1000's)", main="", xaxt="n")

Open Source Development

What is Open Source Development? Part of the PMSI/AlignAlytics “What is?” Series. We talk to John Kiernander, a PMSI/AlignAlytics Solutions Architect and Product Design Expert and discuss Open Source Development and its impact on society and business.  These short video blogs will help the novice, support learning and even challenge the more advanced, but however they’re received we hope they’re enjoyed. PMSI, sharing what we know.

Author: Danielle Mosimann, Marketing Assistant.

John Kiernander’s open source project; D3 data visualisation made simple d3simple.org

Analytics, Big Data and BI or: How I Learned To Stop Worrying And Love The Cricket

Author: Ashley Michael

One of the challenges of working for a consultancy like PMSI is explaining exactly what it is that one does all day. Nothing scares off a new potential friend quicker than phrases such as ‘data-driven strategy and insight’, accompanied by some vague hand waving, especially if said hand waving usually sends drinks flying. Typically, after several failed attempts at explaining the concepts of customer segmentation and advanced analytics, the standard fallback response is that we spend our days doing reporting & analysis before moving the conversation on to more interesting topics, such as Justin Bieber turning up really late for gigs or the on/off relationship between those two miserable leads from the Twilight movies.
However, while analytics might appear a foreign concept to many people, the truth of the matter is that it has been part of people’s lives for a long time, even if they didn’t know about it. One particular area of modern life in which analytics is widely used is in sport, specifically in its coverage on television and via digital media. It’s also here that concepts such as big data can be most easily comprehended and explained.
One particular sport close to the heart of this particular author is cricket, a sport built entirely on large numbers of discrete data points. Every single time a ball is bowled, a huge number of different pieces of information are collected – how fast was the delivery? Where did it land? What shot did the batsman play? Which Australian did it dismiss? This is repeated for every ball bowled in every day of (almost) every match around the world. Before you know it we have a genuine example of this mythical big data that everyone has been talking about.
Of course, collecting data for data’s sake can be its own reward – apropos of nothing, nothing impresses a crowd like owning the entire set of classic Doctor Who DVDs – but it’s the interpretation of all this data that is really the key. Hence the proliferation of visual methods on TV and the internet to help commentators or writers provide insight and clarity, such as this example, a pitch map for a specific bowler:

Image Supplied by © Hawk-Eye Innovations

Suddenly, and without really thinking about it, we have analytics. And not just that, analytics based on big data. In order to get to those analytics we’ve used specific software to turn our data into something that we can visually comprehend and interpret. And that’s Business Intelligence (BI) software explained at the same time.
Of course, cricket isn’t the only sport to use these concepts. Football (or soccer as it’s occasionally known in the colonies) is a more recent convert to the idea of big data, albeit in a much more ‘closed shop’ way. The likes of Opta and Prozone provide enormous amounts of data around every single football match in the Premier League (and beyond), with every single pass, shot and run recorded in frightening detail. This data is generally not made available to the public, instead being closely guarded behind closed doors by those football clubs that use it (and largely ignored by those that don’t).
Recently however, Manchester City made large amounts of this data available, encouraging members of the public to do their own analysis and trying to create an ‘analytics community’ in which ideas could be shared. Whilst it’s possible to argue about their motives for this – why pay for an analytics team when hardcore fans will do it all for free and then you can steal their ideas? – it’s clear evidence of the growing significance of analytics (and big data) across different areas of everyday life.
To conclude, perhaps the best way to explain what one does all day is to talk about cricket and its approach to big data, analytics and BI. And then, after several hours of explaining the intricacies, such as the difference between the flipper and the topspinner, casually point out that PMSI generally applies these concepts to the marginally less exciting worlds of consumer goods and utilities. We say generally because everyone needs a hobby for their free time, such as tracking Stuart Broad’s Test career over time:

How Do You Successfully Merge Without Getting Lost In Translation?

How can two companies, either side of the Atlantic, successfully merge without getting lost in translation?

Have a strong connection

PMSI and AlignAlytics have entered into a definitive merger agreement to unite their software-enhanced technology and strategy services in Advanced Analytics. Having previously worked together on several projects as partners this decision was a natural and evolutionary step. (The fact that each company was co-founded by one of two brothers doesn’t hurt but it isn’t a necessity for success!)

Appreciate that you’re stronger with your powers combined.

Like Mulder and Scully and Crockett and Tubs together we are better at obtaining the data necessary to solve the crime. (Although we’ve never solved any extra-terrestrial or 80s fashion crimes… yet.)

The X-Files & Miami Vice.jpg

The X-Files & Miami Vice

Like these analytical pairings from the silver screen, PMSI and AlignAlytics have had their own solo plotlines and successful investigations. But it’s when we come together that even deeper insights are discovered and the investigation is unstoppable.

Have international experience

You don’t need to be a company made up of international men and women of mystery but it certainly helps if both companies have some experience of working internationally. AlignAlytics may have their headquarters in Philadelphia and PMSI in London but they also already have a presence in Canada, Australia, South Africa and Switzerland.

There is a certain style to working across so many time zones and it is very much based in clear and regular communication. Don’t assume that you can adapt to this way of working overnight.

Make sure you’re speaking the same language

Although business speak is universal there will always be differences in any two Company vocabularies with or without an Ocean between them. The key is to define your joint language in detail so there is little room for the sitcom brand of miscommunication.

If the merger were a sitcom, someone from the London office would misunderstand someone from the Philadelphia office or vice versa and hilarity would ensue. Just imagine, Ricky Gervais and Steve Carrell exchanging witty words in a GoTo meeting. Ricky shares his screen and we see something we’re not supposed to. Doh! What’s he like? Sadly, as we all know, life isn’t a sitcom and nothing eliminates the possibility of cringeworthy comedy like clear communication.

Ricky Gervais The Office & Steve Carell The Office

Ricky Gervais The Office & Steve Carell The Office

Connect on as many levels of your business as possible

Some members of your two companies will have never spoken and you don’t want your Directors to be your only connection. There should be no need to play the six degrees of separation game (with or without Kevin Bacon) Everyone can get involved. At PMSI and AlignAlytics we have weekly Lunch n’ Learn sessions in which all team members from around the world are present online and the Philadelphia and London offices gather in their boardrooms. Not only is it a great way to get to know each other but it’s also an opportunity to encourage cross-departmental understanding (even within the same office!).
And finally – Ensure that you’re more than just a complementary match

You need to do more than just work well together. The combination should be unbeatable and irreplaceable. PMSI and AlignAlytics have different areas of expertise and like a good Beaujolais accompanied with some Camembert they complement each other so beautifully that you won’t believe you ever consumed a supermarket reduced-price red with some plain old cheddar.

Did somebody say “Cheese”?

Author: Danielle Mosimann

Lessons From PMSI’s International Expansion

GlobePMSI has been active in Continental Europe for quite some years now. Our customers outside the UK range from ESAB, the Swedish branded welding manufacturer and multinational, through to Stocks Spirits Group covering Eastern Europe. With a continued focus on working with these global clients on improving strategic performance, PMSI has also expanded M&A and market intelligence services into Europe and more specifically France. Our objective has been to diversify our base of financial investor clients and exploit the great opportunities offered in France – an appealing market at a time when M&A deals are at a (very) low level.
We are now about to celebrate two years of operations in France and we are proud to say that this geographical expansion has been a definite success. We have established a solid relationship with several private equity funds and industrial businesses which we have helped in their investment and growth strategies. Looking back at two years of business development and market entry activities, including some highly exciting deals and corporate development issues, what have we learnt from our international expansion?

PMSI_spirograph RGB - smallHire the right staff to save time and money – to penetrate new territories, businesses need to show positive open doors.. Getting on board earlier in the process with people that understand local specifics and know where to focus commercial activities saves time and money.

PMSI_spirograph RGB - smallOvercome barriers by adapting your USP to local needs – businesses cannot always customise their product offering to each market and individual geography but they still need to take into account local dynamics. The USP in the home market might not be as unique in foreign markets – adapting it to what local customers really want is a key to success. PMSI managed to quickly gain significant market share by adapting the UK pricing strategy and leveraging its rarely available sector expertise in France.

PMSI_spirograph RGB - smallBe patient but not passive – business development efforts in new markets may take time to pay off. Local competition holds customer relationships which cannot be untied rapidly. If you have the right product at the right price, customers will eventually start buying, but new businesses efforts must out power incumbent players with ambitious sales and marketing activities, in order to become visible. Customers are (often) lazy – triggering the purchasing process requires on-going conviction.

PMSI_spirograph RGB - smallInvest sufficient resources to create profitable and sustainable operations – one off commercial successes in overseas markets are easy to achieve – the challenge lies in securing and sustaining the initial wins to establish a growing business. Creating the conditions of a long-term success requires commitment and investments – in production capacities, HR, sales and marketing firepower – to build strong national operations from abroad.

These lessons may sound simple, but as we all know the best strategies are often the simplest. PMSI’s success in France proves it.

We will next tell you about some of the most interesting corporate strategy issues we have been involved in France – watch this space!

Author: Remi de Guilhermier

Outlier Reporting and Benefits from Unit Testing in R

A recent PMSI analysis project, reliant on BigData processing and storage, required complex outlier reporting using the R statistical-programming language. This open-source software, combined with in-house statistical skills, allowed the team to quickly produce reports that are now the foundation of an on-going strategic analysis programme.

Unit testing is one part of this story and we hope Peter Rosenmai can continue to share more with us.

Getting started with unit testing in R

Author: Peter Rosenmai
Unit testing is an essential means of creating robust code. The basic idea is simple: You write tests that the functions you code are required to fulfil; whenever you thereafter make changes to your code, you can run the tests to ensure that your functions all still work.

Such future-proofing is obviously useful, but unit testing brings other benefits. It forces you to break your code down into discrete, testable units. And the tests provide excellent examples of how your functions should be called. That can be really useful, especially when code commenting is shoddy or out of date.

Here’s an example of unit testing in the R statistical-programming language using the RUnit package. We have a file main.r in our current working directory. That file contains main(), our top-level function:

# main.r

# Load in the unit testing package
require(RUnit)

# Load in source files
source("string-utils.r")

# Function to run all unit tests (functions named test.*) in all
# R files in the current working directory
runUnitTests <- function(){
   cat("Running all unit tests (being functions that begin with 'test.')
        in all R files in the current working directory.")

   tests <- defineTestSuite("Tests", dirs=getwd(),
                            testFileRegexp = "^.*\\.[rR]$",
                            testFuncRegexp = "^test\\..+")

   test.results <- runTestSuite(tests)

   cat(paste(test.results$Tests$nTestFunc,    " test(s) run.\n",
             test.results$Tests$nDeactivated, " test(s) deactivated.\n",
             test.results$Tests$nFail,        " test(s) failed.\n",
             test.results$Tests$nErr,         " errors reported.\n",
             sep=""))

   if((test.results$Tests$nFail > 0) || (test.results$Tests$nErr > 0)){
      stop("Execution halted following unit testing. Fix the 
	        above problem(s)!")
   }
}

main <- function(run.unit.tests=TRUE){
   if (run.unit.tests) runUnitTests()

   # Your code here...
}

The above code loads in from our current working directory the file string-utils.r:

# string-utils.r

# Load the unit testing package
require(RUnit)

# Function to trim a string
trim <- function(str){
   if (class(str) != "character"){
      stop(paste("trim passed a non string:", str))
   }
   
   return(gsub("^\\s+|\\s+$", "", str))
}
test.trim <- function(){
   checkTrue(trim("  abc ") == "abc")
   checkTrue(trim("a b ")   == "a b")
   checkTrue(trim(" a b")   == "a b")
   checkTrue(trim("")       == "")
   checkException(trim(3), silent=TRUE)
}

We run our top-level function using:

rm(list=ls(all=TRUE)); source("main.R",echo=FALSE); main()

That line removes all variables from the workspace, creates the functions in the above blocks of code and calls main(). The first thing main() does is call runUnitTests() to run all functions with names that start with “test.” in all R files in the current working directory. Those are our unit tests.

For example, one of those unit test functions is test.trim(), the function shown above that checks that trim() is working as it should. Note how test.trim() not only checks expected return values but makes sure that trim() throws exceptions when it should. And what does trim() do? The examples in the test code should make it clear—which is why I like to keep the unit tests together with the functions that they test.

The above is the briefest of introductions to a huge topic. I could say a lot more about, for instance, test-driven development, refactoring and code coverage. But my aim here is not that ambitious. If you’re an analyst or a statistician, chances are you haven’t previously heard of unit testing. If that’s the case, I merely wish to suggest that you give the above a try the next time you find yourself coding in R. Unit testing really is worth the effort.

Cloud & Big Data

The PMSI ‘What is?’ Series. Designed to answer basic questions surrounding business intelligence, analytics and strategic insight. These short video blogs will help the novice, support learning and even challenge the more advanced, but however they’re received we hope they’re enjoyed. PMSI, sharing what we know.

“What is?” Series – Cloud & Big Data from PMSI Consulting on Vimeo.

Cloud & Big Data

A Pathway To Pricing Zen


Pathway to pricing zen
Download – Pricing Zen.pdf

Article By: Adam Slader

Energy procurement consultants: Why is trade interested?

Earlier this month French building engineering giant Schneider acquired M&C Energy, the UK’s largest energy procurement consultancy (terms were not disclosed but it is rumoured to have paid around £90m). The deal was Schneider’s second major acquisition in the energy management/procurement space – it acquired Summit for $268m in 2011. This latest move comes just months after MITIE acquired Utilyx, another large UK procurement consultant, and about a year after Balfour Beatty acquired Power Efficiency. Consolidation of the procurement sector has been on the cards for a while; what is interesting about this current wave is that it is being led by trade not Private Equity. Why the sudden interest?

Click to Enlarge

The contention is that it reflects a broader trade interest in energy services. In the UK and US in particular a broad set of players are increasingly competing with each other by offering services that reduce energy consumption and/or carbon output. These players will lead the consolidation of the energy services sector globally and it is this trend that explains the current interest in procurement consultants. Players ranging from FM companies, to building managers, equipment providers, renewable energy suppliers and others will seek to position themselves as a one-stop-shop for reducing their clients’ energy use. As more firms jostle for this space they will find themselves increasingly competing with each other. The varied trade interest in energy management/ procurement consultants is an example of this – and this will continue. Giants like Honeywell and Johnson Controls have yet to make a serious play in the market – it would be surprising if they didn’t. In the public sector, construction and M&E firms with experience in PFI deals are likely to make a play for energy performance contracts. This will see them invest their own capital in energy savings schemes and be paid out over time from the savings the organization in making on their energy spend Specifically the interest in procurement consulting companies is driven by a desire to own and manage energy data. If you want to sell a product or service that reduces energy use, you must show how much you will save vs current usage, and demonstrate the savings by capturing data over time.

Procurement consultants, specifically those that have been snapped up by trade players do three things; they advise companies on when to buy energy contracts, they make sure a company has been billed correctly and they collect, manage and report on energy data and provide advice on energy saving options. The first two are high margin market niches but it is the last point that explains the trade interest. For Schneider, MITIE, Balfour Beatty and a host of other major trade players in the UK, US and elsewhere a key part of their service offering is a promise to deliver energy savings – energy data is critical to this

Click to Enlarge

This consolidation of the energy services space makes procurement and energy management businesses attractive, even if their procurement offering is non-core to those trade players doing the consolidating. In the procurement space, most of the scale players are now in trade hands. Those independents that remain are more procurement consultants then energy management businesses – and tend to have a more SME focussed client base – both of which dilute their appeal as bolt-ons. This is symptomatic of the energy services sector more generally. Trade players are keen to buy good businesses, but the sector is immature and there are only a limited number of players fitting their investment criteria. This should open the door for Private Equity.

Disclosure: PMSI have worked with AIM listed energy procurement and management business Inspired Energy Plc over the course of 2011 and 2012. We are also a shareholder of Inspired Energy

Written By: Jake Tyler

Is Outsourcing The 5th Generation Programming Language?

I think it’s fair to say that I am something of a sceptic when it comes to outsourcing IT. In fact, I wrote my university dissertation on the subject and concluded that it only works for static IT functions (such as running a telephone system) and even then it is not without some significant flaws. It may therefore come as a surprise that I am a recent convert to the potential for outsourcing some of the most dynamic software development undertaken by a company.

The reason for this change of heart is a change in outsourcing itself. My dissertation was based on the outsourcing proposition of the nineties which was typically based on a handshake between a large corporate and an outsourcing giant. A director would decide that their IT department was a black hole for overheads and that the numbers offered by the outsourcing agency were considerably more favourable. They would sign a contract, sit back, and wait for their bottom line to soar. Sadly, many are still waiting.

Is Outsourcing The 5th Generation Programming Language?

Is Outsourcing The 5th Generation Programming Language?

The traditional model of outsourcing is still out there, and my attitude towards it remains unchanged, however I have recently been introduced to a new way, and it seems much more powerful. New websites offer the ability to find and recruit developers on an individual basis for modules of work as small or large as the hiring company desires. They act like an international IT skills dating agency, allowing overworked IT departments to find underworked professionals from around the world with the exact skills they require for a specific task. The sites offer facilities to ensure that the hired professional can only bill for the time spent working, and that they receive fair payment for that time. This allows both sides to work in a very flexible manner which suits them both. All this is a far cry from the traditional outsourcing model.

You may wonder why, in the title of this blog, I compare outsourcing to a programming language in itself, and for that we need a (VERY) brief walk through the history of programming languages. Originally computers could only be programmed with 1s or 0s but soon this process was simplified with what have since become known as 2nd generation languages, most notably Assembler. From this an additional level of abstraction was added and 3rd generation languages (3GL) such as C were born making programming faster and easier. It is in 3GL that most programming happens today. In the eighties and nineties the idea of 4GL was popular with the intention that for specific areas of operation the programming language could be so abstracted that a non-programmer could do it. There was some success with this which naturally led onto the concept of fifth generation languages (5GL) where a non-programmer sets required constraints and the algorithms are generated for them.

In its truest sense 5GL is heavily rooted in Artificial Intelligence research; however its aspirations are achieved through modern outsourcing techniques. I write tasks into project management software in plain English which a team of remote developers pick off and complete one by one. So I can write “I would like my form to be blue” and – after a short wait – the form is blue. It certainly feels like a fifth generation language to me.

Written by: John Kiernander


PMSI Consulting Twitter


Follow

Get every new post delivered to your Inbox.

Join 802 other followers

%d bloggers like this: