[HN Gopher] One Way Smart Developers Make Bad Strategic Decisions
___________________________________________________________________
 
One Way Smart Developers Make Bad Strategic Decisions
 
Author : ScottWRobinson
Score  : 173 points
Date   : 2022-03-08 14:35 UTC (8 hours ago)
 
web link (earthly.dev)
w3m dump (earthly.dev)
 
| alephxyz wrote:
| A well publicized example is EA mandating all its studios to use
| the Frostbite engine
 
  | __turbobrew__ wrote:
  | I used to work on the Frostbite team at EA and it was quite the
  | train-wreck. Many game teams spent considerable time moving to
  | Frostbite only to fail and go back to the old game engine, the
  | game teams which managed to move to the frostbite engine were
  | unable to keep up with engine updates and got stuck on old
  | arcane engine versions, the frostbite engine team was split
  | between multiple geolocations and the teams in different
  | locations didn't get along well and ended up developing silos,
  | and finally there were about a million layers of management in
  | the frostbite team -- I heard from old timers that the team
  | used to be much more engineering focused.
 
  | fnbr wrote:
  | I have a bunch of friends who work for an EA studio (or who
  | used to work for an EA studio) and they all _hate_ Frostbite.
  | With a passion.
 
| wnolens wrote:
| Great short read and book recc.
| 
| I find myself often trying to articulate this idea (sometimes to
| myself, often to a friend) - starting with the map and building a
| territory from it --> generally bad.
| 
| While reading this article I wasn't even thinking about software.
| I think of a lot of progressive and/or socialist politics. To
| assert that the world should look as you one sees fit is flawed,
| both because one is not representative but mostly because the
| complexity of a system beyond toy example cannot be accurately
| modeled enough when the risk is catastrophe.
 
| twic wrote:
| I haven't read Seeing Like A State. I have to say, i am
| _extremely_ skeptical about the author 's fable about forestry.
| Commercial foresters today still mostly uses monocultures with
| evenly-spaced planting patterns, and i simply don't believe that
| they would be doing that if there was a straightforwardly better
| way to grow trees, even it was less "legible". This has a
| powerful scent of Gladwell-esque insight porn - the sort of story
| we love because it's counter-intuitive and makes us feel cleverer
| than people who haven't heard it.
| 
| I don't suppose we have any foresters on this board who can
| comment?
 
| mathgladiator wrote:
| While there is much to worry about over centralization, there are
| benefits to at least trying if you can consolidate n-m efforts
| when n is the total number efforts using a queue and m are the
| snowflakes. It all depends on organization size and whether some
| costs can be amortized.
| 
| Everyone having specialized everything is exceptionally expensive
| at scale. Here, the key is tower of babel. What Tim should have
| done is kick start the effort with one or two teams, then
| organically grown it by reducing operational burden for new
| teams.
| 
| The mistake here is trying to globally optimize rather than
| seeking different vertical consolidation.
| 
| By the way, this is why Amazon has so many services.
 
| steve76 wrote:
 
| kerblang wrote:
| In general, "unity" is something software developers routinely
| pursue just for the sake of unity itself, failing to understand
| that unity comes with significant tradeoffs. It is much harder to
| build a unified solution than a localized, one-off solution.
| Divide-and-conquer is often a much better engineering strategy:
| DAC might create more work than unity, but the work is more
| likely to succeed instead of falling apart because we failed to
| anticipate all the use cases within the unified framework,
| especially when we lack experience in the domain.
| 
| Also refer to Jeff Atwood's Rule of Threes (which he borrowed
| from someone else) here.
 
