Sunday, December 19, 2021

Babel Tower Programming

In the ancient story of the Tower of Babel, all of Humanity is unified in a common language.  They begin to construct a great tower which, in some variations of the story from other civilizations, might save them from possible extinction from another Divine Flood sent by an angry God.  Construction of the tower is abandoned when God disrupts the ability of Humanity to communicate by dividing their shared language into many.

Babel Tower Programming is what I call a form of Polyglot Programming in which the use of multiple computer programming languages impedes rather than promotes progress.  An example might be using one programming language for front-end development and a separate for the back-end when the same language could be used for both.  One sign that you are experiencing the impedance of Babel Tower Programming is when software developers are choosing their feature development tasks based primarily on which programming language will be used.

The solution, which I call the Incantation of Nudimmud, is to adopt a policy which requires that any new software features be developed in a common programming language.  Legacy code developed in the abandoned programming languages can be gradually phased out using techniques such as the Strangler Fig Pattern.  As Babel Tower Programming is a form of Technical Debt, the decision to move to a single language usually requires some cost analysis and both bottom-up and top-down support.


Saturday, September 25, 2021

Head First Agile

I just finished reading from cover to cover the book Head First Agile: A Brain-Friendly Guide to Agile Principles, Ideas, and Real-World Practices. Even before I finished reading it, I started recommending this book to my co-workers. I tell them that they can get almost everything they need to get started in Scrum by reading just the first four chapters.

I own a number of books in the Head First series. Like the For Dummies series, the "Head First" books provide fun introductions to a variety of topics. Unlike the "For Dummies" series, you do not have to explain that you are not trying to insult someone when you recommend one of their books.

rugby scrum

Thursday, July 23, 2020

Role, Goal, and Dole

In agile software development, a user story traditionally follows this template:
As a [person in a role], I want [some software feature (the goal)] so that I can [achieve some benefit to the user or business].
Some years ago I came up with an easy to remember rhyming mnemonic for this, "role, goal, and dole", where I use dole as a synonym for benefit. The user story template then becomes:
As a [person in a role], I want [some goal], so that I can [achieve some dole].

2021-09-25 Update

Recently I have learned that some are suggesting using Who, What, and Why as the user story template inputs. I like this better as there is some ambiguity in the distinction between "goal" and "dole".

Tuesday, July 14, 2020

Jigsaw Puzzles

For most of my career as a software developer, I have used statically typed programming languages such as Pascal, Ada, Java, and TypeScript.  Recently, however, I briefly dabbled in using the dynamically typed languages JavaScript and Python.  Debugging all of the run-time errors in the dynamically typed code reminded me of my earliest years of programming in BASIC in which I would have to spend time searching for misplaced commas.

When I switched from JavaScript back to TypeScript, I sensed an increase in my productivity and my confidence in the correctness of my code.  To explain to a layman the difference between programming in a dynamically typed language as compared to a statically typed language, I came up with the following analogy.  It is the difference between assembling a jigsaw puzzle in which all of the tiles are square versus one in which the pieces are of a variety of different shapes that can only interlock in the correct way.

Tuesday, June 30, 2020

CroftSoft Agile Glossary

A tongue-in-cheek glossary of agile software development puns that I have invented over the years:
  • Au Pair Programming: a variation on pair programming in which an experienced software developer is paired with an inexperienced software developer
  • Scrummerfail: a combining of an agile software development methodology such as Scrum with waterfall development, widely known as "scrummerfall", but taken to the extreme in which the entire development process is waterfall but all of the terminology associated with the process is based on agile
  • Slog: a sprint lasting more than four weeks
  • Technical Deficit: an ongoing accumulation of technical debt that is passed on to future generations

Saturday, March 02, 2019


Back in 2011, I created my first Android application, CroftSoft QuickStudy.  Recently I started working on a hybrid mobile application using the Ionic Framework.  The software is currently deployed as a web application at

Like CroftSoft QuickStudy, Lorelock lets you do flashcard drills on atomic symbols and United States capitals.  Lorelock also includes boating terminology since boating is a new hobby of mine.  I will be adding more study topics and software features as time goes on.

Saturday, April 14, 2012

MATLAB vs. Java

Thursday, March 29, 2012

ERNST v1.1

For some time now, I have been working on updating the Event Related Neuronal Simulation Tool (ERNST), a Java-based discrete event computational neuroscience (CNS) simulator. ERNST was developed and is maintained by the Computational Neuroscience Laboratory led by Dr. Ernst Niebur at the Zanvyl Krieger Mind/Brain Institute of Johns Hopkins University (JHU).

I am pleased to announce that the new version with my code contributions is now available for download and that it has been released under the terms of an Open Source license.  I hope to follow it up with additional releases soon.

Monday, November 14, 2011

CroftSoft IntFire v1.1

I put out a new release of CroftSoft IntFire to accompany my tutorial presentation on Exponential Decay Current Synapses.