Skip to content

Where Are You Thinking? Part 2

March 30, 2015

Yes, that is exactly what I mean — Where, not what.   This article seeks to get you thinking about your thinking. Be self-reflective and greatly benefit.

This is the second article in my “Where Are You Thinking” series.  The initial article was written in December 2013 —

The first article aimed at getting you to think about your thinking in regards to what level of abstraction you are thinking in terms of at any moment – Concept Level, Interface Level, or Implementation Level. And it encouraged you to use this awareness to consciously adjust “Where your thinking is” to the needs of the task at hand. Not thinking so much about implementation details when engaged in high level design, for example.

Part 2 of “Where Are You Thinking” is about historical time – Are you thinking in terms of the concepts of the past, present or future?

As in Part 1, the goal here is to give you conceptual tools to aid you in focusing your thinking so you and your team can be much more productive in doing software engineering that produces lasting value.

In February 2015 I posted a blog “Waves of Technology Change: Grab Your Surfboard or Life Jacket?”

That post identified a number of different technology waves that are currently in various stages of washing over us. Some of these waves are: the Mobile Devices Wave, the Cloud PaaS Wave, the Big Data Wave, the soon to hit IoT Wave, plus the very long wave length Distributed Computing Wave. Stepping back, the Mobile Devices, Cloud, Big Data, and IoT waves can all be viewed as aspects of the Distributed Computing Wave that also encompasses Service Orientation.

The “Waves of Technology Change” article got me thinking – While some of the concepts and ideas I regularly use as a software engineer are useful in the current environment, others are solidly rooted in the past and out of sync with recent changes! I call them fossil concepts — concepts applicable to yesterday, but not to today or tomorrow.

At one time in the past my current fossil concepts were highly useful. But not now. The rapid advance of the Waves of Technology Change in the past few years has made some of my “trusty old friend” concepts quite out of date. In fact, thinking in terms of fossil concepts can quickly get one in to trouble when developing new software systems.

Here are some of the things I’ve learned to do to identify my fossil concepts, and find good replacements for them.

First, I completely accept the fact that in the past my fossil concepts were an important part of my professional software engineering process. And I also accept that I need to keep my “operating set” of software engineering and technology concepts current in order to produce good value. That is the way life is these days.  Fighting technology change does not work very long.

Second, I identify the areas having the biggest and most far reaching changes. These areas point to where I need to look at my concepts to identify fossils. The “Waves of Technology Change” article is pointing me at the following areas that are my highest priority right now. However, I am sure there will soon be other areas requiring this scrutiny.

What are the most far reaching areas of technology change in your work that you need to learn about?

My 2 top priority areas of the biggest and most far reaching technology changes are as follows:

1.  Distributed Systems and Service Orientation, including Mobile and IoT Devices

Here, lots of new concepts are needed to effectively deal with the massive changes that are taking place. Specifically, we need to start thinking in much larger terms than just Apps alone. Concepts like Rachel Hinman’s “device ecosystems” interacting with each other through various “touch points” in the overall solution architecture are now highly useful, rather than focusing upon a single App. That came from her 2012 book “The Mobile Frontier” a review of which is at

Monty Montgomery has a great article about thinking in terms of Systems rather than just Apps.  And it has some really, really useful high level diagrams! Escaping Appland

For my part I find the following concept useful — It pulls in both Rachel and Monty’s ideas:

  • Apps are directly used by people, anywhere. Apps use Services, anywhere. Services also use other Services, anywhere. Systems are the network of inter-dependencies created by Apps using Services, and the Services using other Services.
  • And you can superimpose your own boundaries or mappings of other concepts on this network to suit your own purposes.  Here I am thinking of the vital ideas concerning the granularity of services and the fractal nature of software noted by Monty Montgomery in his article cited above.

2.  The Cloud

There are lots of new concepts about the Cloud that we need to incorporate into our thinking.  Examples are:

  • Eventual Consistency, Transient Faults, and executing Error Compensation use cases rather than relying on distributed transaction rollbacks.
  • The declarative approach Azure App Service uses with APIs, Logic, and WebApps.  Is there a new programming model emerging here?
  • The availability of almost unlimited compute power to do tasks or sift through oceans of data.
  • Plus lots more to come.

The Cloud is also a place to watch closely for the emergence of disruptive technologies – game changers.  The associated concepts and ideas will be vital to know about.

The third way I identify my fossil concepts and find replacements is to do a thought experiment, attempting to project my thinking 5 to 7 years into the future. Here’s the drill:

Imagine you are on a team just beginning to design and build a new App and its supporting Services (a System). And, the technologies to be used have not yet been selected. It will take about 1.5 to 2 years to build the system and deliver it. So we’ll deliver in 2017.

Now ask this question: “Five years past delivery (2022) how easy will it be to readily find developers highly skilled in the technologies the system was built with?” Such developers will be required to maintain the system for a number of years into the future, till the end of the life of the system.

At that point, seven years will have passed since the technology was selected. Thinking this question through for UI technologies, Server technologies, database technologies, etc. is a thought experiment that will teach you a lot.

And please do not forget to consider free open source technologies versus technologies supported by vendors. Will you have any trouble finding developers up to speed on using a 2015 “in fashion” free technology seven years down the line?

The current period has some of the most interesting technology changes occurring since software development started. Your “fossil concepts” have served you well, but at some point they get in the way. Learning about the new technologies and their underlying concepts can be a fascinating and rewarding experience.

George Stevens
Creative Commons License

dotnetsilverlightprism blog by George Stevens is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Based on a work at

Leave a Comment

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: