§ Software Development #insight List of dualities
All software development is the same. The boundaries between management, testing, programming, design, copy, and marketing are imaginary. There are no boundaries in the real world.
This is a subset of the larger List of dualities topic.
Here is a list of “edge cases”—something different people may judge differently (or wouldn’t even know how to judge):
sometimes non-functional requirements are functional. e.g., for a hard real-time system, the timing requirements are a function
software / hardware
is software flashed into ROM becomes a hardware?
ROM is actually re-writable nowadays
FPGA allow programming the hardware architecture
one of the first programming was done with wire jumping
software is designed an extension of hardware (configuration of hardware)
many features are possible to implement in either hardware or software
it is theoretically possible to implement any software entirely in hardware (given big enough hardware)
what is software anyways?
Hardware description languages (Verilog/VHDL) are very similar to programming languages (functional, reactive)
there is a Haskell-based eDSL for hardware description (you literally write haskell)
hardware / physics
digital / analog electronics
digital electronics is based on analog one
wire length introduces timings which are not traditionally(?) described in digital electronics
design / psychology
design heavily draws from psychology
many design researches are literally psychology researches
software architecture vs design
architecture is highly subjective
language / library
language / package manager
language / editor
visual programming languages
even C has runtime library (crt0) (usually)
“bug” is itself subjective. What one considers a bug, another considers a feature
a bug that requires a substantial rewrite
reproducing an issue to debug
quickly checking how app works after implementing a feature
complex project require tons of testing code. E2E testing is quite a chord and requires non-trivial amounts of programming. Is it still testing or is it programming?
test cases/use cases
when I implement an app without thinking design upfront, am I a designer?
a programmer adjusting design to allow easier implementation
a designer doing html markup? markup in JSX?
local infrastructure? if it is complex and involves clusters (though, local)?
when executing shell commands becomes programming?
using header files for configuration
using shell files for configuration
using python files for configuration
awesome wm (lua configuration)
xmonad (haskell configuration)
NixOS (Nix configuration)
when design copy becomes a standalone copywriting
marketing is thought of as an input to sales
it is so hard to separate them, that Denis Dovgopolyi recommends having one KPI for both of them.
when sales communicates with the potential customer, they can discover what customer wants, so they can fuel the feedback cycle and actually dictate how product should look like.