2021 articles

Entrepreneurship A La Deming

According to W. Edwards Deming, for an organisation to succeed it needs to incorporate a system of profound knowledge consisting of:Appreciation for a systemA theory of knowledge Understanding of variationPsychologyThis system of profound knowledge is a means for acquiring knowledge external to the organisation to become …

More On Management

I've previously written about management. While dwelling on W. Edwards Deming's ideas about the system of profound knowledge I can't help but conclude that management is the art of improving a system by coordinating the activities of a team towards continous improvement. One of the elements of the system of …

Design vs Engineering

Design has to do with human requirements. Engineering has to do with technological possibilities.

Competition vs Cooperation

Competitionis for losers - Peter Thielnobody wins in a price warwhen producers are forced to compete the divert attention from innovation to survival is pessimistic is a zero-sum game Cooperation makes for a bigger pie - better a smaller piece of a bigger pie than a big …

Interfaces and Models

We all want happy customers but more than that we want high quality even when the customers are yet to beat down our door. There are two avenues where quality lives: front office and back office. Your customers never see your back office but they feel its effects through the …

Execution Marks the Difference

Everyone had great ideas. But great ideas are really not worth much on their own. True value lies in the capacity to exploit great ideas. Great countries are those that live on the cutting edge by executing on great ideas. Great companies are those that harness great ideas, either internally …

Software as Media

In The Software Studio: A Software Production Process, I proposed the idea that we should think of the software production process in much the same way that movies are produced: with distinct phases through which the production proceeds. The more I think about it the more I realise how …

Designing with Eternity in Mind

The purpose of analysis is to discover the right design. It is possible to successfully execute the wrong design. When this happens, any success will have an expiry date on it because the inevitability of change will expose the inadequacy of the design. Design really is a life and death …

The Third (And Perhaps Most Important) User

I've always assumed that software should be written for two principal users:the end user in the domain, andthe programming user writing applications for the domain. But it's just occurred to me that in numerous cases there is a third implied user: the administrative user. In many cases …

DDD?

Yes, DDD! It stands for documentation-driven design. The goal is to have the documentation capture the domain usage for the respective users. Typically, documentation is written for the end, development and administrative users. Therefore, if the respective users find the documentation meaningful in the absence of running code then …

Intelligence: The Goldilocks Zone

It is possible to be too intelligent for your own good. When one is too intelligent they tend to be deployed where others can make the best use of them. This typically means that they will end up working in isolation on things that others are incapable of working on …

What does it take to create?

Over the last few days, I've struggled mightily to concentrate on getting my work done. This is mainly because we have a system that needs a lot of babysitting and this means that every single minute there is an email or Slack message vying for my precious attention. I find …

Monte Carlo Thinking

Sometimes it's hard to be creative and your only solution is to resort to randomness. By traversing random data you can prime yourself into expanding the scope of your thought. This is Monte Carlo thinking. The name is obviously inspired from the corresponding statistical technique typically applied in Bayesian modelling. …

Decouple Yourself!

In an earlier post titled "Show Me Your Hands!", I discussed that a great ideal to work towards is to be able to walk away from your code and still have it operate as it should. Your colleagues should be able to carry on where you left off without …

On Working with 3D Data

The ideas are straightforward; the problem is how these ideas are expressed through various programming APIs.The cast of characters: space handedness, image coordinate systemsDiscrete vs continuous spacesDomain issues: MRC filesGranularityConsider an arbitrary 3D dataset. We rarely think of 3D data apart from some space and …

"Ready, Fire, Aim!"

"Ready, fire, aim. Do it! Make it happen! Action counts. No one ever sat their way to success."Tom PetersSometimes the exhilaration of solving a problem is so exciting and pressing that there is no design to design. You would like to see a solution now - however ugly. …

Ensure PyPI Publish Action Does Not Fail Because of Wrong Version

