Skip to main content

Simulations are tools for fun.

If you want to learn a new skill, create a safe simulated environment in which to practice.  I feel this is a lost technique for most technologist.  Perhaps it is too easy for us to just start writing some new module in a new language just because we wish to learn.  We think that we will just solve the real world (work) problem at the same time.   I learned of this case recently.

A developer used their work environment to learn a new skill.   In this case the programmer decided to learn design patterns.  So to do this he started applying every design pattern he could to the application he was working upon.  Now, if you imagine this is a beginner at the technique of pattern application then you may imagine that he may have gotten a bit carried away.  And that is what I've heard happened.  Now the code has nice fancy patterns, some quite complex and many are used just to experiment with the pattern.  This happens to be code that is sold to clients, and the over exuberant use of patterns have made the code worse, and harder to maintain.  Quite the opposite of the intent of design patterns.  In fact had the programmer learned his subject well, he might have found that he was applying the 'cargo cult programming' anti-pattern.

What interest me is why this happened.  Why did the programmer feel the need to learn patterns.  Why did he apply them to the clients code base (application) while he was learning?  Why did he not have a 'safe' sandbox to learn and play within.  Why did the company allow this behavior - perhaps they encouraged it?

I think many of these root cause issues come down to a human need to learn, and that learning needs to take place in the appropriate place and context.  In this example case the developer had a context (the work environment and the companies application code).  But, clearly, this was not an appropriate place to learn this skill set.

What would happen if the developer had a sandbox that he could apply those skills he wished to learn and they after a few experiments with design patterns he would take that new knowledge to the actual work?  This is a concept used in so many other industries, yet in an industry where creating virtual worlds and models are our forte, we don't use them for our own learning.  We learn on our clients new application.  A common behavior pattern is to learn the next skill needed by gold platting the current application.

Why not have a simulation-lab where this type of learning may take place?

My sister-in-law is in town to do a sailing level II course (she is skipping the level I - so that she can get certified to go on a training cruise in a few months)  She has never really sailed.  She has studied the books, knows all the equipment names, parts of the sail boat, she can talk like a pirate.  But, there is some part of sailing that is experience.  Knowing which way the wind is blowing just by the pressure effects on the hairs on your body.  And the spacial relationships of the sail, boat, and wind - not to mention the difference in apparent wind, true wind, apparent velocity, etc.   Being expected to captain a boat for the first time can be a nerve wrecking experience.  Why not simulate this experience.

My wife created a mock up sail boat, a small model.  A cardboard boat and a mast with a plastic sail.  A little fan provides the all important wind.   Switch it on and the simulation is underway - the learning begins.  Sailing - like Scrum - is an empirical game.  In sailing one measures the wind and always adjust to the wind's force and direction.  Everything is relative to the wind.  They spend the afternoon learning to sail in the simulation of the apartment.  When the model doesn't provide the proper scale for the next lesson, a bit of refactoring on the mock up leads to the swiffer mop becoming the mast and the coffee table becoming the boat.  This time the model is complete with main sail and jib.  Now the simulation has taken on a complex relationship and there is no risk of capsizing or running aground.

When learning becomes experiential and fun humans retain more.  We don't just learn in our heads,  We use the whole body to process and store information.  Remember the reference to body hairs.  Yes, those tiny little hairs are how we know the direction and force of the wind.  We have to learn to process the signals they are sending and map that sensory information onto the model of how a sail boat converts wind into propulsion.  When a person has done this a few time, even if it is in a living room, they know how to sail.

So why are we in the high-tech industry not creating simulation labs?  Why don't we have a Matrix Construct, where we down load an application that needs some refactoring and a few patterns applied.  This simulation would not be the clients application code.  But a reusable learning environment.  If we value learning, and we better, because in the 21st century the modes of wealth creation changes - it is not how much you can produce, it is how much you can learn, and apply that knowledge.
1 comment

Most Popular on Agile Complexification Inverter

Elements of an Effective Scrum Task Board

