As a society based in the post Industrial revolution, where productivity and maximising profit rule the landscape and dictate our daily lives. We strive for “Efficiency” in our work lives and even our daily lives and many of us never really think about what we’re doing and the costs of our search for better, faster, more!

Efficiency vs Expediency.

Years ago I was developing a database, the demands placed upon the database were simplistic and basic. In essence it was a list, used to check the availability and validity of numbers. The idea was to wash a random bucket of numbers to see if they fit the criteria set by the customer. These numbers could have easily simply occupied a simplistic table format and been fine. The customer would have been happy and content yet, I found the basic minimal number of columns, data points inappropriate for the customers future needs.

Yes, I opted for Efficiency over Expediency. The reason was I have a scientific background and we never throw anything out, especially data. The data is only as good as your mindfulness and awareness while collecting it. Many a scientific study has suffered and been less important because basic and minor data was not collected during the experiment. In science I would never disregard any data which may be needed later. Anticipating future data needs and possible uses, is key to Efficiency.

So I was predisposed to put myself in the customers shoes and try and anticipate possible future data requirements. The upshot of this was that for very little extra effort, an extra few columns and a few extra lines of code; the customer could benefit from future data mining and analysis.

The effort required to develop the database was the same !

So why do we choose Expediency over actual Efficiency ?

The daily activity of trying to finish our work items steers us towards Rapid Solutions which seem Efficient; yet this very Expediency often costs many times more with rework, rebuilds and even the complete redevelopment when parameters shift as future needs become apparent.

The old saying “A stitch in time, saves nine” springs to mind. The mindfulness and mending of a small tear prevents the need for major reworking and effort.

So next time, ask yourself is this done for Expediency or actual Efficiency, and hopefully we can get a head of the curve and put our future efforts into better things than Rework.

The way I see this is that most of us try to do the best we can but a few remind me of the Ferreters of old who would let go any pregnant female rabbits so they would get work next year, to reduce the rabbit population.

Expediency has become our efficiency.

Action and Activity

Action – doing something that will result in a valuable outcome

Activity – doing something – regardless of the result

We tend to think that if we are not doing something then we are not being productive – we need to be cautious of doing things because we think that more is better. There are many examples where more is not better – even drinking water. We need to stay hydrated and we think that drinking more water is better for us – but over a certain amount, it can cause toxic and dangerous effects on our bodies.

Since the discussion with Tobbe and Steve recently, I’ve been reflecting about times in my life when I’ve mistaken activity for action – there’s more than I’d care to admit at this point.

We should check what we are doing and ask ourselves – is it activity for the sake of activity or are we taking action and making progress – whatever the endeavour? To answer this we need to understand purpose.

One of my favourite things to check is the purpose of reports that are being generated. I’ve seen situations where there are 100’s and 1000’s of reports – and no one really knows how they are being used. The activity version of a report, likely came from an initial need to make a decision – let us imagine that we needed 3 types of data to make that decision – so we ask for a report every week with those 3 types of data. And then – due to the ephemeral role of data in decision making – we quickly discover that we need another 2 elements of data. Very quickly, we can have a report being generated every week with lots of data elements. A lovely amount of activity – but what if we are not making those decisions any more? And there are better ways to gather data when we need to make a decision – reports can be very . inefficient.

Whatever we are doing, ask about the purpose of it. Is it activity for the sake of doing something? (And therefore can we stop doing it?). Or is it action? (And we should continue).

Activity vs Action.

In our modern world we are constantly expected to rush and frantically finish our tasks in the name of efficiency. Yet often we find that activity does not translate into the desired action or outcome. It is this “Rush to Action” which is the actual issue, often leading to poor outcomes and undesirable states of mind.

So why do we do it?

The basic fact is that we generally can not distinguish between activity and action. The realm of busywork is populated with people filled with a sense of accomplishment. The simple fact is we are driven by the evolutionary reflex of Fight or Flight. This predisposes us to rapidly respond by reaction, it is this proclivity to activity which makes us feel a sense of control when we are in activity. The difference between activity and action, is often only observed in the final outcome therefore it is very difficult for us and any onlooker to distinguish the two.

Doing things make us feel empowered and better; we feel in control and have a sense of fulfilment because we are doing something about it. Yet this activity is a hollow victory, if the end goals are not reached. The true reward is when we attain our objectives and goals.

If we take the real world example of Cave Diving, a highly technical and inherently dangerous activity, which happens to be fun and scary. Imagine you are diving in a sinkhole cave system and before you know it, you realise you’ve reached the bottom and have lost your bearings and the rest of your group. Initial instinct would be to begin searching for the others and this naturally becomes more frantic as time passes. Although this is a natural and understandable reaction, it usually is not the best course of action. This initial behaviour which manifests itself as activity, will often cause greater problems. The reason frantic activity in such a situation is not a good idea is that you will stir up any silt and mud off the bottom, this will muddy the water and reduce your visibility to the extent you can loose your orientation to the stage where you don’t even know which way is up.

Activity is not always the best action.

So in the above example reactionary activity is highly problematic but even in this example calmer heads and cool action will prevail. Surrounded by zero visibility, not knowing which way is up many would feel lost yet the fact that the bubbles you expire using SCUBA gear will always rise actually will help you identify which way is up. This simple fact and calm action can and will safe your life.

This predisposition to activity can and often does muddy the water when we are trying to determine the actions necessary to attain our goals. Running around like a headless chicken, is an apt description because we loose our senses in the frantic rush. We don’t see, don’t hear and can not clearly understand which are the best options, opportunities and course of actions.

The Factory Analogy for Software

This is a reflection piece working on similar themes to a post by Tobbe ‘The Software Factory — an idea wrong enough to be useful’

