[HN Gopher] Earning the privilege to work on unoriginal problems ___________________________________________________________________ Earning the privilege to work on unoriginal problems Author : donutshop Score : 84 points Date : 2023-08-26 12:45 UTC (1 days ago) (HTM) web link (landmines.substack.com) (TXT) w3m dump (landmines.substack.com) | dartos wrote: | [flagged] | zerbinxx wrote: | > Encore automates infrastructure for seamless development, from | local to your cloud. | | > Develop locally with instant infrastructure, preview PRs in | dedicated environments, and skip tedious Terraform with automatic | infrastructure setup in your cloud. | | If you thought this sounded like a sales pitch for bad | engineering practices, it's because it is. | | I find it very funny that a company hawking their mutant CI | "solution" talks so much about pmf when what they're selling is | pretty undifferentiated | hgsgm wrote: | [flagged] | mattgreenrocks wrote: | Am convinced there exists web tech that enables you to move fast | enough without requiring a full rewrite once you confirm product | market fit. Preferably with first class type safety throughout | (rules out RoR/Django). | | In ye olden days, we referred to this as "skill," but I'm more | sure we're allowed to talk like that now :) | Zetice wrote: | Why avoid the rewrite? Why require your work to be "skillful" | in the first place? Wouldn't it be better to focus all of your | time and effort on the hardest problem of all, finding | customers, and leave whatever wisps of brainpower you have left | to the initial implementation, until you can hire people | dedicated to that task? | | Engineers think a tech startup is mostly tech, but in reality | it's almost no tech at first. In fact, the more tech you | introduce early, the worse off you are. | Kalium wrote: | It's never product-market fit that requires a rewrite. It's | bumping into the limits of the tools you chose up front. In my | experience, that's mostly a function of how technologically | wrong your guesswork was. If you set out to build cloud cost | tracking but mostly build AWS accounting, that's pretty close | and you'll likely do fine. If you set out to build games and | wind up finding fit with an enterprise chat system, you're | likely to end of with a full rewrite no matter what web tech | you started with. | | In other words, I don't think there is any web tech that does | this because it's all about what's between the ears of humans. | cultofmetatron wrote: | Phoenix framework is what you're looking for. I can build out | mvps as quickly as in django/ror but the runtime perf is on par | with go or rust (for io bound stuff) | | Been in operation for 3 years and scaling has come out though | incremental improvements. no large scale rewrites needed. | | 1. out of the bod req/res time is fast | | 2. multiclustered websockets come out of the box with channels | for subscribing to events | | 3. easy to spin up a "service" as a genserver | | 4. best ecosystem of tooling for building asynchronous and | parrallel systems | | 5. liveview is THE standard for reactive frontend frameworks | where you are updating in real time from serverside html. (no | shade thrown on rails but hotwire is a joke by comparison) | liveview processers are persistent for the live of teh user | session and can subscribe to server side events so you can have | a user make a request, push the task into the background and | update the ui when its completed with very little code. | | ok so type safety isn't at ocaml, rust or haskell level but its | good enough that Its rarely the source of bugs assuming you | perform even minimal testing. | eropple wrote: | Phoenix is quite nice if you're coming to it from a | dynamically-typed environment, but I'd strongly dispute that | its type system is "good enough" at large (human, not | technological) scales. Phoenix itself makes good decisions in | a lot of places but it relies on things like Ecto for | database manipulation, which (as just one example) is | absolutely _not_ enough for substantiative, human-scalable | development--your "minimal testing" is my, as even a | comparatively easygoing TypeScript-down-the-stack enjoyer, _a | whole lot of extra stuff_. | | It also faces impedance mismatch with a lot of cloud tooling | --which is not a disqualifier by itself and BEAM might not | even be _wrong_ , but most Elixir-in-anger systems I've seen | end up abandoning much of the benefit of BEAM clustering and | running a bunch of horizontally scaled web applications | because they've got containers to manage and it fits the | overall get-it-out-the-door plan better. This makes things | like "just add another genserver" not really map to reality | all that well, though of course genservers are a good layer | of abstraction and modularization on their own. | | LiveView is great, though. I am hopeful for React server | components and server actions to continue to mature; they're | promising as it is. | cultofmetatron wrote: | > is absolutely not enough for substantiative, human- | scalable development | | you'll have to elaborate there. we have a pretty large | codebase at this point that serves 3 different apps. | granted our engineering staff is small but thats exactly | what makes elxiir so great. It lets you build scalable | infrastructure with a small team of humans | | > most Elixir-in-anger systems I've seen end up abandoning | much of the benefit of BEAM clustering and running a bunch | of horizontally scaled web applications because they've got | containers to manage and it fits the overall get-it-out- | the-door plan better. | | containers and clustering are not mutually exclusive. we | run a elxiir cluster and take advantage of that with shared | data and the ability to send mesages between each machine | in pure elixir. At the same time, each vm is running inside | a docker container managed with kubernetes. they work well | together. we had one instance where a vm went down and | kubernetes immediately brought it back up followed with it | connecting to its peers. | jiggawatts wrote: | I worked at a startup in the very early 2000s that was making | online games in Java. Think applets with 2D sprite graphics. | | They developed their own custom database, a shitty key value | store that didn't even have transactions because "Oracle doesn't | scale and it's too expensive". They couldn't make reporting work | so they copied the data hourly to Oracle anyway. (It turned out | that Oracle does scale.) | | They also invented their own RPC protocol, had their own | threading library, used an obscure build system, an even more | obscure SCM, etc... | | Nothing was standard. It was all bespoke, _webscale_ , and in- | house. | | When I started there as a junior they had me fix bugs in their | code. Instead, I would simply delete thousands of lines of | spaghetti and replace it with a call to a standard library. It | was like spitting into a volcano to put out the fires of hell | itself. There was no hope. | | They burned $10M and made $250K revenue and collapsed. | | Their competition used Oracle, ordinary tooling, and made tens of | millions in profit. | tikhonj wrote: | As a counterpoint, I interned at Jane Street about a decade ago | --when they were much smaller than now--and they also built | everything in-house. I'm not just talking about the | trading/finance-specific systems (I didn't interact with those | as an intern), but general-purpose internal tools: a code | review system, a pub-sub system, custom binary and text | protocols, lots of developer tooling, their own build system, | their own standard library and async runtime... All with <100 | developers _total_. | | And you know what? It worked _amazingly_ well. I 'm not just | talking about scale, but also about how much any single | developer seemed to be able to do. Their tools and APIs were | tastefully designed, tailored to their own needs and fit | together remarkably well. I remember that they were | consistently building things with just one or a handful of | people that would have taken multiple _teams_ at other | organizations I 've seen. | | Looking back, that was a remarkably productive engineering | environment _because of_ how much they were willing to do | themselves. The key insight is that building something for | yourself is qualitatively different from building something for | external consumption _or_ using something general-purpose that | already exists. You naturally tailor the code and tools to what | _you_ need, which is much easier than building something for | what you think _other_ people _might_ need--and, surprisingly | often, easier than bending a different tool to your own ends. | | But, perhaps more importantly, you develop a shared mental | model of the system you're developing and how it fits in with | everything else that you are doing. That shared mental model | is, ultimately, worth far more than the code by itself... but | it isn't legible to management, so it's hard to foster and | preserve without a strong engineering culture backing it up. | | The other lesson I took away from that experience (and others!) | is that the high-level questions people focus on ("buy vs | build", "monorepo vs polyrepo"... etc) are nowhere near | determinative. Whether or not any given approach works out | comes down far more to the little details and nuances of what | you're doing and how you're doing it, as well as a healthy | dollop of circumstances beyond your immediate control. | | At the end of the day, if _everything_ else was the same, but | the startup you 're talking about was using perfectly standard | and popular tools, would you expect the outcome to be any | different? I've seen far too many Enterprise-grade trash-fires | to believe that. If the core dynamics that led to a mess don't | change, you can have a "not invented here" mess or an | "Enterprise Best Practices" mess or a "buy everything, build | nothing" mess--but there's no simple strategic direction that | won't get you _some_ kind of mess. | walterbell wrote: | Was Jane Street searching for product-market fit? | | _> shared mental model of the system you 're developing and | how it fits in with everything else that you are doing. That | shared mental model is, ultimately, worth far more than the | code by itself... but it isn't legible to management, so it's | hard to foster and preserve without a really strong | engineering culture backing it up._ | | Sounds awesome, did they have engineering leaders with long | tenure? | canadianfella wrote: | Which company was the competition? | bfeynman wrote: | Kind of disagree with this, which seems outdated given that it | becomes easier and easier to implement best practices. Setting up | CI/CD for a basic MVP is trivial, making it super easy to | contribute makes iterations faster than just working on "product | fit" | [deleted] | Zetice wrote: | You'd be surprised by how few people find "Set up CI/CD for a | basic MVP" a trivial task. | fijiaarone wrote: | When something becomes too easy, a more complex, expensive, | brittle, slower, less flexible way of doing it will be | invested. | | Take GitHub Actions, for example. | PaulHoule wrote: | [flagged] | [deleted] | konschubert wrote: | This is basically the same as the boring technology essay, no? | | https://mcfunley.com/choose-boring-technology | leoqa wrote: | The same is true for operations, if your business scales using | humans you should avoid complicated tooling until you have | product market fit. An old CEO curbed my enthusiasm by telling me | "businesses are built on excel" and he was right. | kevingadd wrote: | I've spent a lot of time cleaning up the messes created by | Experts like the article's author and I'm simply not convinced. | It's easy to say "product market fit is King!!!" When you aren't | the one working long nights and weekends reverse engineering code | after a bug in pmf-hunting payment processing code made all | purchases free for a day. | | Stuff like ci lets you ship safely. | sanderjd wrote: | It's interesting to see how most of the comments here are | either "no, this is how lots of startups end up with a mess | they have to clean up" or "yes, lots of startups optimize this | stuff too early". | | And I think that's because both things are true! This is one of | the many hard parts about starting a brand new company, | figuring out the right balance to strike on this. It's no | surprise that companies mostly get it wrong, and in both | directions. | | There's no single right answer here. It depends on exactly what | the company does, the exact path to product market fit, what | growth looks like afterwards, and how lucky the guesses about | all that stuff were. | konschubert wrote: | You can use off-the shelf components and use boring | technology without making a big mess out of technical debt. | | The alternative to building your own DB isn't to put | everything into a big json file. | | The correct alternative is Postgres. | svachalek wrote: | Are there companies that die because they produced something | people loved and wanted to buy but just couldn't deliver | because off the shelf components were just too subpar? I | haven't seen that case. I have seen companies die trying to | perfect software no one is buying though, quite often. | brigadier132 wrote: | Of course companies have died because of quality issues. | Framing it as "they produce something people love but the | quality is subpar" is a false framing. | | There are no subpar products that people love. First of | all, "quality" is relative. See chatgpt, it's wrong half | the time, in a decade if someone were to release a chatbot | of chat gpt quality we would say it's terrible. But today, | it's the best we have. | | The classic story is how airbnb and stripe launched without | coding anything, everything was done manually. | | Now launch an airbnb competitor today using the same | strategy. Obviously comparing yourself to airbnb is dumb, | because back then _all_ software was terrible. | | The actually successful modern companies of the past few | years are openai, tiktok and figma. They all launched with | _complete_ products and are massively successful. That 's | what it takes today. | | > I have seen companies die trying to perfect software no | one is buying though, quite often. | | Most companies die. | kev_dev wrote: | There is a difference between "table-stakes" complexity and | premature complexity. I'd argue that a simple but sane CI / | deployment pipeline takes relatively little work to set up and | falls under "table-stakes" in that even a pre-pmf team will | have a positive ROI in doing it. | | On the flip side I have been the one working long nights and | weekends reverse engineering code by engineers who prematurely | built complexity into the system because they wanted to add a | GraphQL api in addition to a rest API. All while in the pre-pmf | days, with no value-add to the features that ultimately DID | find pmf. | | I do generally believe that cleaning-up after the pmf-hunting | phase is itself a privilege that many startups do not get to | experience, and should be treated as such. I understood the | author as arguing that we shouldn't chase shiny things and | should ruthlessly avoid complexity in favor of finding pmf. | This philosophy is clearly illustrated in the devtools startup | he is running. I thought there were some cool ideas there. | kevingadd wrote: | I simply reject the premise that all problems a startup needs | to solve are original problems. Your customers have lots of | ordinary problems too, as do you. Sure, you can't justify | spending months on building some custom GraphQL | infrastructure or the perfect CI/CD deployment system, but | your customers _do_ care about things like "when I download | and install this software it's not a corrupt build" and "the | software's updater works" and "when I pay these people money | for their software I get what I paid for and don't get | double-billed". These are all unoriginal problems that are | nontrivial - ideally your startup solves them with off-the- | shelf solutions to save time, but you still spend engineer | hours integrating those solutions. | hgsgm wrote: | Who is putting forth that straw premise? | kevingadd wrote: | The original author? | tombert wrote: | I think the overall point for this is fine, but I'd argue that | both Node.js and and MongoDB have basically crossed over into the | "boring" realm at this point. I see Node.js used in lots of | megacorporations, and I feel Mongo is more or less creeping its | way into megacorps to for "stuff that needs to be fast and I | don't care about ACID"; I think at this point I'd have to use one | innovation token to talk some companies _out_ of choosing | Node.js. | | That said, I do kind of hate this mentality; part of the reason | that crap like Java 8 refuses to die is because companies always | want to "established" tech, no matter how horrible of a fit it | is. | snowstormsun wrote: | Don't write your own CMS! | [deleted] | brigadier132 wrote: | Out of curiosity, how long do people think it takes to setup e2e | testing infra and ci/cd? Because for my startup I'm building as a | solo founder, it took me 2 weeks and I really just can't imagine | working any other way. | [deleted] | theptip wrote: | I view it more as a "% of resources" and "required number of | nines uptime" kind of thing. If you're a solo founder pre-PMF | or even pre-customers, pausing feature work to build infra for | 2 weeks is IMO often going to be excessive. | | If you have a couple engineers and you spend one engineer for | one sprint to get things running automated for the next | quarters push, that could be a good spend. | | The MVP of CI/CD is a few hours wiring up Gitlab/GH Actions. | The MVP of e2e tests is more variable but a moving skeleton can | be hours if no UI, days if including browser testing. | | However what makes sense for a first pass is very context- | dependent. | quickthrower2 wrote: | Yeah this startup stuff can feel like "don't waste time buying | a dishwasher for your cafe you just need to get coffee in | people's hands!". Just buy the dishwasher you know you will | need it. Unless the date is 1960 or something. | | The trick is: learn CI/CD at your job. When you work on your | startup it will be a trivial thing. I mean you probably will be | using Vercel or similar where it takes 120s to setup and deploy | from nothing. Most of that time is npm install on your machine. | | What about other things? k8s for instance? | | Simple: if it is second nature to you then you can use it. If | you can't fix 99% of the issues on the spot then don't. Pick | something else. | MaxwellKahn wrote: | I read the article as a general philosophy to spend more time | on the product instead of premature scaling optimization. If | e2e testing + ci/cd is cheap/easy and helps in your situation, | then that's what you should do. | | I feel the author is more criticizing the CTO who prematurely | decides to rewrite the infra to handle scaling to millions of | concurrent customers before they have those customers. | AlotOfReading wrote: | For my space, it takes months and hundreds of thousands of | dollars minimum to build new testing infra from scratch. You | get to choose how many of those dollars are spent on developer | salaries vs vendor solutions [0]. | | [0] https://www.dspace.com/en/inc/home/news/engineers- | insights/b... | brigadier132 wrote: | Hardware is a different game. | vbezhenar wrote: | For my projects I use containers. My rule is `docker build .` | in the project directory must build the project and run all the | necessary tests. It works for all technologies I had to use so | far. | | Making `docker build .` run on push is not a hard task and | probably could be done in a few hours with cloud services. I | spent a day to write a custom github workflow to run it on our | runner, but that's probably not needed for most people. | | After your OCI image is built, you can push it into the | registry. | | I guess that counts as CI. | | Now E2E tests: I don't know anything simple yet. I guess I can | hack together some script which will run docker compose and | invoke that script with github push webhook. Probably would do | it that way. Should work for not-so-complex projects. | MattPalmer1086 wrote: | Last startup I worked at spent a lot of time and money on | creating a scalable cloud infrastructure. And thought every | single thing we needed to do had to be written from scratch. And | then rewritten to be nicer. But no market fit was found, or even | an actual product at the end of the day. | malux85 wrote: | The last one I worked at was like this, due to its founder | being 19yo and extremely inexperienced. | | Raised 6M, no customers, no revenue, no product, a buggy, non- | functional MVP. | | 19yo founder was terrified to relinquish control to senior devs | because he was scared they would implement something he | wouldn't understand, so the company sat there burning cash | making tiny incremental improvements and flip flopping on | priorities as the new-shiny whims of the founder changed every | few days. | | I have no idea how he raised 6M, I think it was a combination | of lies and FOMO from latter investors. | | I tried my best to guide him and give advice but his ego was | out of control (but only backed by mediocre skill set) so I had | to leave when I realised I couldn't help anymore | rqtwteye wrote: | It always boggles my mind how these guys are raising that | much money without any plan. | jfengel wrote: | It's better without a plan. Plans have risks and | foreseeable problems. Handwavey dreams are all upside and | no downside. | | Of course you gotta find the guys with more money than | sense. They're not exactly thick on the ground but during a | boom cycle there seem to be quite a few. (Often the winners | of the last boom cycle, convinced that they were smart | rather than lucky.) | cultofmetatron wrote: | no kidding.. where are these investors?? | | my company raised a small round e years in. enough to keep us | engineers comfortable but no where near 6 million. meanwhile | my cofounders have years of experience in financial analysis | and running a restaurant while I have 10 years of experience | as an engineer before stepping in here as cto and first | technical hire. We actually do have traction and getting new | customers every day off a product that was self funded. I | can't understand investing 6 million on a 19 year old with no | experience with an ego fueled by insecurity. A startup needs | to be run like a phalanx because there isn't room for | redundancy and dead weight. And definitely can't afford to | stick to a ego fueled "vision." I trust my cofounders to do | their job and they in turn trust me. the "vision" should | always be about serving the users and thats pretty easy to | quantify if you are willing to humble yourself and engage | with them. | | the good news is we will have more favorable terms when we do | a series A. The good thing about starting a startup in a | recession is that you're more accountable to making your | business actually be something people want. | mgkimsal wrote: | A few years ago, if some angel or 'friend of family' had a | few hundred $k sitting around, they were getting 0 return | on it. Investing in speculative startup ideas was at least | a promise of a return. Now those same startup ideas are | going to be competing against 5% no risk return. Some of | the ideas like the one referenced above may not see | $6m-level funding activity again because of higher rates | now. | [deleted] | drBonkers wrote: | > A few years ago... a few hundred $k sitting around... | getting 0 return on it. | | People say this with poorly invested money all the time, | but I must be missing something. You could invest it in | an index fund, say the S&P 500, and annually yield over | 10% on average [1]. | | [1] https://www.officialdata.org/us/stocks/s-p-500/2016?a | mount=1... | Archelaos wrote: | > ... competing against 5% no risk return | | Until recently, this was less than inflation. A year ago | the inflation rate of the US$ was more than 8%. So the | net result when applying an interest rate of 5% was -3%. | Less than in most of the period before 2021 when assuming | an interest rate of 0%. I doubt that investors are not | aware of this, arn't they? | canadianfella wrote: | [dead] | liquidpele wrote: | Investors were probably "found" via friends of daddy. | asdff wrote: | Certain schools are charging people north of 100k in | tuition just because they can. Even at the ones that don't | you see students driving six figure cars somewhat bizarrely | regularly. It's not hard to imagine finding six people | whose parents can scrounge up a million in financing, | especially if you have sold the kid on your idea and they | seem passionate about it as their first big investment. | asdff wrote: | Part of the difficulty is navigating two sets of incentives. | While yes, you can write fast and loose code that only a mother | would love and do plenty of things much faster than whatever way | is perfectly orthodox and correct. However, to be competitive in | the job hunt, its expected people to have this portfolio of clean | model code that follows all the best practices. The startup could | fire you at any time, and you better have hoped you did your due | diligence to spend part of your time on your own marketability | instead of devoting it all to the startup, in this all too likely | situation. | mrfox321 wrote: | I think you overestimate the likelihood of being judged on code | in GitHub. | vegetablepotpie wrote: | I believe the term for this is _resume driven development_. | This also leads developers to focus on learning new | technologies and integrating them to their current project, | whereas what the business really needs are stable boring | solutions. Of course if developers do focus exclusively on | serving the needs of the business, they're not building up | their skills for their next job, and the business could still | fail for circumstances outside of their control. | | There's a software law called Teslers law [1], which says that | complexity cannot be eliminated, the most that can be done is | to shift it from one part of the system to the next. You can | make a similar law about _risk_. As a developer, if I ship a | build system (complete a project successfully), or I build | something with a new technology, I have a point to put on a | resume and a successful accomplishment to talk about in my next | interview. It may be that this is the wrong move for the | business. It may be that they need a crappy spaghetti code | abomination to achieve a product market fit in that time. If | founders know what's going on and they stipulate _boring | solutions_ the developer accepted risk. They've completely | invested in the business and are completely tied to the | decisions of their founders and leadership for their success. | | In a perfect world this would start a conversation about | compensation for accepting or balancing risk, but in my | experience this absolutely never happens because it gets | political. Leaders always win because they're better | politicians than developers. It's easy for leaders to be | willfully ignorant and dismiss these concepts as too detail | oriented, and devolves into leaders saying "we're nice people, | trust us". But the risk _is_ there and someone is accepting it | and developers respond to this by mitigating it on their end | deep in the implementation details. | | We have optimized at a local maximum, but are globally | suboptimal. I do not believe we'll ever achieve something more | optimal because in business climates, everyone is trying to get | something for very little effort. It takes much time to earn | trust, but very little time to destroy it. | | [1] | https://en.m.wikipedia.org/wiki/Law_of_conservation_of_compl... ___________________________________________________________________ (page generated 2023-08-27 23:00 UTC)