Here is the scenario: you run a Github action which automatically publishes to PyPI on new tags (I'm yet to figure out how to publish on push only). Since there are two places to label the new release (the tag and the setup.py file), it is very easy to find …

Change Is Your Biggest Risk

Change is the law of life. And those who look only to the past or present are certain to miss the future.John F. KennedyIf there is any guarantee that any project should anticipate it is CHANGE. You can be 100% sure that something will change. You might not …

Runtime

Every computation occurs in some runtime. The challenge is to accomplish complex tasks using available runtime even when it is clearly impossible to use a single runtime to complete the task. Therefore, there is a need to atomise the complete task into a coherent sequence of runtimes to accomplish the …

Simple Communication Between Threads In Python

I've just discovered the threading.Event class, which has the methods set() and is_set() to communicate between threads. There is also a wait(timeout=None) method, which blocks until the flag is set.import os import sys import threading import time # this is where the real work is done def function(duration, e): …

Management Is…

Process development, maintenance and optimisation.

The Software Studio: A Software Production Process

"The Fog Creek approach really is that programmers are talent... the programmers here are like the stars and the directors of a movie." Joel Spolsky on Fog Creek SoftwareHaving worked over the last few years on a relatively unstructured project, I have a growing angst to elaborate a clear …

Producing Software: The Myth of the Life Cycle

Every time I read about how to produce software I invariably come upon the phrase 'software development life cycle'. What is cyclical about it? It's confusing and should not be referred to this way. It's almost as if once software is delivered the production team go back to the begin …

Code is Movement, Architecture is Direction

There is a recurring theme in my thoughts at the moment. I've been thinking about what it would take to sign up on one of the freelancer sites like upwork or freelance or fiverr. The thought of making an extra buck with my 'extra' time (I don't really have any …

Writing Quality is Domain-Bound

There is no such thing as good writing apart from a domain. Writing is thought expressed and for it to be excellent in and of itself, divorced from any domain, is ludicrous. This also means that, though one may be regarded as a prodigious and proficient writer in some …

Coding as Exploration

Consider this article as a brain dump. One day it will be refined..."Software is not building. It's not construction. It's design. And design is like exploring a space of possibilities and what all the possibilities are, and you don't know how long it's going to take. It's like science. …

Teamplayer?

This is a raw dump of a swirl of ideas running through my mind. If they are incoherent it is because I'm still in the process of organising them.The vision of teamwork is accomplishing more than what a single individual can accomplish.If you're like me, it is rare …

Make Change A Core Feature

You haven’t designed well if you haven’t accounted for change. You can spend ages designing the best software but everything can be thrown down the toilet with a simple unanticipated changes. This is the reason I have a growing respect for the idea of emergent design.

Draft CLI Architecture

Here is a draft architecture that I have been working with for CLI applications. It is not complete because it has some holes in it. The whole idea is that it is built will layers each of which enjoys the services of the layers below it. Personally, I think there …

Think Process

Process is more valuable than product. Here is why.What is the true value of the world's best companies? Obviously it is not the products they sell since they relinquish them once they produce them in exchange for cash. Rather, it is total ownership over their production process that gives …

How to Move Fast in Software

"Take time for all things: great haste makes great waste."Benjamin FranklinWho wouldn't want all their features implemented immediately? It depends. How long will this software be used for? If it will be single-run code then nobody cares because it will not need any maintenance and we can always …

How to be 'productive'

“If you want to go fast, go alone. If you want to go far, go together.”African ProverbThe solo developer can appear to cover far more ground than a team until the rest of the team needs to contribute. Only then will it be clear how coupled the developer …

Career Progression in Software Engineering

ProgrammerA programmer knows how to turn user requirements into code. The programmer should have adequate experience but still need to accrue experience in producing high quality code.Software DeveloperA software developer is a programmer who has learned additional professional skills to turn user requirements into code with a …

Declarative vs. Imperative

Most programming languages are designed to be applied imperatively i.e. the programmer has to lay down the sequence of steps to be taken to modify the input to the required output. This lends itself quite naturally to algorithmic thinking. On the flip side, declarative design is built around the idea …

The Key to Great Design

...is good boundaries.

Python Exit Codes

~$ python Python 3.7.4 (v3.7.4:e09359112e, Jul 8 2019, 14:54:52) [Clang 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> os.EX_OK 0 >>> dir(os) ['CLD_CONTINUED', 'CLD_DUMPED', 'CLD_EXITED', 'CLD_TRAPPED', 'DirEntry', 'EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER', 'EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', …

Hardlinks: Fun facts

First we will create a discardable directory calls rm.dir into which we shall add two directories: dir1 and dir2. ~$ mkdir rm.dir && cd rm.dir ~$ mkdir dir1 dir2 Now paste some rubbish into a dir1/file1.txt (find your least favourite website and copy and paste everything):~$ cat > …

Simplicity

The essence of simplicity is economical i.e. simplicity can only be accomplished through economical activities. By ‘economical’ I mean characterised by the academic sense in which we allocate scarce resources that have alternative uses. There are only four such resources that exist: space, time, matter and knowledge. Everything …

What Architects Do

If you are interested in building a house, unless you are an architect, you would do well to consult an experienced architect. You might have a good idea how your future house should look like but you wouldn't know much about how to bring together these various desirable elements into …

Generic Architecture for Interactive Application

There are four parts to any interactive application:core runtimeinput (optional)config (optional)output (optional)The beautiful things is that with this in mind you can now chain applications knowing which parts link to one another.

Digital Service Taxes are like...

Photo by Robert Gourley on Unsplash...taxing the unknown person at the other end of the line. They should apply equally to all kinds of consultants, physicians, experts etc ... anyone who willingly picks up the phone and charges a fee for a response. The term 'digital service' is actually …

On Knowledge

This is an exploratory article I.e. it will take a long time before I understand what I mean. Knowledge must be explored to be understood. Case in point is this article. I don’t know the full extent of the consequences but over time time a clear structure will emerge. The …