When we think about automation, it is easy to imagine factories. The standardisation of work that was brought in with ideas such as The Principles of Scientific Management by Frederick Winslow Taylor allowed us to automate jobs that were previously performed by craftspeople. So it is pretty easy to think of software development as like a factory because we are automating functions – but the ‘goods’ we are producing are transactions – not physical items.

I like Tobbe’s idea of the flexible factory line where we have teams and architecture that support delivering software in more flexible ways. Most of us do not think about factories like that. I had a part-time job packing biscuits in a health food factory working my way through university. So when I think about factories, I am thinking about highly repetitive (and boring) tasks that are getting automated.

Where we trip ourselves up is using factories as an analogy and mis-applying the metrics that are useful for high-volume repetitive tasks to tasks that are less repetitive. Even though I was manually assembling the boxes for the biscuits, I would pride myself on finding more efficient ways to do this – and shaving a few seconds off this part of the process (which I did at the start of each shift) was useful as well as rewarding. This is where tools such as control charts, six sigma and paying attention to changes in trends is very useful. The production version of a piece of software is similar to a factory in this way – I really want to know if my many transactions per minute start to take even a tiny bit longer to execute – this could indicate a problem that is easy to fix and avoid a big outage. I once looked after a system that lost sync between the 2 databases and it took 24 hours to re-sync (with degraded performance for the end users over that entire day). We made sure that when we found out what had caused the issue, we watched the early warning signs with a lot more rigour and I’m happy to say that it did not happen again.

Installing new code is like changing the setup of a factory. In my health food factory example, it might be automating the biscuit packing job that I did. I imagine that if we automated the whole process, then the factory might be offline for a few days – losing a few days of production and therefore sales. Taking an agile approach, perhaps we just automate parts of the process in one go, such as starting with the box assembly. I’m not sure how big a machine to assemble cardboard boxes would be, or how much it would cost – but we could get in the experts who have done it before and they could tell us. We might use project metrics such as on time, scope and budget to ensure that we are not causing too much disruption to the factory production and sales. We can also go back to the production metrics to see if we are making a difference to cycle or lead times, once we have installed the new parts. There might be a way to install some of the packing automation without disrupting production and we would need to design the factory in a different way to the one that I was working with if we needed to have continuous production while upgrading the machinery. This example is like the release management process when we deploy new software into the production environment – we should be using metrics that allow this process to become more efficient and project-based metrics would be appropriate – especially if we add the quality check about the impact the change has to the production environment.

Software development is like deciding what we need to automate and then designing the machines to perform that automation. If no-one had built a box assembler before, then we would need to observe the manual process, the steps surrounding it and then design the machine. We would need to take into account how it would be maintained – this is a bit like the architecture role in software design – in the factory, we would not be making large machines out of gold – it is too soft, very expensive and would be hard to maintain – but it would be nice and shiny. In software design – how do we make sure that it integrates well into the existing software and requires minimal operational intervention? We do not want to be having to re-index the database every day – just like we would not want to have to service machines every day.

What if we decide to produce a different type of item. In the health food factory we also had lines that produced pies and cakes – which were separate to the machinery that produced biscuits. What if the company decided to manufacture something different, it could be a small difference such as a new type of biscuit or a large difference might be to manufacture coffee mugs. Whether there are sales out there for a new biscuit or coffee mugs is very similar to identifying if there are needs for new software features and we can use the same human centred design or user experience toolsets for physical and virtual things. Once we’ve identified the need we then need to decide if we should start a separate production line or modify an existing one. It is hard to imagine being able to manufacture pottery mugs and biscuits on the same factory line (and health regulations would likely not allow it) – but I have seen people try and add new functions to a piece of software that was never designed to do that new function. An example is where we were asked to add a fraud-handling function to an application which would have incurred a huge cost (in time and money) when we already had a separate system that could do what was required with much less cost.

How we measure the effectiveness of new items in a factory or features in software is very different to how we measure the efficiency of the production environment for both. We look at how sales are progressing, the level of interest shown by Customers etc. At this point the analogy is breaking and becoming less useful – the key point of this post is that using a factory as an analogy for software development can be useful in the ways described. We need to remember that an analogy is only saying that elements of software development and operation are like a factory – and we need to be careful that we do not equate building software with assembling items on a factory production line – especially if we then try to apply factory production metrics to software development.

How much Transparency?

The picture is an analogy about transparency – I want to see the person step out from behind the pillar – but I really do not want to see into them (their skeleton – or even worse, through their clothing). I’m also quite confident that other people do not want to expose such an extreme level of transparency.

So what is the ‘right’ level of transparency and why to we seek it?

I’m sitting in my lounge room and I can see out the window – it is a frictionless way for me to observe the front yard (through the transparent glass). If there was no window, I would need to go out the front door and walk around the corner to see the front yard – it requires effort and I would need to justify doing it.

At the risk of abusing the window analogy, perhaps what we mean by being transparent about things in the workplace is that we reduce the effort to find out and we also eliminate the need to justify why we want to know. It can be very useful and pleasant to observe things – we can feel happy seeing that the environment is as it should be – and we can take action when things are not ‘right’. If my cat starts to growl looking out the window – there is probably another cat in the front yard and I can choose to chase it away or not. If neither of us could see it (due to the lack of a transparent window in the wall), we would never have known the other cat was there and we would have lost the choice to act.

We need to be careful about where we seek transparency – I do not want my whole house to be made out of glass – and we have curtains over windows when we want privacy.

In the workplace, it would be great if we could see everything without any effort and justification – but it can feel very threatening. When we feel threatened, we want to protect ourselves – so reducing effort in one way (frictionless observation – transparency) can increase effort in another way (trying to close the curtains or cover up our skeletons).

Be careful what level of transparency we ask for – it can be a good thing, and just like other good things (such as water and oxygen), too much of it can cause damage.