TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Production-Oriented Development

115 pointsby jgrodziskiabout 5 years ago

18 comments

tluyben2about 5 years ago
Right. Commenting on a very specific part of this with an anecdote. I did some integration with a ‘neo bank’ a few years ago where the CTO said testing and staging envs are a lie. I vehemently disagree(d) but they were paying to only test on production. I guess you can guess what happened (and not because of us as we spent 10k of our own money to build a simulator of their env; I have some kind of pride); testing was extremely expensive (it is a bank so production testing and having bugs is actually losing money... also they could not really test millions of transactions because of that so there were bugs, many bugs, in their system...), violated rules and the company died and got bought for scraps.<p>I understand the sentiment but I agree with 2, 3 and 6 of this article, the rest is, imho, actually dangerous in many non startup cases.<p>Example; Simple is always better IF you can apply it; a lot of companies and people you work with do not do so simple. A lot of companies still have SOAP, CORBA or in house protocols and you will have to work with it. So you can shout from the rafters that simple wins; you will not get the project. That can be a decision but I do not see many people who finally got into a bank&#x2F;insurer&#x2F;manufacturer&#x2F;... go ‘well, your tech is not simple in my definition so I will look elsewhere’.<p>It is a nice utopia and maybe it will happen when all legacy gets phased out in 50-100 years.
评论 #22398819 未加载
评论 #22399504 未加载
alkonautabout 5 years ago
This article makes a lot of assumptions that only hold true in a very specific set of circumstances:<p>- that it’s possible for the team developing the product to deploy or monitor it (example cases where it isn’t: most things that aren’t web based such as desktop, most things embedded into hardware that might not yet exist etc.)<p>- that <i>if</i> you can deliver continuously, customers actually <i>accept</i> that you do. Customers may want Big Bang releases every two years and reject the idea of the software changing the slightest in between.<p>- not validating a deployment for a long time before it meets customers is also only ok if the impact of mistakes is that you deploy a fix. If the next release window is a year away and&#x2F;or if people are harmed by a faulty product then you probably want it painstakingly manually tested.<p>My point is: if you are a team developing and operating a product that is as web site&#x2F;app&#x2F;service and you are free to choose if and when to deploy, then most of the article is indeed good advice. But then you are also facing the simple edge case among software deployment scenarios.
评论 #22399090 未加载
评论 #22399304 未加载
评论 #22398309 未加载
wgerardabout 5 years ago
Cool article, enjoy the summary of relevant knowledge that&#x27;s been passed around various circles.<p>I do disagree with:<p>&gt; Environments like staging or pre-prod are a fucking lie.<p>You need an environment that runs on production settings but isn&#x27;t production. Setting up an environment that ideally has read-only access to production data has saved a huge number of bugs from reaching customers, at least IME.<p>There&#x27;s just so many classes of bugs that are easily caught by some sort of pre-prod environment, including stupid things like &quot;I marked this dependency as development-only but actually it&#x27;s needed in production as well&quot;.<p>Development environments are frequently so incredibly far removed from production environments that some sort of intermediary between production is almost always so helpful to me that the extra work involved in maintaining that staging environment is well worth it.<p>It&#x27;s not the same as production obviously, but it&#x27;s a LOT closer than development.
评论 #22398585 未加载
jayd16about 5 years ago
Some good points but some controversial ones.<p>I think a manual QA team is very valuable. Sure the tests pass but what if the UI is confusing or disorienting. QA can be user advocates in a way a unit test can&#x27;t be. I work in games so maybe it&#x27;s just a squishier design philosophy but you can&#x27;t unit test fun.<p>I also don&#x27;t understand the worry about other environments. If you&#x27;re automating deployments how is another environment added work? Shouldn&#x27;t it be just as easy to deploy to?
评论 #22399465 未加载
评论 #22398735 未加载
cjfdabout 5 years ago
I think I disagree with this about 100%. Sure, production is what it is all about in the end. But how do you know the letters you just typed are going to be any good in production? They might just crash and burn there. That is why we need all those quality gates. The sooner and the farther removed from production that you discover a problem the easier it is to fix.<p>Regarding the &#x27;buy vs build&#x27; I think buying software is one of the most risky things that you can do. Since it cost money you cannot then say &#x27;o well, i guess it just did not pan out, let us just not use it&#x27;. Now you are kind of married to the software. And some of the worst software out there is paid for. E.g., jira vs. redmine. This is actually a bit ironic considering the fact that I actually am writing software in my job that is sold.... O well, it actually is sold as a part of a piece of hardware, so it is not really sofware as such.....<p>Regarding the last point, failure can be made uncommon if a relatively safe route to production is available, starting with a language that verifies the correct use of types, automated tests that verify the correctness of code, a testing environment that one attempts to keep close to what production is like and so on. Getting a call that production is not working is the event that I am trying to prevent by all means possible, and I think research would be able to show that people who get fewer calls, not just because production is failing, but in general, fewer calls regarding whatever subject, will live longer and happier.
评论 #22399321 未加载
评论 #22398095 未加载
评论 #22403420 未加载
nojvekabout 5 years ago
He lost me at “non production environments are bullshit”.<p>In dev you can break almost anything, no biggie. In stage if you break something, great just don’t deploy it to prod. If you break something in prod, well ... you may end up going below SLA and may legit lose money and your customers trust.<p>Don’t YOLO into prod. Build reliable shit.
maxwellgabout 5 years ago
Non-production environments are useful for more than testing application code. Changing underlying infrastructure (Upgrading a database, networking shenanigans, messing around with ELB or Nginx settings) requires testing too. Having the same traffic &#x2F; data shape in pre-prod is not as important.
sadness2about 5 years ago
Radical! Some counter-points, though.<p>- Infrastructure as code and schemas as code make it easier to keep environmental parity, because everything can be rolled back&#x2F;forwards&#x2F;reset with easy source control and CD operations. Visual environment diffing and drift detection can make this even easier.<p>- Make your stage and prod into a blue-green situation, where if stage is ready to go, you flip users onto it. I can guarantee your stage and prod will both be respected as prod then. Failing that, just add load&#x2F;stress tests to stage to make it more prod-like.<p>- Non-prod environments and attention are not necessarily debt, but they are expensive insurance premiums. You should only pay those premiums if you need the insurance. It&#x27;s about risk management.<p>- As time passes, the people who wrote a specific part of a system don&#x27;t know it anymore, so having them babysit &#x27;their&#x27; code in production has diminishing returns. On the other hand, having a systems quality team who have a broad mandate to bugfix, put in preventative measure, reduce technical debt, improve observibility and establish good patterns for developers to do these things, can enabled these things to actually happen, when just telling devs who are busy making features that they should happen often doesn&#x27;t make them happen. Also there are devs who enjoy creating new things, and others who love trouble-shooting and metrics.
ivan_ahabout 5 years ago
What exactly is would be the disadvantage of running something in stating environment before running it &quot;for real&quot; in production? I&#x27;m assuming the staging environment is an exact clone of production (except reduced size: fewer app servers + smaller DB instance)?<p>I understand the deploy-often-and-rollback-if-there-is-a-problem strategy, but certain things like DB migrations and config changes are difficult to rollback, so doing a dry run in a staging environment seems like a good thing...
capkutayabout 5 years ago
It&#x27;s funny in my career I&#x27;ve observed similar development styles. But I always just thought of this as great&#x2F;good developers verses average&#x2F;mediocre developers. the A+ coders would always make their code very easy to access, deploy from a user standpoint, debug, read etc. The mediocre guys would wait for someone else to hit a landmine beefore fixing something that was obviously wrong.
bob1029about 5 years ago
While I do not agree with everything presented in this article (especially item #2), I definitely share the overall sentiment.<p>For some of our customers, we operate 2 environments which are both effectively production. The only real difference between these is the users who have access. Normal production allows all expected users. &quot;Pre&quot; production allows only 2-3 specific users who understand the intent of this environment and the potential damage they might cause. In these ideal cases, we go: local development -&gt; internal QA -&gt; pre production -&gt; production actual. These customers do not actually have a dedicated testing or staging environment. Everyone loves this process who has seen it in action. The level of confidence in an update going from pre production to production is pretty much absolute at this point.<p>The amount of frustration this has eliminated is staggering. At least in cases where we were allowed by our customers the ability to practice it. For many there is still that ancient fear that if we haven&#x27;t tested for a few hours in staging that the world will end. For others, weeks of bullshit ceremony can be summarily dismissed in favor of actually meeting the business needs directly and with courage. Hiding in staging is ultimately cowardice. You don&#x27;t want to deal with the bugs you know will be found in production, so you keep it there as long as possible. And then, when it does finally go to production, it&#x27;s inevitably a complete shitshow because you&#x27;ve been making months worth of changes built upon layers of assumptions that have never been validated against reality.<p>This all said, there are definitely specific ecosystems in which the traditional model of test&#x2F;staging&#x2F;prod works out well, but I find these to be rare in practice. Most of the time, production is hooked up to real-world consequences that can never be fully replicated in a staging or test environment. We&#x27;ve built some incredibly elaborate simulators and still cannot 100% prove that code passing on these will succeed in production against the real deal.
评论 #22402195 未加载
luordabout 5 years ago
I agree with most of the points, but I have serious caveats on the first two.<p>1. No, the engineers should not by default be on call; the owners of the product are the first call line. If they&#x27;re not engineers or if they&#x27;re engineers but don&#x27;t have enough time to deal with all incidents–in short, if they need to delegate–they better be willing to pay <i>very</i> generously for the extra hours of on call duty.<p>2. No, hosted is not better than open source, both for philosophical and operational reasons: mostly, you become subject to the whims of the provider. A good compromise is <i>hosted open source</i> solutions, which at least takes you half way to a migration, if the need for one comes up.<p>That aside, I very much agree on everything else.
gfodorabout 5 years ago
I agree with most of this but the point about QA gating deploys should be amended. A 5 minute integration test on a pre-flight box in the production environment by the deploying engineer is a form of QA, and can catch a lot of issues. It shouldn’t be considered anti pattern. Manually verifying critical paths in production before putting them live is about the best thing you can do to ensure no push results in catastrophic breakage.<p>Without such a preflight box, or automated incremental rollouts, you are kind of doing a Hail Mary, since you are exposing all users immediately to a system that has not been verified in production before going live.
0x445442about 5 years ago
I agree with most everything said in the article but with a big condition. If I as an engineer am responsible for everything the author says I should be responsible for then I want total control of the tech stack and runtime environment.
VHRangerabout 5 years ago
Why would you ever share the medium version with all the added crud when the author has a version of the post on his personal blog?
zentropiaabout 5 years ago
I&#x27;m sorry but I&#x27;m tired of Medium paywall to the point I don&#x27;t want to read anything there.
评论 #22398944 未加载
评论 #22398764 未加载
banqabout 5 years ago
this is another Agile or DevOps
poloteabout 5 years ago
&gt; 2. Buy Almost Always Beats Build<p>Strongly disagree with that, well maybe it is a good idea when you are over founded by VC where cost of money is equal to zero and you don&#x27;t want to master what you are working on but in all other cases this is wrong, you shouldn&#x27;t rebuild everything from scratch but creating a company is not the same as playing with LEGO<p>And this is the same argument as saying you should have everything in AWS because if you self host you will have to hire devops engineer
评论 #22398587 未加载
评论 #22399258 未加载