@jmoironRT @allspaw: A good first step in actually learning from incidents is to drop the existential need for “remediation items.”
Confront that…
@jmoiron@tjholowaychuk @davecheney The flipside is that zero values always behave the same no matter whose code you are using. I think this is easier even if it's cumbersome, as Go generally avoids allowing users to modify foundational behaviour at a distance.
@jmoiron@jtruk At some level of skill these start to be tradeoffs, but what about before that level? It's clear to me that one program can simply be better written than another and while that isn't always important in a business sense it's a part of professional development to improve.
@jmoiron@jtruk Right, so what makes code "well-written", how can you teach people to identify this, how can you then teach them to improve it? At the last stage, the "poorly-written" code no longer gets produced in future; the quality of the first version improves.
@jmoiron@jtruk Good point. I think it's easier to take any program and just imagine a worse version; this can be done without tradeoffs. How do we quantify going in the opposite direction, and how to you teach people to see these patterns as they are writing?
@jmoironGiven an engineer is already capable of solving a problem, how best to teach them to solve it _better_? I often see a laundry list of pithy quotes for which real world application is unclear; what single technique/advice/area of focus has yielded your best results?
@jmoiron@copyconstruct Mock means imitation via substitution, eg "mock bacon", though I think this usage is more common outside the US
@jmoiron@NateTheFinch It's controversial because it's not true :)
@jmoiron@Sajma @davecheney I love io.Reader and Writer (I even wrote them a love letter), but has anyone made a significant evolutionary leap in software design by composition since Douglas McIlroy?
@jmoiron@davecheney https://t.co/j6VisD21OK
@jmoironGreat advice: "Don't be afraid to try; just think a bit first and be willing to experiment." Also, the target should be to document your internal libraries as well as this https://t.co/Da9WTFdqGe https://t.co/9ydZmJ0fjj
@jmoiron@copyconstruct There are always good ways to add robustness to a system that are simply not worth the effort but will still inevitably show up on a post mortem next year. It can be really hard anticipate when the threshold will be crossed.
@jmoironRT @simonw: Maybe the solution to the Fermi paradox is that significantly advanced civilizations discover crypto currencies and then furiou…
@jmoiron@elithrar @golang Initially, `[]interface{}`, the way loop var implementation leaks into several situations, like using their address or closing over them with `go func() { ... }`. Later the right way to structure channel pipelines so they can be shutdown safely.
@jmoironI've never seen code that can adequately express "Every comment you write is a failure to express yourself well in code." so clearly it is bullshit and we can all move on.
@jmoiron@chimeracoder Avatar's borrow-word meaning has even been borrowed into _other_ languages to mean "online character" https://t.co/QFWZBlz53c
@jmoironAlan Donovan's casual aside at @gothamgo about turing incompleteness being a feature for Skylark really resonates. Choosing the right limitations for a certain problem domain is often much more powerful than allowing anything.
@jmoironRemember, in distributed computing, the only thing easy to distribute is failure.
@jmoiron@copyconstruct "[..] starting with a solution first only to later find a convincing argument to somehow retrofit our problem space into the solution space [..]" How else could all these reactjs apps get built? We think we're immune on the backend, but we're not. We're often wo...
@jmoiron"Monzo’s backend is written as several hundred microservices..." It's a testament to k8s et al. that this works in the first place, but I can't help but think it enables an architecture that nobody can understand.
@jmoiron@PreetamJinka :(
@jmoiron@copyconstruct Great point, it will vary org to org based on how they define those roles. Addressing the context gap here is probably the primary benefit of adopting standardized infrastructure level connective tissue like k8s and envoy and the like.
@jmoironRT @copyconstruct: @jmoiron IMO gaining confidence into the behavior of code/systems shouldn't be primarily left to a monomaniacal obsessio…
@jmoiron@copyconstruct The work done in the last ~30y on the TCP congestion window and various congestion algorithms comes to mind. You can write tests to verify they actually work or do not have well known flaws but on some level you have to do experimentation: https://t.co/MTwk90Fd6y
@jmoiron@copyconstruct A lot of stuff related to resource exhaustion and performance both over the network and within a CPU (these days basically the same). Services slowing down or becoming unresponsive cause outages despite behaving within the boundary of correctness as established by...