What are the individual elements that make a Scrum task board effective for the team and the leadership of the team?  There are a few basic elements that are quite obvious when you have seen a few good Scrum boards... but there are some other elements that appear to elude even the most servant of leaders of Scrum teams.

In general I'm referring to a physical Scrum board.  Although software applications will replicated may of the elements of a good Scrum board there will be affordances that are not easily replicated.  And software applications offer features not easily implemented in the physical domain also.

Scrum Info Radiator Checklist (PDF) Basic Elements
Board Framework - columns and rows laid out in bold colors (blue tape works well)
Attributes:  space for the total number of stickies that will need to belong in each cell of the matrix;  lines that are not easy eroded, but are also easy to replace;  see Orientation.

Columns (or Rows) - labeled
    To Do
    Work In P…

Exercise:: Definition of Ready & Done

Assuming you are on a Scrum/Agile software development team, then one of the first 'working agreements' you have created with your team is a 'Definition of Done' - right?

Oh - you don't have a definition of what aspects a user story that is done will exhibit. Well then, you need to create a list of attributes of a done story. One way to do this would be to Google 'definition of done' ... here let me do that for you: Then you could just use someone else's definition - there DONE!

But that would be cheating -- right? It is not the artifact - the list of done criteria, that is important for your team - it is the act of doing it for themselves, it is that shared understanding of having a debate over some of the gray areas that create a true working agreement. If some of the team believes that a story being done means that there can be no bugs found in the code - but some believe that there can be some minor issues - well, …

What belongs on the Task Board?

I wonder about these questions a lot - what types of task belong on the task board?  Does every task have to belong to a Story?  Are some tasks just too small?  Are some tasks too obvious?  Obviously some task are too larger, but when should it be decomposed?  How will we know a task is too large?

I answer these questions with a question.  What about a task board motivates us to get work done?  The answer is: T.A.S.K.S. to DONE!

Inherent in the acronym TASKS is the point of all tasks, to get to done.  That is the measure of if the task is the right size.  Does it motivate us to get the work done?  (see notes on Dan Pink's book: Drive - The surprising Truth about what motivates us) If we are forgetting to do some class of task then putting it on the board will help us remember.  If we think some small task is being done by someone else, then putting it on the board will validate that someone else is actually doing it.  If a task is obvious, then putting it on the board will take vi…

A T-Shaped 21st Century Knowledge Worker

Knowledge workers in the 21st Century must have many areas of deep knowledge, while also be capable of collaboration across multiple other domains with dissimilar T-shaped individuals.  This description of a person is a metaphor.  Compare it to the shape of the "I" in the classic saying there is no "I" in Team.

I first read about Scott Ambler's term "Generalizing Specialist" - but it's so hard to remember the proper order of the words... get it backwards and it has an inverted meaning... T-Shaped is easier to remember. 
A generalizing specialist is someone who:
Has one or more technical specialties (e.g. Java programming, Project Management, Database Administration, ...). Has at least a general knowledge of software development. Has at least a general knowledge of the business domain in which they work. Actively seeks to gain new skills in both their existing specialties as well as in other areas, including both technical and domain areas.  General…

David's notes on "Drive"

- "The Surprising Truth about what Motivates Us" by Dan Pink.

Amazon book order
What I notice first and really like is the subtle implication in the shadow of the "i" in Drive is a person taking one step in a running motion.  This brings to mind the old saying - "there is no I in TEAM".  There is however a ME in TEAM, and there is an I in DRIVE.  And when one talks about motivating a team or an individual - it all starts with - what's in it for me.


Pink starts with an early experiment with monkeys on problem solving.  Seems the monkeys were much better problem solver's than the scientist thought they should be.  This 1949 experiment is explained as the early understanding of motivation.  At the time there were two main drivers of motivation:  biological & external influences.  Harry F. Harlow defines the third drive in a novel theory:  "The performance of the task provided intrinsic reward" (p 3).  This is Dan Pink's M…