I read what the author is saying as “time is fixed, so I adjust the scope.” The problem is when product or management is demanding both fixed time and fixed scope. “Here’s a list of requirements (which are under defined and we will change without giving you a chance to estimate) and a set of figmas you must implement for those requirements (and also we will look at the finish product and decide not to give you any extra time to make changes we want or build a breakpoint not defined by the Figma that we demand), no how much time with this I’ll-defined, fixed-scope take?”
Fixed time and fixed scope is essentially impossible, except in trivial cases. What I read the author saying is that he chooses to make it fixed time and has flexibility around scope in his work, because the requirements are more like loose descriptions than a description of exactly what a product should do, while ignoring edge-cases. That sounds like a nice situation. And a perfectly fine way to manage an engineering team. But it also sounds a bit to me like an abdication of responsibility to the engineering team by product, to allow the engineering team to decide what exactly the scope is. Again, that’s a perfectly good way to do it, but it means that product can’t come back and say “that’s not what I was expecting, you didn’t do it.”
I don’t think the author really tackles estimation here, nor the reasons why estimation is a hard and controversial issue, nor what junior engineers are looking for when googling “how do I estimate?”
The real reason it’s hard in this industry is that in general, product controls both scope and time, which are the two major dials by which delivery is managed, but abdicate responsibility for them by going an ill-defined but nonetheless more fixed (and unyielding) scope than described in this article, then demanding engineers give them specific date estimates to which they’ll commit, and work free overtime if they turn out to be wrong.
The author correctly defines a way to resolve this conflict: give engineering more say over scope—but fails to recognize that the root cause is not poor estimation, but rather that product or management denies engineering much say over scope past the initial estimation, and then demands they set fixed dates they commit to before enough is known. Death march projects, in my experience, are generally a failure of product, not engineering.
The author talks about how software creation processes at large organizations are an artifact of how large organizations operate, but in all 3 of the 3 cases, I would ask “why does the large organization need to be that way?”
Most obviously, why do executives need to be the proxy to customers? Why can’t development teams simply talk to real customers? This isn’t just an abstract idea in agile, it grew out of actual Japanese product development practices practiced at large organizations: Toyota, Canon, and others, and documented in “The New, New Product Development Game” HBR review article that was so influential to early agile.
The point that in large organizations, most of the work is coordination, again demands the question, why? It’s been understood since at least World War I by some military planners (with organizations far larger than Google) that coordinating dependencies was far more complex than reducing or minimizing them. Goldratt wrote about it when designing a project management system for Theory of Contraints (indeed, you could argue this is a fundamental learning of ToC). And one of my favorite software conference talks of all time is Mary Poppendeck’s excellent “Tyranny of the Plan,” where she notes that as computer systems have been used in planning, we seem to have become more confident but no more competent in coordinating, rather than focusing on flow, in large-scale projects.
Finally, on the importance of software created at large organizations, I agree, something that will have millions of users on day one has a greater responsibility, but that doesn’t mean that loads of bureaucracy and checking are the pathway to quality software. First of all, does anyone believe that highly scrutinized and bureaucratic functions are general high quality services? The often provide access to even the most extreme edge cases, but they do so by reducing the quality of service to everyone else. Anyone who’s ever filled out their own tax forms in the United States knows that it covers every base of possibly income, but 80% of people really only need to be concerned with 2-3 common forms, and 99% could simply be asked about 10 forms or so. Instead we have to answer questions for “directors of foreign corporations who also happen to be Us citizens,” instead of just requiring those people to fill out an additional form. And, of course, to (probably badly mis-)quote Deming, “you can’t check quality into a product.”
I would turn it around in the author: yes, the software practices operate this way in large orgs because large orgs are structured differently—but why do large orgs need to be structured that way? Is it inherent when absentee owners with low domain context (shareholders) pass ownership over to a manager? Is it because hierarchies insulate good but not great managers from genuine value creation as long as they play politics well? Is it because these are first order ways to understand complexity, and again, low-context absentee owners aren’t going to do the work to understand the more complex dynamics at play?
> The point that in large organizations, most of the work is coordination, again demands the question, why?
You could say something similar about large-scale distributed software systems. A lot of it is just the nature of distributing and managing work across a collection of "nodes" or, as the case may be, people.
>First of all, does anyone believe that highly scrutinized and bureaucratic functions are general high quality services?
This is the only part of your response that doesn't quite sit right with me. There could be many "highly scrutinized and bureaucratic functions" out there that are working very well, you just don't notice because they work so well. There could be a selection-effect here.
Quality is a big deal for me[1]. But I think you're defining "quality" too narrowly in this context. "Quality" could also mean "allows everyone, at scale, reliably, to do what they need to do." The US Tax Filing system (and its associated software) meets that goal.
Oftentimes, broadly accessible services are lower quality than more personalized ones, to the consumer.
As an example in US government bureaucracy, government software teams digitizing forms at one point weren’t allowed to utilize features like autofill or automatically filling fields based on previous answers because it would relatively disadvantage users using paper forms.
Government capabilities do need to serve everyone, and from the perspective of the whole society that is beneficial, but they are often are of low quality to the individual consuming them for this very reason.
Let’s exclude taxes, because obviously many people would hate them under any circumstances. Does the government do a good job providing the other services people interact with regularly? Do people love their visits ti the DMV? Are they satisfied with their interactions with the police? Heck, in my town, just renewing a dog license is a pain.
> The US Tax Filing system (and its associated software) meets that goal.
I disagree with the argument that the US Tax Filing system meets the goal of:
> "allows everyone, at scale, reliably, to do what they need to do."
It may do so for easy / common cases of W2 salaried employees but step a little outside of the norm (foreign sourced income, tax treaties etc.) and software gives up and shows you a PDF of relevant forms and requires you to become an expert in tax code and to keep your own multi year running calculation of carryovers and things to proceed. I'm glossing over all of the detail about how complex this really is but wouldn't expect the average, even very intelligent person to succeed in filing a correct return without a professional's help.
my anecdata is that I have always filed manually by myself, but every time had a small adjustment made by the IRS... indeed filing a correct return the 1st time seems close to impossible.
Maduro, Castro, and Saddam Hussein are/were bad. Castro and Hussein, at least, committed murders to maintain power and Maduro pulled a coup after he lost an election.
Whether they were worth removing is another question, but if you could flip a switch and magically replace them with something better (with no cost and a guarantee the replacement would not be a murderous authoritarian) you would of course do it.
In 1988, Saddam Hussein dropped nerve gas on Kurds. Saddam was then a US ally and a foil against Iran. The US had propped up that war killing millions of Iraqis and Iranians for almost a decade for basically a net zero outcome. Why was Iran an enemy? Because the US deposed the democratically elected government in 1953 becasue they threatened to nationalize their own oil reserves.
Do you see a pattern here? Like at all?
The key point is that Saddam could drop nerve gas on Iraqi citizens and it still didn't change him being a US ally (and puppet). We don't care about someone being "bad". We never have. Saddam only ceased to become an ally when he invaded Kuwait and threatened our truly regional ally, Saudi Arabia.
All Castro did was overthrow Batisa, another US ally, and nationalize Cuban assets.
Hungary is a member of NATO and a US ally despite Viktor Orban essentially overthrowing democracy and genuinely being bad.
We helped overthrow Basher Al-Asaad. The al-asaads were former US allies too by the way. Why? Because now they were bad. Who is the new Syrian president? A man by the name of Ahmed al-Sharaa. Who is that you might ask? A former al-Qaeda leader, you know the guys were the Big Bad [tm] for 9/11. But that's OK, he (allegedly) cut ties with al-Aqeda in 2016 so all is forgiven. Let's not look too deeply into 15 or the 19 9/11 hijackers being Saudi.
Here's the lesson: whenever the US says someone is being punished, bombed, sanctioned, invaded or whatever because they're "bad" know that it's a lie. I mean they might be bad. But that's never the reason for whatever the latest punitive action is. Always, always, always the reason is become the interests of US foreign policy or Western companies is being threatened.
It's wild to claim Saddam was a US ally just two years before Iraq invaded Kuwait against US demands and got bombed by the US in the Gulf War. You are confusing offshore balancing between Iraq and Iran during the Iran-Iraq war with "ally". You need to look up the definitions of these words.
And to claim Assad was a US ally is even more outrageous, where to even start. He was a Russian ally and a Hezbollah ally, not a US ally. All of his military equipment came from Russia. All of his air support came from Russia. He allowed Iranian arms to flow to Hezbollah and was supported on the ground in Syria by Hezbollah. And he is now hiding in Russia playing video games after killing hundreds of thousands of civilians. He and the US had a common foe in ISIS for a period, but they were otherwise antagonistic over the duration of the civil war.
Saddam was a de facto US ally till 1988. The relationship ended with the end of their mutual interests.
US sent terrorism suspects to Bashar regime to be tortured after 9/11.
Yeah eventually both relationships fell out but all the vile things both did happened under US watch, and US only stepped in when political/economic clash happened.
We are adhering to definitions of words. The US engaged in classic offshore balancing by backing Iraq when Iran gained the momentum on the frontline. There was no alliance between Iraq and the US.
waiting for details on how "backing Iraq" is materially different from an "alliance" with Iraq...I'm hesitant to throw yet _another_ word into the mix but there's an entire wikipedia page on US "support" for Iraq.
I don't think anyone disagrees that the US is extremely hypocritical. The US has a long history of overthrowing democracies and supporting dictators, all in the name of "democracy" (oil, mostly).
That doesn't make Maduro a good guy, though. Nor Castro. Nor Batista, for that matter. And Orban is widely seen as Putin's ally in the EU. Most Europeans would rather be rid of him, but you can't just kick a country out of the EU, unfortunately.
Or Trump. He's as bad as the others. He'd certainly like to be. He wants to turn the US into the same kind of dictatorship.
> All Castro did was overthrow Batisa, another US ally, and nationalize Cuban assets.
That's not all. Castro also executed thousands creating a terror regime, nationalized American assets, funded and aided guerrillas in Latin America and Africa, aligned himself with the Soviet Union and caused the Missiles Crisis. He replaced a brutal dictatorship with another brutal dictatorship, a communist one, and ran the Cuban economy into the ground.
> Castro also executed thousands creating a terror regime
...so naturally, the solution is to make the life of the people under that regime even worse by sanctioning the country?
> nationalized American assets, funded and aided guerrillas in Latin America and Africa, aligned himself with the Soviet Union and caused the Missiles Crisis.
in other words, did things that threatened American interests.
The so-called Cuban Missile Crisis didn't begin on October 16, 1962. Nor did it begin when the Soviet Union put missiles on Cuban territory. It began when the US put nuclear missiles (Jupiter MRBMs) in Turkey, mere hundreds of miles from Moscow. Those were quietly removed months after the crisis because of a secret agreement between JFK and Khrushchev.
And yes, Cuba nationalized assets. As I said. You say that like it's a bad thing. Why is the US doing colonialism and imperialism a good thing that needs to be defended exactly?
And let's say Batista and Castro were both brutal dictatorships (which is what you said), why is one bad and one good? Why is one an ally and another a mortal enemy? You're making my point: the US does not and never has cared about people being bad or doing bad things. It's purely about economic interests. That's it.
Oh and Castro's involvement in Latin America? I'm sorry, what? From overthrowing the government in Guatemala in 1954 at the behest of a US fruit company to propping up Pinochet in Chile to Noriega in Nicaragua to El Salvador to Columbia and so on, let's compare Castro's impact and legacy to that of the US and see who has done the most harm, shall we?
The Cuban economy suffered because the US starved it. But of course Castro gets the blame for that too.
Yes, but the point is that sanctions don't get rid of those people, they're just collective punishment on the population. (Plus are used for propaganda if the blame for an economic crisis in a country is put entirely on its regime or economic system and the fact that the country is currently under sanctions is conveniently omitted. See again: Cuba, Venezuela)
At the end of the day the purpose of sanctions is to deliberately worsen the quality of life of the population in the sanctioned country. That can't be a tool for good.
The uncritical, unfounded, white supremacist equivalence of the names of Global South heads of state that share nothing other than their inclusion in the never-ending spectacle of a collapsing and always fascist empire’s hitlist. I’m reminded of how this abomination of a country relentlessly linked Marcus Garvey (Black nationalist and Capitalist) and W.E.B. DuBois (Black pan-Africanist and eventually communist) both with the label “Bolshevik” and “Communist threat” as justification for surveillance, incarceration.
This “dictator” meme, played out for the last 100 plus years is tired and tiring especially in a place that has a higher incarceration rate than USSR in the 1930s ( or Cuba ) and is currently snatching up folk for the crime of speaking Spanish, while US Southern Command blows up Venezuelan fisherman for the crime of feeding their families.
Two types of sales philosophies:
1. It doesn't matter what you're selling, it's about the sales technique.
2. Develop deep domain and customer expertise.
The former is the scammy type, the latter is the type we love to work with.
But the same is true in any industry. Too many of us in technology are doing the technology equivalent of 1--becoming experts in C++ or React--instead of becoming deep domain and user experts.
In software I like the person knows C++ or React in and out and I like the person who understands the domain, UX and such. I want both on the team.
I despise the guy who sells extended service contracts at the car dealership. I sure as hell don't want that guy selling software work because I won't be able to complete the work profitably and I'll be dealing with angry customers who don't trust me.
Although illegal now, San Francisco used to have a widespread practice of "key money"--a bribe you paid the landlord to choose you to rent the apartment that due to rent control or other factor was priced below market demand.
Because the landlord was capturing the extra value directly, a cultural practice of high broker fees never developed there, while it did in the east, where bribes were less common. Thus someone other than the landlord captured the excess value.
It's also entirely possible that the broker's fee is being illegally passed as "key money" to the landlord in a way that's harder to detect/litigate in NYC because it's not direct from the tenant.
The author leaves out what to me is the most compelling argument against static types: it is somewhat at odds with interactive development with a running system, as seen in smalltalk and lisp.
Now, not a lot of developers are really doing this. But it's still a good reason for those who are.
You wouldn’t use Astro with NextJS, but you absolutely would with react.
Astro is an SSR more tuned to generate static sites than SSR with hydration. It uses the islands architecture instead of full page re-hydration. So if you’re generating a static site with a few react components sprinkled in, it’s a good thing to use.
Because of the islands architecture, you can also mix and match component libraries. So one component can be react, one can be vue, one can be svelte, etc.
Next and remix are both less focused on SSG than Astro. A lot of people are making very content driven sites using react or Next—sites that aren’t really or shouldn’t be SPAs—and this is a great tool for content driven sites that don’t benefit from SPA-level interactivity (which is probably most sites using SPA frameworks)
How are Next and Remix less focused on SSR, I thought that was one of their main selling points? As well as static site generation. For example I use Next for a blog site that is SSG, works fine.
The islands architecture is interesting but in practice I doubt I'd swap between multiple component libraries.
Astro SSG and Next SSG have vastly different outputs. Astro's image component output is a prime example compared to Next with Astro being much, much cleaner. Astro's output in general is much cleaner, more streamlined, and less JavaScript heavy.
With the island architecture, it's not that you would switch between different architectures, but that you can choose which component framework you want to use on top of the same templating framework. Of course, you can mix and match, but that's not really the point.
If you haven't checked out Next.js in awhile, the next/image output changed recently. It's just an img tag now, basically setting srcSet automatically on easy mode, plus the automatic optimization of images. Most of the props or modifications you can use are native <img> features. It's similar to Astro (which is great!).
Next JS hydrates the entire page as a react component, so it's SSR on initial site visit and then navigating from there requires rendering (and maybe you'll use SSR to get some props).
Astro is actually an MPA that allows some client side components, so it only requires you to render on parts of the page. I prefer that for content heavy sites because I'm not sure how much interactivity I need.
This is Next.js in the "Pages Router" world (e.g. everything prior to 13.4). Past 13.4, you can also use the "App Router", which is kind of like a framework in a framework. It uses React Server Components, which can run server-only without hydration. Thematically similar to islands.
Remix is entirely SSR, so not sure what they meant. Next.js is static first, but definitely still supports dynamic. It started out as a dynamic, SSR framework.
Sorry, there was a typo. Astro is more focused on SSG than SSR. This is what happens when trying to comment on a phone keyboard first thing in the morning.
Fixed time and fixed scope is essentially impossible, except in trivial cases. What I read the author saying is that he chooses to make it fixed time and has flexibility around scope in his work, because the requirements are more like loose descriptions than a description of exactly what a product should do, while ignoring edge-cases. That sounds like a nice situation. And a perfectly fine way to manage an engineering team. But it also sounds a bit to me like an abdication of responsibility to the engineering team by product, to allow the engineering team to decide what exactly the scope is. Again, that’s a perfectly good way to do it, but it means that product can’t come back and say “that’s not what I was expecting, you didn’t do it.”
I don’t think the author really tackles estimation here, nor the reasons why estimation is a hard and controversial issue, nor what junior engineers are looking for when googling “how do I estimate?”
The real reason it’s hard in this industry is that in general, product controls both scope and time, which are the two major dials by which delivery is managed, but abdicate responsibility for them by going an ill-defined but nonetheless more fixed (and unyielding) scope than described in this article, then demanding engineers give them specific date estimates to which they’ll commit, and work free overtime if they turn out to be wrong.
The author correctly defines a way to resolve this conflict: give engineering more say over scope—but fails to recognize that the root cause is not poor estimation, but rather that product or management denies engineering much say over scope past the initial estimation, and then demands they set fixed dates they commit to before enough is known. Death march projects, in my experience, are generally a failure of product, not engineering.
reply