| kingdomcome50 wrote:
| Counter example: Tom standardized a bunch of services... and it
| worked! Everything is easier and more efficient now.
| 
| I agree with the thrust of this post: Changing something that is
| not understood is a dubious undertaking. But the author fails to
| make a compelling connection between the above and software
| development. A poor solution _may_ be a result of not
| understanding enough of the system as a whole, or it _may not_.
| We simply can 't tell.
| 
| Standardization (i.e. simplification) is generally a good thing
| in software development. How would Tim's system look if they had
| opted for his approach from the start? How does the 3rd iteration
| of the system compare to the 1st iteration? Maybe Tim's solution
| is stepping-stone to something better. Impossible to tell.
 
  | EnKopVand wrote:
  | > Counter example: Tom standardized a bunch of services... and
  | it worked! Everything is easier and more efficient now.
  | 
  | I'm sorry, but that isn't really a counter point unless you
  | have some cases to back it up.
  | 
  | In my completely anecdotal experience standardisation never
  | really works. I say this as someone who's worked on enterprise
  | architecture at the national level in Denmark and has co-
  | written standardisations and principles on how to define things
  | from common building blocks.
  | 
  | The idea was that something like a journal of your health can
  | be defined as a model that can be used by everyone who ever
  | needs to define a journal for health data. And for some cases
  | it works well, it lets thousands of companies define what a
  | "person" is as an example and which parts are the person and
  | which parts are the employee and so on, and it lets them
  | exchange data between systems.
  | 
  | Until it doesn't. Because all of the sudden an employee is two
  | different things depending on what time of the day it is,
  | because a Nurse has different responsibilities while patients
  | are awake, in some hospitals, and not in others. But because
  | the "standardisation" doesn't account for this, 50 years of
  | enterprise architecture in the Danish public sector is yet to
  | really pay off.
  | 
  | Some of our best and most successful public sector projects are
  | the ones that didn't do fanatical standardisation but build
  | things with single responsibilities so that they could easily
  | be chained together to fit a myriad of unique needs.
  | 
  | Now, I'm not against standardisation in any way, but sometimes
  | it just doesn't make sense and sometimes it does. The issue is
  | that the standardisation approach tends to begin before anyone
  | knows which situation you are actually in.
 
    | stonemetal12 wrote:
    | As far as I can tell how well standardization works depends
    | on "how close to the humans" it is.
    | 
    | HTTP; TCP; json; xml: all standardize pretty well. Want to
    | standardize your micro services on nginx with data in json?
    | It will work swimmingly and save time because it is one less
    | decision to be made, and overtime everyone will become
    | familiar with how nginx is setup. Standardizing on what json
    | libs to use so that everyone can dig into the json
    | marshalling code without a lot of head scratching would be
    | another big win.
    | 
    | Trying to standardize people never works because they want to
    | do things their own way and view whatever standard you try to
    | impose as wrong.
 
      | Splizard wrote:
      | So the answer is, standardize communication/protocols but
      | leave procedure to the free market?
 
    | kingdomcome50 wrote:
    | > I'm sorry, but that isn't really a counter point unless you
    | have some cases to back it up.
    | 
    | My counter example is about exactly as detailed as the
    | author's example. Of course I was being tongue-and-cheek, but
    | _clearly_ standardization has worked in software.
    | 
    | You can toss your example right on top of all of the other
    | failed attempts at standardization. It in no-way supports the
    | conclusion that "standardization" is a problem. Like I said,
    | I agree with the author's argument, but their conclusion is
    | not supported by that argument. There are _many_ failure
    | modes to large projects.
 
