Software development is torn between two extremes:
– imperative vs declarative programming
– interface vs abstraction
– centralized vs decentralized (client/server vs peer-to-peer)
– development vs operations
Imperative programming – jQuery, shell scripts
Declarative programming: Angular, Ansible
Interface: API vs Frameworks (abstraction)
– Developers (software features) vs Ops (software stability)
So with these two polar opposites, the compromise is to strike a balance in the middle.
To quote Michael Crosby,
Spending all your time working on abstractions is like spending all your time managing your todo list, the real work never gets done.