
Does Software Understand Complexity? - michaelfeathers
https://michaelfeathers.silvrback.com/does-software-understand-complexity
======
lloeki
> _We might find that our field could benefit from mining math related to
> mechanical and electrical engineering. Feedback and control theory, in
> particular, looks like it i could have some utility._

This was all over the place behind the core theme of my CS master's degree,
for which I happened to also have background in both mechanical and electrical
engineering. There are a lot of things that felt quite natural to me but that
were proving elusive and challenging to people I worked with who lacked an
equally diverse background by being exclusively focused on CS.

Two points I raised were designing with, leveraging, and modelling feedback
loops in component-based software using control theory (application was on
auto-adaptative AV streaming across a network of varying quality† but the
overarching theme was largely generalisable); and modelling execution flow
using laws from electrical engineering (using high level concepts such as
power potential and current intensity as well as qualifying code paths as
being resistive, capacitive, and inductive) as an alternative approach to
complexity and optimisation.

The resistance to cross-domain mixing was surprisingly high, entrenched
thought processes are a remarkably deceitful thing, even when faced with
provable results.

† Something I would find out to be implemented a couple of years later with
zero-delay Xbox Live movie streaming.

~~~
dosy
Do you have a link to your thesis?

~~~
lloeki
Here's the ref[0], I lost both the tex source and pdf output in a double crash
(backup _and_ laptop basically simultaneously) and don't even have access to
the full text anymore (oh the irony). My work on execution flow modelling
wasn't referenced and is forever gone in that crash though. Bummer.

It's only a master of advanced studies (Diplôme d'Etudes Approfondies [1]) so
it's way shorter than a doctoral thesis. Also, the thing is probably half-
assed in some way, as there was some, dare I say, "lack of support" on
challenging ideas which was highly non-motivational on getting a proper paper
out (The moment I talked about leveraging AI/NN in component supervision I was
outcast as a sci-fi author). It doesn't cover half of my work (had to cut it
down to only the core part, enough to get the gist of things, but that's only
the tip of the iceberg). And it's in French.

If you (or anyone else) can ever get the full text please forward it back to
me so I can laugh at my arrogant young self!

[0]:
[https://hal.inria.fr/inria-00000787](https://hal.inria.fr/inria-00000787)

[1]:
[https://en.wikipedia.org/wiki/Master_of_Advanced_Studies#Fra...](https://en.wikipedia.org/wiki/Master_of_Advanced_Studies#France_and_francophone_countries)

------
alexpi
>I’ve long thought that as we add code and dependencies to systems we approach
biological levels of complexity.

According to Taleb: complexity is good for system reliability in the long
term. (As well as redundancy in every aspect like head count, components
count, technology stacks used in the same system) to mimic biological
complexity.

But I strive to make everything as simple as possible, remove unnecessary
components, etc.

I still cant understand contexts where complex is better than simple

~~~
stult
Simple is better where you need to maintain control, because then a human
being can understand the entire system and its behavior becomes deterministic
from our perspective. Complexity--practically by definition--means that the
system's behavior becomes harder to predict, when software development is (in
most cases) explicitly focused on delivering _expected_ behavior. So for most
practical software development purposes, simplicity is better.

But complexity can also be emergent from the aggregation of many small, simple
components. E.g. the internet, which grew out of some relatively simple
protocols connecting a handful of computers into the globe-spanning organism
that it is today. So you may not design a complex system as a software
developer, but your simple system may become a component in a larger, complex
system. And that system will be more robust than the individual, simple
components are. Such as the replacement of HTTP with HTTPS at the protocol
level or fiber replacing copper in the physical system of the internet. Those
simple systems have (or rather will soon) perish, while the more complex
system that emerged from them survives.

~~~
josteink
> Such as the replacement of HTTP with HTTPS at the protocol level or fiber
> replacing copper in the physical system of the internet. Those simple
> systems have (or rather will soon) perish, while the more complex system
> that emerged from them survives.

Funny you should say that w.r.t. to reliability.

I just got back from vacation today and have just had 2 SSL-related issues I
needed to solve, not to mention one related with dependencies on smaller
components, which when updated broke my chain of software.

All these would have worked more reliably 1. without HTTPS and 2. if
everything were packaged together :)

In short, the simpler solution would clearly be more _reliable_ here.

~~~
gipp
Sure, but that's your experience as an individual developer on a small
component of the system. If we're looking at the health of the system _as a
whole_ (of which you, and the work you're doing to solve these issues, are a
part), it's completely resilient to this change.

