One of my pet peeves is when someone makes like they're going to talk about software design, and then...
talks about comments. Or they focus on the details about how functions get written. At the risk of using a tired metaphor, this is a bit like when an architect wants to do interior design.
It's not that the insides of a room don't matter—a poor architect can absolutely create rooms humans have no use for—but it's also not the important part. Furniture can be rearranged, load-bearing walls cannot. A function is the quintessential abstraction boundary.
It's one of the few cases where we should be able to ignore the details. (Performance still matters, of course, but even that's something we can understand in a black-box fashion.) We can write better and worse quality functions, but the internal details aren't really relevant to the software's overall design.
It should be isolated. I think design is about everything that's leftover after we remove all the function bodies. It worth taking a moment to think about what that looks like.
Here are some of my own immediate thoughts: Everything that's left is just types. Even in dynamic languages, they're just less detailed types: classes that have certain methods, functions that take a certain number of arguments, and the documentation associated with these things. Classical proscription against global state is largely about ensuring those types are meaningful.
Any global state is something that could be used anywhere, and so it.