[HN Gopher] The Configuration Complexity Clock (2012) ___________________________________________________________________ The Configuration Complexity Clock (2012) Author : yamrzou Score : 21 points Date : 2023-10-31 18:12 UTC (4 hours ago) (HTM) web link (mikehadlow.blogspot.com) (TXT) w3m dump (mikehadlow.blogspot.com) | yukkuri wrote: | A very nice way to illustrate it! | IshKebab wrote: | This is good advice. Part of the difficulty is that you don't | really want to write your configuration in C++ or Rust and have | to recompile your whole program to change something... but it is | nice to be able to use a "real" language, otherwise eventually | you'll have to resort to a real language anyway to generate your | configuration. | | The issue is - which language? | | Ideally you want something embeddable, sandboxed, with good tool | support, static types/hints and "normal" (not aggressively | functional, 0 based indices etc.). | | The only language that remotely ticks those boxes is Starlark. | That's probably what I would use in future if I had this issue. | | I've looked into many other options (Jsonnet, Dhall, Cue, Python, | Deno, Lua, Rhai, etc.) but they all fall down in some way. | lainga wrote: | What do you dislike about Lua? (having used it I have several | answers already in mind) | IshKebab wrote: | Been a while since I used it in anger but IIRC no real array | type, classes are weird, 1-based indices, kind of crummy | syntax (does anyone really like `end`?), no static types | (when I used it anyway), the stupid split between Lua and | LuaJIT. | | It's definitely not the worst. It's just a little too weird | to be able to write it without actually learning it, which is | what you want in a config language. And 1-based indices just | shows poor taste. | karmakaze wrote: | Whenever this comes up I think of Greenspun tenth rule[0]: | Any sufficiently complicated C or Fortran program contains an ad | hoc, informally-specified, bug-ridden, slow implementation | of half of Common Lisp. | | I find it specifically applicable to evolving configuration | systems. | | > It can also be interpreted as a satiric critique of systems | that include complex, highly configurable sub-systems. | | [0] https://en.wikipedia.org/wiki/Greenspun%27s_tenth_rule | bob1029 wrote: | We are doing this trip right now. | | Hard code -> configurable/scriptable/DSL -> Hard code. | | The nuance I have discovered is you can do the "hard code" in a | wide variety of ways, some much more amenable to non-developers | than others. | | Our latest stack goes back to hardcoding because someone can edit | the source directly in GitHub and have an updated app deployed | automatically for evaluation within 2-3 minutes. Another simple | compare/merge operation in the web UI to move between | environments. No visual studio, no git CLI, nothing. Simply make | desired edits in browser, click the green button & check the URL | again when the bell dings. | | Devops wasnt quite this way in 2012. GitHub+Azure have replaced | an entire section of my org chart in 2023. The key for us this | time around the dial is to separate "nerd" code from "business" | code. Not going to be perfect ever but we can get it very close | with intent and all of the experience we built up so far. | | The configurable/scriptable/DSL stuff definitely does work, but | once you get to a certain magic # of configuration points, hard | code begins to emerge as superior again. Configurable wins in the | middle of complexity. Hard code wins at the extremes. | js8 wrote: | A related thing is an Application Dependencies Clock, which has | dependency injection at 6. | projektfu wrote: | I can only imagine that the bespoke database with custom GUI | thing represents Windows Installer (given the reference to | resharper). In that case, the clock swung backwards to using XML | config to generate the database. | spawarotti wrote: | At a first glance this looks to me to be the same concept as "The | Heptagon of Configuration": | | https://matt-rickard.com/heptagon-of-configuration | mrkeen wrote: | I'm hitting this right now with my predecessors' setup/factory | classes for Kafka in our codebase. | | There's different kinds of factories stacked atop one another. | There's Guide dependency injection so that the factories are able | to reach into config classes and copy custom properties into the | actual Kafka constructors right before instantiation. | | It's just an extra Rube Goldberg machine in front of Kafka | instantiation which doesn't prevent the caller from needing to | know the implementation details. ___________________________________________________________________ (page generated 2023-10-31 23:01 UTC)