------
gooseus
I had a similar experience this past week at the ISSS conference in Corvallis.

I'm applying to the systems science PhD program at PSU this year and was
amazed at the both the depth and breadth of the systems research and
discussion to be had, but also noted the lack of software developers or
computer/information systems discussion.

I'm looking forward to being able to bring some of my expertise to this field,
while also mining the knowledge and concepts for use in better software
systems design.

I'm going to definitely look into this conference for next year, though
hopefully they won't be running the same week as the ISSS conference again.

~~~
stult
I used to walk past the Harder House on SW 10th and Market every day, where I
think the systems PhD program sits. They have these fascinating network
diagrams stuck up in the windows, and I was always curious what they were...

~~~
gooseus
Yep, that's the place... if it's the one I'm thinking of, then I think it's a
diagram of a search through a set of potential models during a RA
(Reconstructability Analysis) of 3 independent variables with 1 dependent
variable.

It's Dr. Marty Zwick's favorite picture since he's the one who teaches DMM
(Discrete Multivariate Modeling) which deals with RA. I haven't taken it yet,
but he was at ISSS and gave a plenary on RA, as well as chaired a full day of
RA related presentations.

Here is some more information, which also has the diagram I think you're
referencing:

[https://www.pdx.edu/sysc/research-discrete-multivariate-
mode...](https://www.pdx.edu/sysc/research-discrete-multivariate-modeling)

------
hadsed
Software systems are the perfect data generating processes. They are often
compositional and yet complex because of simple interactions blowing things
up. And we have effectively infinite data so it's a good place to get started.
It would be amazing if an AI could reverse engineer a backend of an app just
based on using the product and maybe making some scaling assumptions. But
we're not that good with loss functions yet.

Maybe someday we can have an AI watch our log streams and tell us the ideal
architecture for our systems. Then the trick will be to generate fake log data
for what we want to happen in general. Perhaps we can just keep it coarse
grained and say the AI can fill in the rest. The future of systems
architecture!

Even more interesting is Conway's law. What if an AI could tell you how best
to organize your company?

~~~
a_imho
_What if an AI could tell you how best to organize your company?_

Companies organize around office politics, in my experience efficiency is
quite low on their priority list, especially in big enterprises.

~~~
vinceguidry
Increased efficiency comes at the cost of lowered control. It took me awhile
to wrap my brain around the mindset. If the company takes me up on my offer to
rebuild their infrastructure at my current pay rate rather than hire a
consultant to do it for $X00,000, note that hundreds of thousands of dollars
is quite cheap for this kind of consultation, that presents an efficiency
improvement at the cost of control. The CFO wants Magento and I'm not
interested in coding Magento.

It's more rational from a business standpoint for it to introduce often-
extreme efficiency _penalties_ in order to achieve the CFO's will. This is an
actual scenario that happened to me by the way. I couldn't analyze it with
quite this amount of granularity until recently.

Everybody in the company that could have formed an opinion agreed with me
about the efficiency gains of doing it my way. But what I was wanting was
_politically_ impossible. So me and the company parted ways.

Since then Magento's new version provides an API layer that makes it way way
easier for companies with competent technical leadership to have their
programmers use disparate skillsets and still get along. I can learn Magento
well enough to work on it on the backend, and maintain the Rails frontend that
I would have wanted to work on. If I had saw this coming at the time, I'd have
stuck around and helped manage the replatforming. But all I was looking at was
the extra $X0,000 I was going to make elsewhere.

------
FrankDixon
super interesting topic. I'm currently also looking more and more into how
UNIX and the network layers manage complexity in abstract terms. Would've
loved if the article would've been a bit more specific in terms of what
takeaways from the conference might be of interest for software.

~~~
michaelfeathers
I may get a chance to write up more over the next week. If I do, it will be on
the same blog.

------
eindiran
Can anyone here recommend a good introductory textbook for control theory?

------
extralego
1st sentence: “This past week I was at a ¿conference?...”

(Stories about the mystery conference)

2nd sentence of 2nd paragraph: “I was at ICCS2018, a complex systems
conference.“

Why is this normal now? It’s ruining the internet. Everything I read lately is
wound up into a desperate suspense-arc.

I understand not everybody has liberal arts degrees (and definitely not this
person) but that might be all the more reason to not make such an attempt.

 _Introductions come first_. It’s a lot like meeting a person for the first
time. Creativity is not a bad thing, but if you’re sacrificing respect in the
process, you’re blowing it.

~~~
dang
Would you please stop posting unsubstantive comments to Hacker News?