| jmull wrote:
| Nice, interesting article.
| 
| But I would stress less that "Seeing Like a State" -- that is a
| top-down, global solution -- was not the problem.
| 
| The problem was that "Tim" didn't really understand the problem
| he was trying to solve (well, none of us truly understand very
| much at all, but he didn't understand it better than many of the
| teams associated with the individual services).
| 
| "Tim"'s proposal probably solved some problems but created
| various other problems.
| 
| The best solution, though, (IMO) isn't that Tim should be smarted
| and better informed than everyone else combined, nor that every
| team should continue to create an independent solution. Instead
| "Tim" could propose a solution, and the 100 micro service teams
| would be tasked with responding constructively. Iterations would
| ensue. You still really, really need "Tim", though, because
| multiple teams, even sincere and proficient ones, will not arrive
| at a coherent solution without leadership/direction.
| 
| > A global solution, by necessity, has to ignore local
| conditions.
| 
| That's just flat wrong. A global solution can solve global
| concerns and also allow for local conditions.
 
  | chasil wrote:
  | The scenario reminds me of this story:
  | 
  | https://mwl.io/archives/605
 
  | hosh wrote:
  | > That's just flat wrong. A global solution can solve global
  | concerns and also allow for local conditions.
  | 
  | Past a certain level of complexity, that's no longer true.
  | 
  | _Seeing Like a State_ is a great introduction to this, but I
  | think Carol Sanford's work goes much more into detail. The main
  | thing with the high-modernist view that James Scott was
  | critiquing is that it comes from what Sanford would call the
  | Machine World View. This is where the entire system can be
  | understood by how all of its parts interact. This view breaks
  | down at a certain level of complexity, of which James Scott's
  | book is rife with examples.
  | 
  | Sanford then proposes a worldview she calls the Living Systems
  | World View. Such a system is capable of self-healing and
  | regenerating (such as ecologies, watersheds, communities,
  | polities), and changing on its own. In such a system, you don't
  | affect changes by using direct actions like you do with
  | machines. You use indirect actions.
  | 
  | Kubernetes is a great example. If you're trying to map how
  | everything work together, it can become very complex. I've met
  | smart people who have trouble grasping just how Horizontal Pod
  | Autoscaling works, let alone understand its operational
  | characteristics in live environments. Furthermore, it can be
  | disconcerting to be troubleshooting something and then have the
  | HPA reverse changes you are trying to make ... if you are
  | viewing this through the Machine World View. But viewed through
  | Living Systems World View, it bears many similarities to
  | cultivating a garden. Every living thing is going to grow on
  | its own, and you cannot control for every single variable or
  | conditions.
  | 
  | For similar ideas (which I won't go into detail), there is
  | Christopher Alexander's ideas on Living Architecture. He is a
  | building architect that greatly influenced how people think
  | about Object Oriented Programming
  | (http://www.patternlanguage.com/archive/ieee.html) and Human-
  | Computer Interface design (what the startup world uses to great
  | affect in product design).
  | 
  | Another is the Cynefin framework
  | (https://en.wikipedia.org/wiki/Cynefin_framework). Cynefin
  | identifies different domains -- Simple, Complicated, Complex,
  | and Chaos. Engineers are used to working in the Complicated
  | domain, but when the level of complexity phase-shifts into the
  | Complex domain, the strategies and ways of problem-solving that
  | engineers are used to, will no longer work. This includes
  | clinging to the idea that for any given problem, there is a
  | global solution which will satisfy all local conditions.
 
    | salixrosa wrote:
    | Thanks for the reading recommendation! Learning about the
    | Cynefin framework and thinking about those kinds of problems
    | led me to James Scott and to Hayek, but I haven't come across
    | Sanford's work before.
 
    | hosh wrote:
    | Oh yeah, and I just remembered -- Go. It's a great way of
    | training strategic analysis and making decisions. After
    | moving past the basis, what one explores are global vs.
    | local, influence vs. territory, discerning urgent vs. big
    | moves, direction of play, and so forth. It is theoretically a
    | perfect-information game, but it is sufficiently complex
    | enough for humans that it simulates the fog of war and having
    | to make decisions in face of uncertainty.
 
      | jmull wrote:
      | "It is theoretically a perfect-information game"
      | 
      | Ha, ha! A concept for suckers.
 
        | samatman wrote:
        | Perfect information must not be confused with perfect
        | information processing.
        | 
        | GIGO does not imply its opposite.
 
    | tcgv wrote:
    | > This includes clinging to the idea that for any given
    | problem, there is a global solution which will satisfy all
    | local conditions.
    | 
    | The parent comment wasn't stating this. It was stating that
    | there could be a partial global solution that would benefit
    | all microservices, a solution which teams would have to adapt
    | for covering local conditions as well. A middle ground per
    | se.
    | 
    | Thanks for sharing the "Living Systems World View" btw, very
    | interesting!
 
    | jmull wrote:
    | Truly, a fascinating perspective, thank you.
    | 
    | Just for the context: I would say I'm a natural intuitive
    | bottom-upper, except that I can't help but reconsider
    | everything my intuitive self learns from a strongly
    | analytical top-down way.
    | 
    | From that perspective and 30+ years of experience (where I
    | like to think I'm at least open to being completely wrong
    | about anything and everything), I think top-down,
    | prescriptive solutions can be useful and effective, but need
    | to _understand_ and carve out the holes (and conservatively
    | large ones at that) for  "local" concerns - BTW, "local"
    | often typically just means lower, where there the lower level
    | itself can have "global" and "local" concerns.
    | 
    | Now, I know this often doesn't happen, so let's lay out how
    | it can work:
    | 
    | - there's a top-down person -- "Tim" in the article -- who
    | has responsibility for for developing a solution
    | 
    | - there are the separate teams, who are responsible for
    | communicating feedback on potential solutions.
    | 
    | Also, I wish I didn't need to point this out, but
    | "responsibility for" === "authority/control over".
    | 
    | (If that's not the case, then never mind: you essentially
    | have a "free-for-all" organization, and just better hope
    | someone who's not too crazy wins the cage-match and can hang
    | on long enough to be a net positive.)
 
      | aidenn0 wrote:
      | A point made that I think you are missing is that unless
      | all of the separate teams fully understand the potential
      | solution, then they can't provide useful feedback.
      | 
      | If team X doesn't know Kafka, then they can't tell you the
      | ways in which it's not as good as their existing
      | (potentially ad-hoc, but definitely working!) message
      | system. There may be things that their system does that the
      | team just automatically assumes all message-brokers will do
      | because it's "obvious" that it's needed.
      | 
      | If, on the other hand, someone on team X organically
      | considers Kafka as a local solution, learns it, tries it
      | out, all of this stuff becomes obvious immediately.
      | 
      | So the pure top-down approach has two possible solutions:
      | 
      | 1. It gets useless feedback "meh, seems fine"
      | 
      | 2. All N organizations actually take the time to try out
      | the solution before giving feedback, which means you spend
      | a lot of resources evaluating each top-down hypotheses
      | 
      | The suggested solution from TFA is to have a top-down
      | person embed in one team, find some improvements that work
      | locally, then embed in a second team and do the same. Only
      | then should one try to generalize from the shared
      | experiences of the team. It recognizes that good feedback
      | is expensive and bad feedback is likely, so just cut out
      | the whole "give feedback" stage and have the top-down
      | person learn from actually being embedded in a couple of
      | teams.
 
  | sokoloff wrote:
  | That depends a lot on the cardinality of the set of Tims.
  | 
  | If there's one Tim per team, you'll have 100 Tims proposing
  | different global improvements and 100 teams needing to respond
  | intelligently to those suggestions.
 
    | vlovich123 wrote:
    | That's when the business needs to assign one Tim, or a team
    | of Tims as dictator(s). Everyone else can provide feedback
    | but isn't the decision maker.
 
      | canalmighty wrote:
      | A Timtactorship
 
  | GiorgioG wrote:
  | > A global solution can solve global concerns and also allow
  | for local conditions.
  | 
  | Not if standardization is the priority.
 
    | CogitoCogito wrote:
    | > Not if standardization is the priority.
    | 
    | Is standardization always a priority?
 
      | [deleted]
 
  | ryukoposting wrote:
  | Through enough iteration, all problems can be solved. But, how
  | many iterations will be required to reach a solution that works
  | for everyone? At that point, is there a solid business case for
  | the project?
 
  | darkerside wrote:
  | I think the key difference is whether the local teams have the
  | choice to opt out or not, and my belief is that they should. If
  | they can, they can solve their own problem if the global
  | solution doesn't work. If the global solution wants to keep
  | them as consumers, they must adapt. If they can't leave, the
  | global team will almost certainly stop responding to their
  | needs over time. Like communism, a global solution is terrific
  | in theory, but human behavior causes it to break down in
  | practice.
  | 
  | Caveat, for small enough problems, good enough solutions, and
  | charismatic enough leaders, global solutions can work. But they
  | all break eventually.
 
  | phkahler wrote:
  | >> > A global solution, by necessity, has to ignore local
  | conditions.
  | 
  | >> That's just flat wrong. A global solution can solve global
  | concerns and also allow for local conditions.
  | 
  | So lets rephrase that. A global solution that ignores local
  | conditions will have problems and will likely fail.
 
  | bentcorner wrote:
  | Makes sense. In my work I've seen this when trying to get
  | developers on my team using certain patterns, styles, types,
  | conventions, or tools (or the inverse - deprecating them).
  | 
  | Suggestions are usually well grounded (e.g., "let's migrate to
  | this `std` class instead of this old home-rolled wrapper), but
  | sometimes there's some nuance to how something is currently
  | done and deep discussion of the proposal can work through these
  | bits.
 
| NateEag wrote:
| For anyone interested in social systems that help avoid this top-
| down, centralized failure mode, I cannot recommend RFC 7282
| enough:
| 
| https://datatracker.ietf.org/doc/html/rfc7282
| 
| A whole lot of wisdom is captured in that document, including a
| deep understanding of the differences between unanimity, majority
| rule, and consensus.
| 
| If you're involved in standardization efforts in any way, whether
| it's deciding where your team will put braces in source code or
| running software architecture for a Fortune 100, it will well
| repay your reading time.
 
  | svilen_dobrev wrote:
  | interesting. For long time i've found that negative logic is
  | more powerful/overarching than positive one - #ifndef NOT_THIS
  | is more powerful than #if THIS .. and this article applies that
  | even to agreeing vs not-disagreeing.
 
| yellowstuff wrote:
| This article does a good job describing one failure mode that's
| not understood well, but the opposite failure mode is much more
| common in my experience- having lots of ways to do the same thing
| can be very inefficient and brittle, even at small companies. The
| right answer is not "never unify systems" or "always unify
| systems", but develop judgement about when things should be
| unified.
 
| [deleted]
 
| wvenable wrote:
| I disagree with the conclusion although not necessarily with the
| situation described.
| 
| A programmer only has so many hours in the day; if you want to be
| a more efficient programmer you either have to learn to
| type/think faster or you need to build frameworks, write
| libraries, and codify common practices.
| 
| There are situations where that doesn't work but if your job is
| to pump out code for an organization there's a good chance that
| most of your applications will have the same authentication, the
| same look and feel, etc. Putting effort into that core will pay
| dividends later. But you can't be a slave to your own code; if it
| doesn't fit in the box then don't force it.
 
  | sokoloff wrote:
  | > to be a more efficient programmer you either have to learn to
  | type/think faster or you need to build frameworks, write
  | libraries, and codify common practices.
  | 
  | That's focused on the writing/creating side of the equation. In
  | my side projects, I became a lot more efficient when I decided
  | to put effort into _using_ frameworks, _adopting_ libraries,
  | and _copying_ common practices.
 
    | wvenable wrote:
    | You should absolutely be using existing frameworks,
    | libraries, and common practices. But a popular framework will
    | allow you make any application imaginable. If you're not
    | making radically different applications every day, you can
    | extend and constrain existing frameworks with your own code
    | to make them specific to your needs.
    | 
    | For example, all my applications have the same look and feel,
    | corporate branding, and authentication features. We use a
    | popular framework but extended it to handle all of this stuff
    | so it's never repeated between projects.
 
| travisgriggs wrote:
| Lots of resonant points here. It's worth making it to the end.
| 
| I work at a company where there's a number of different little
| less-than-one-man projects, and there's a lot of variety, and so
| a couple of non-tech types, frustrated with resource allocation
| (having the right kind of skills at the right place at the right
| time in the right amount) wants to standardize and simplify.
| 
| What I've observed though is that when you tell your house
| painters they can only work with black paint, they can only give
| your customers black walls, and when your customer wants wood
| panel, or textured fuschia, then you can't earn revenue from that
| market demand.
 
| galaxyLogic wrote:
| As a whole the strategy of "Let's see what's common in all these
| systems" is a good start to understanding the systems. There is a
| limit to the complexity any single person can understand.
| Unification is simplification. It helps understanding. But I
| agree it is no good trying to make the landscape fit a simple map
| when reality is much more complex. There's no Silver Bullet in
| trying to combat complexity.
| 
| But rather than trying to unify everything think about micro-
| services. Each service can be its own isolated solution. Of
| course it needs to be optimized in terms of how well it works
| when all the other services are running as well. But I think
| isolation is the key to independently optimizing everything.
| 
| I like this sentence from the article: "Lots of it doesn't
| matter, but some of it matters a lot".
 
  | Splizard wrote:
  | Except when Tim decides to standardize how each micro-service
  | is built, using a custom framework...
 
| itsdrewmiller wrote:
| This article is amazing and is perfectly timed for the news about
| Sri Lanka's mass move to organic farming -
| https://news.ycombinator.com/item?id=28443798
 
| eternityforest wrote:
| I've noticed that ALL beginners seem to have a reinvented global
| solution phase.
| 
| Everyone who does electronics might say "Oh I'm going to use this
| one connector for everything". And it's either ok, if it's a
| standard connector, or a giant pile of crap that means they can't
| use a lot of existing stuff because they insisted on this insane
| DIY grand scheme.
| 
| Usually such things have an element of "I want to do Y, so I'll
| build a modular kit X and use that to Y". And then X becomes the
| real project and Y is never finished.
| 
| The insidious part is how the new product is often a tiny bit
| better than what's out there. But it doesn't matter. The mediocre
| standard solution is still way less trouble than the beautiful
| perfect custom thing. I'd rather have Just Works tech than tech
| that's Just Right. Anything that seems perfect and beautiful and
| simple, I don't trust, because it was probably made for one
| specific task, not to be a general standard you don't have to
| think about.
| 
| I think of the failures with global solutions are because someone
| did them on a small scale, or because they have to do with
| natural systems.
| 
| Fully top down planning of manmade things by a giant industry
| consortium is most of why tech is great. Otherwise we would have
| no USB C, and 12 different CPU architectures.
| 
| Sometimes design by comittee protocols suck, but usually because
| they didn't have _enough_ control, and instead of a protocol,
| they deliver a description language for companies to make their
| own protocol, with every feature optional so that compliance does
| not necessarily mean compatibility.
| 
| When you do it internally it can suck because it's more effort
| than it's worth to replace all your existing stuff.
 
| ryukafalz wrote:
| Some good points. At the same time, sometimes standardization is
| good and necessary. Imagine if everyone had to reimplement TCP/IP
| analogues to communicate over a network; we'd never get anything
| done!
 
  | NateEag wrote:
  | And those types of universal standards arrive by a process not
  | unlike evolution - everyone who wants to has a crack at the
  | problem and the solutions compete for a painful decade or two.
  | Eventually a winner emerges from the top few frontrunners, and
  | by 2040 only networking historians remember ALOHAnet or token
  | ring networks.
  | 
  | However, you can't top-down design a universal standard.
  | 
  | With sufficient skill, patience, and wisdom, you may be able to
  | design a standard that's good enough to be widely applicable.
  | 
  | Humans have free will, though (in practice, at least, no matter
  | what you think about the philosophical question).
  | 
  | A standard only becomes universal when everyone chooses to
  | adopt it.
 
| saila wrote:
| The first part of the article describes the common situation
| where we see similarities across projects and effort being
| duplicated, apparently unnecessarily.
| 
| To improve understanding and efficiency, we come up with
| proposals that involve some kind of standardization, such as a
| shared library abstracting a service.
| 
| My team has recently embarked on such an effort, and I was really
| hoping for a new take on how to avoid the various pitfalls
| involved in attempting this kind of standardization.
| 
| Obviously, central planning works quite well for certain things
| and, just as obviously, it hasn't worked well for other things.
| In most situations, it seems that a combination of planning +
| flexibility works best.
| 
| Further, what works or doesn't work for nation-states isn't
| particularly applicable to software architecture. The analogy
| feels quite tortured to me.
| 
| As to the example given in the article regarding trees, one could
| just as easily choose an example from modern agriculture where
| "central planning" seems to work quite well.
| 
| In the end, I feel like the article just boils down to: "Make
| sure you understand the problem domain and the cost of large
| scale change before you spend a lot of time and effort making
| said changes."
 
  | memorythought wrote:
  | My reading of Seeing Like A State was not "central planning
  | bad". The author explicitly acknowledges that there are many
  | benefits to what they refer to as "high modernist" projects
  | which we all enjoy on a daily basis. My reading was more that
  | large scale projects designed to entirely change the way
  | something is done in order to make it legible to a central
  | authority necessarily throws away an enormous amount of local
  | information and this leads to a tradeoff. You end up being able
  | to build much bigger systems, but those systems are not as
  | flexible.
  | 
  | In the context of microservices that seems like a pertinent
  | point because the purpose of a microservice architecture in the
  | first place is often to allow an organisation to be more
  | flexible and accommodate local knowledge.
 
| dre85 wrote:
| Very interesting article! I was left wondering though in what
| ways the queue abstraction solution failed?
 
  | dilatedmind wrote:
  | for this specific example, I think the shared library is not
  | the correct approach. Queues work for simple fifo behavior, but
  | in this case they also need fairness (and perhaps other logic,
  | like rate limiting per client, different priority for certain
  | clients etc)
  | 
  | For example, "Customer-A is clogging up the work queue and
  | starving other customers out". The solution to this could look
  | something like linux's completely fair scheduler, where every
  | client is allocated some amount of messages per interval of
  | time. This means messages need to be processed in a different
  | order then they are enqueued, and queues are not good at
  | reordering messages.
  | 
  | I would suggest implementing the queue abstraction as a rest or
  | grpc service, backed by a database like postgres, which holds
  | message payloads and everything related to message state (in
  | progress, retry after times, etc). Now we can implement all the
  | necessary scheduling logic within our queue service.
 
  | kerblang wrote:
  | They hinted at the fact that kafka is not actually a queue, and
  | it especially has problems with fairness if you try to use it
  | as a queue for unequally sized "jobs" and/or unequally sized
  | consumers. Kafka is for the exceptional case; actual message
  | queues are for the default/general case.
 
    | dre85 wrote:
    | That makes sense, but it also doesn't really support the
    | article's overall argument about the perils of
    | "standardization without understanding". If what you're
    | saying is true then it could very well be that the approach
    | to standardize the queuing would have worked perfectly well
    | had the senior dev chosen a different technology to underlay
    | his library (ie not Kafka), right?
 
      | kerblang wrote:
      | Yes technically the Kafka matter is a secondary to the
      | author's main point, which is _understanding each problem
      | first_. So yeah I would not waltz in and say,  "Oh, no need
      | for details, obviously you need to standardize on RabbitMQ
      | not Kafka," without a second thought, even though it's
      | likely that's _roughly_ where we 're gonna end up.
      | 
      | But even then, I am not going to write a custom library
      | when the drivers for either product are perfectly adequate.
      | Standardization works best when standards are flexible, and
      | trying to force my homemade library on every team is
      | inflexible (usually it's just arrogance).
 
| sudhirj wrote:
| This seems to be hallmark of a "Middle" developer. Not so junior
| that they couldn't build a working solution that they assume
| everyone should use, but not senior enough to think twice about
| whether they should be building it.
| 
| The "we should make a common framework" for this line is the
| dominant thought at this level. Never even a library. A
| framework. Everyone must do it this way.
| 
| The more senior people share concepts and maybe libraries, and
| allow the team to use them if they see fit.
 
  | 1123581321 wrote:
  | This kind of consequential decision can happen at high levels.
  | Obviously less often when a truly brilliant developer ends up
  | in a small organization (but that has its own risks.)
  | 
  | In the example, it was determined that they could not afford to
  | let each service solve its individual bottlenecks ad hoc. So a
  | corresponding strategic error was also made/forced at the
  | senior business level.
  | 
  | It's easy to speculate in hindsight, but in this case I could
  | imagine a globally enforced throughput mandate supported by a
  | widely visible and frequently reviewed dashboard, new
  | tools/libraries as needed, and an optional central queue
  | service required to 'compete for business' of the individual
  | service teams.
  | 
  | I can see potential problems with that too, though. In a sense,
  | failure has already happened when growth management is deemed
  | to be too important to be left to capable individuals on
  | decentralized teams.
  | 
  | Enjoyed the article.
 
  | Fiahil wrote:
  | I agree.
  | 
  | People use the most practical things at their disposal. If Tim
  | had opted to publish a repository of easy and _simple_ recipes
  | for managing kafka and postgres integrations, while retaining
  | the ability to use original libraries, then I see no reason why
  | it would not have gained traction.
 
  | shuntress wrote:
  | It's the large-scale version of taking "DRY" too literally.
  | 
  | Junior devs just repeat themselves because they don't know
  | better.
  | 
  | Middle devs rush into an incomplete abstraction by
  | overzealously not-repeating-themselves.
  | 
  | Senior devs just repeat themselves because they know they don't
  | understand what it would take to abstract out the solution.
  | 
  | Like everything... "It Depends". Don't Repeat Yourself _Too
  | Much_.
 
    | [deleted]
 
  | GiorgioG wrote:
  | I've worked at bigger companies and there are plenty of folks
  | much higher than 'middle dev' forcing these types of things
  | down the organization's throat.
 
    | lawn wrote:
    | Maybe even the CEO or CTO.
 
    | pc86 wrote:
    | You can certainly be a mid-level in skill but be a
    | senior/staff/principal at the company, or a
    | senior/staff/principal in _technical_ skill but middle or
    | junior in strategic or design skill.
 
      | [deleted]
 
___________________________________________________________________
(page generated 2022-03-08 23:01 UTC)