Artifactual Focus

Does anyone use an app because of the language it was written in?

Posted by Jake Corn on May 15, 2020

TL;DR; Let's stop blaming/worshipping the tooling and start practicing a higher level of software construction.

Does anyone listen to a song because of its time signature?

maybe Music Students

Does anyone use an app because of the language it was written in

Maybe developers?

Does anyone choose one restaurant over another because of alloy differences in the pans?

Probably not even chefs

Then why are we so hung up on programming constructs?

We are told repeatedly we need to have x number of years of experience in language x or framework y before a recruiter will even give us a call sometimes. Do we really believe that someone sharp enough to build an application in one language won't be sharp enough to do it again in another.

We are told that only X style of programming can produce good applications.

Desirable Artifacts

Some desirable artifacts are (this list will hopefully become more refined over time):

  • Bug free software

    Threats

    • Poor Testing/Testability
    • Underspecification
    • Badly designed contracts/user stories
  • Software that is extensible

    Threats:

    • Non-orthogonal system designs
    • High coupling / Low Cohesion
    • Unconfigurable application behavior
  • Software that makes our companies money

    Threats:

    • Slow development
    • High cost for delivery
    • Poor application performance
    • Large batches
    • Focus on low value initiatives
    • Components that always must be deployed together
  • Software that makes life easier for users

    Threats:

    • Lack of understanding around user needs
    • Clickiness
    • Innaccurate messaging
    • Untimely messaging
  • Software that is secure

    Threats:

    • large attack surface
    • underdeveloped ingress/egress validation

    ...etc

All of these desired artifacts are possible in whatever programming environment is in use (All their threats are too).

The decisions for which constructs to utilitize will largely come down to how obvious or easy they can make the goals or how they may discourage the threats to positive artifacts.

For example "Undefined Behavior" is both a security threat and a threat to bug free software.

TL;DR; Let's stop blaming/worshipping the tooling and start practicing a higher level of software construction.

-- jake