April 11, 2023

Human Roles in Software

Basic End User

The basic end user of an application takes on the least amount of responsibility possible. Their main responsibility is deciding which data to input and then to input it. In a web app, the input that they give is in the form of clicking, scrolling and typing. As such their responsibility is to be familiar with common user interface elements. E.g., they are expected to know that three vertically aligned dots is a signal for more options, or that underlined/coloured text indicates a hyperlink.
They do not configure the application - they do not tell it how to behave.

Power User

The power user is someone who takes on the responsibility of configuring an application. They have more power than basic users because they have given the application more data than it needs to merely function, and the application in turn offers broader and deeper functionality. They may make a decision about how an application behaves, but may not change what the application itself is capable of. They are just a user who spends time in settings pages.
In programming terms, the power user is given control over some part of the application\'s state, but does not have the ability to write instructions for how the state will be processed.
Scripters (such as data scientists who script in Python) are often not engineers, but are instead just power users. A script may not necessarily contain any input points and in that case is not an application to be used arbitrarily by others.

Programmer Engineer

Programmer engineers write applications for end users. It is their responsibility to specify instructions for the application\'s behaviour, to transform a set of inputs to a set of outputs. They will provide input points for end users and may provide additional arbitrary state for power users. They are however constrained by the software stack that they are programming. For example, a web developer is able to program the web browser using JavaScript but may only do so using built in functions - without a small set of pre-defined, built-in functions they cannot access any of the HTML elements on the page - and those functions are provided by the browser itself.


Inventors write software for programmer engineers to make applications from. The people who created the web browser in the example above may be considered engineers. They provide state for programmer engineers to change, and they provide a means by which programmer engineers\' instructions may be executed. By providing these things, they create behaviours for programmer engineers to manipulate. Programmatically, the inventor is totally unconstrained; their only contraints are the hardware resources allotted to them.

Role Responsibility Power Constraint
Basic end user Provide input data Use of the application Programming of application
Power user Provide configuration data Specify some application behaviour Options provided by application
Programmer engineer Provide instructions Specify all application behaviour Set of behaviours in software stack being programmed
Inventor Provide state and a way to execute instructions Create behaviours Allotted hardware

Leave a Reply

Your email address will not be published. Required fields are marked *