vaughandroid
Joined 10 years ago
Joined 10 years ago
Getting on 15 years into my career and not sure I'll ever get there. On the other hand, I actually work on a project I care about and for a company that treats me like a human being and not a "resource". Think I'm OK with that.
There are plenty of arguments in favour of allowing teams to use shiny new tech. Done responsibly, it can help with engagement, job satisfaction, retention, and recruitment.
FWIW I like both terms. I just wouldn't use them interchangeably. :)
Tim Harford's other podcasts are great too - More or Less, and 50 Things Which Made the Modern Economy.
Does anyone have any recommendations along similar lines?
I do think there's other stuff going on as well though. For example, newer languages are often designed to address perceived problems with existing popular languages. I'm a long-time Kotlin and Java developer, and Kotlin feels a lot like Java 2.0 - it specifically addresses a number of pain points people were experiencing with Java. So of course I'd rather be working with Kotlin, and going back to Java can feel like a drag.
RFCs are great for capturing discussions and exploring ideas in depth. You can get deep into the details if needed. ADRs are all about capturing a decision. They should capture the important bits of context and consequences, but without a huge amount of detail.
In terms of the process for producing these documents, if a decision is straightforward we will go straight to writing an ADR. If there are multiple options or we want to explore some corner cases, we'll start with an RFC. An ADR is often part of he output of an RFC which reaches consensus, but not always. Related RFCs and ADRs include links to one another.
If people are looking to get up to speed on something, their first port of call is the ADRs. If they have concerns, disagree with a past decision, or simply want to know more then they can dig into the RFCs.
1. It could easily come across as "my time is more important than yours". 2. Depending on what they are asking for and how urgently they are treating it, they might not want a lesson in solving their own problems. They just want help fixing the problem. 3. A lot of people are self-centred. Of course their problem should be your top priority and you should drop what you're doing! /s
...So yeah, I'd be surprised if it didn't get a bad reaction sometimes. Perhaps seek to promote this approach when their problem is resolved. I would imagine they would be more receptive then.
> As with all HeuristicRules, this is not a rule that applies 100% of the time. Code is generally clearer and easier to maintain when it does not use globals, but there are exceptions.
For me, the root of the problem with them is that they introduce coupling (or to put it another way, they break modularity). When you introduce global state, you introduce it everywhere. In reality there are probably only a handful of places that it relates to, but "is the global state involved here?" becomes a question you need to ask yourself whenever you write/update any part of the code.
The same argument can apply at more fine-grained levels. If you introduce a module-level variable, you need to keep it in mind whenever dealing with any code in that module. Similarly for class-level and instance-level variables.
There is a trade-off: ease-of-access and clarity vs the extra cognitive load you are introducing to every part of the scope. In my opinion, that balance determines whether a variable is good or bad. For any non-trivial piece of code, the sum almost always works out on the side of reducing the cognitive load.
You've obviously thought about this topic quite deeply - have you heard any realistic proposals on how to achieven this? I have yet to hear any, and until I do I'll be devoting my energy to changes that have at least some chance of being enacted, like a carbon tax.