Unexpected Lessons I've Learned After 15 Years Of Coding
Resumo
TLDREn aquest vídeo, l'autor comenta un article que ofereix consells de programació que l'autor original hauria volgut saber fa 15 anys per millorar més ràpidament en programació. La reflexió es centra en evitar errors comuns del passat, com les solsucions temporals a problemes de codificació, utilitzar adequadament la revisió de sol·licituds de codi per aprendre una base de codi nova, i gestionar adequadament el balanç entre qualitat i rapidesa de desenvolupament segons el context. També es remarca la importància d'estar obert a aprendre constantment i millorar les habilitats tècniques, i la crítica constructiva dels errors per fomentar millores futures.
Conclusões
- 👨💻 Començar pel tab de PR pot oferir millor aprenentatge en codi massiu.
- ⚙ Solucions duradores són preferibles a pegats ràpids en el codi.
- 📈 Equilibrar qualitat i velocitat segons el context del projecte.
- 🔄 Errors ràpidament corregits poden augmentar la fidelitat dels usuaris.
- 💡 Millorar amb les eines tecnològiques és essencial per l'eficiència.
- 👥 Apprendre mitjançant les PR pot revelar més que llegir el codi directament.
- ❓ Fer i respondre preguntes 'tontes' fomenta l'aprenentatge.
- 🔍 Fem atenció a la complexitat incidental i mitiguem-ho.
- 📄 Escriure codi simple tendeix a escalar millor.
- 🛠 Trieu eines adequades i dominin-les per un treball més eficient.
- 🚀 Enfocar-se en enviar característiques ràpidament i sovint millora l'agilitat.
- 🤖 Aprofitar desplegaments automàtics ajuda en la resolució de problemes.
Linha do tempo
- 00:00:00 - 00:05:00
L'autor discuteix de com evitar crear vídeos de "Com aprendre a programar des del principi", però llegeix un article d'un amic programador que ofereix consells valuosos basats en les seves experiències personals. La idea és millorar més ràpidament i solucionar problemes de manera més eficient.
- 00:05:00 - 00:10:00
Es descriu una experiència amb el desenvolupament d'aplicacions iOS on es van resoldre problemes de crashtests de l'aplicació per actualitzacions en diferents fils. També es menciona com millorar el rendiment posant múltiples crides de base de dades en paral·lel.
- 00:10:00 - 00:15:00
L'autor expressa el valor d'un nou punt de vista en els projectes de programació i com el frescor d'una perspectiva nova pot ajudar a identificar problemes que han estat acceptats com a normalitat. Recomana escoltar atentament les impressions dels novells en un projecte.
- 00:15:00 - 00:20:00
S'explica com l'obsessió per la qualitat en detriment de la rapidesa pot ser perjudicial en la majoria d'aplicacions web. L'autor aconsella equilibrar entre qualitat i velocitat depenent del context i assumir els errors com a part de l'aprenentatge en projectes de poc risc.
- 00:20:00 - 00:25:00
S'emfatitza la importància de ser eficient amb les eines de desenvolupament i com això millora la productivitat. També es destaca que es necessita entendre bé les eines abans de descartar-ne una més senzilla i funcional.
- 00:25:00 - 00:30:00
L'autor parla sobre solucionar problemes de manera més profunda en lloc de fer pegats superficials i com això contribueix a crear una base de codi més neta i sostenible a llarg termini. S'encoratja a investigar i entendre les arrels dels problemes de programació.
- 00:30:00 - 00:35:00
Es recomana desplegar freqüentment i començar a pensar en el procés de desplegament des de l'inici d'un projecte. Això ajuda a detectar errors abans, facilita la reproducció de problemes i redueix la complexitat al treballar en entorns reals.
- 00:35:00 - 00:43:05
Finalment, s'anima a fer preguntes "estúpides" perquè sovint són el reflex de problemes més amplis o comunes que altres han temut mencionar. És important mantenir una comunicació clara i oberta entre els equips per resoldre problemes de manera més eficient.
Mapa mental
Perguntas frequentes
Quin consell es menciona sobre com aprendre un nou codi base?
Es recomana començar pel tab de sol·licituds de modificació (PR) per entendre millor les bases de codi grans, ja que la majoria del codi pot no haver estat tocat durant molts anys.
Quin enfocament es recomana per solucionar errors de codi de manera duradora?
Es destacava la importància de solucionar problemes de manera que impedeixin futurs errors en lloc de solucions temporals, com reordenar les actualitzacions d'estat per evitar valors nuls no desitjats.
Com es suggereix gestionar la qualitat del codi respecte a la velocitat de desenvolupament?
És essencial valorar el context del projecte per decidir l'equilibri adequat entre la velocitat de desenvolupament i la qualitat del codi, especialment en entorns on els errors no són crítics.
Quin benefici inesperat se cita dels errors de programari en un context de desenvolupament de startups?,
Feedback d'usuaris de programari que encara té errors pot resultar beneficiós per al desenvolupament si es corregeixen ràpidament, ja que els usuaris que experimenten una solució ràpida poden ser més fidels.
Què es recomana sobre la millora de les habilitats amb eines i tecnologies?
Es recomana ser proficient amb les eines de desenvolupament i estar disposat a aprendre constantment per millorar l'eficiència.
Per què es recomana iniciar amb la lectura de sol·licituds de modificació en un projecte nou?
Observant els canvis i què és discutit entre els membres de l'equip pot oferir un millor punt de partida que llegir línia per línia el codi existent.
Ver mais resumos de vídeos
Pericles' Athens
christina perri - jar of hearts [official music video]
No debí comprar esta Impresora 3D (Bambu LAb A1 Combo)
Miguel de Unamuno, Tragic Sense of Life | The Tragic Sense of Life | Philosophy Core Concepts
Status Quo Bias: If It Ain’t Broke, Why Fix It? - Cognitive Biases Series | Academy 4 Social Change
Robinhood Options Trading Portfolio | NVDA, AAPL, TSLA, META, AMZN | 11/22/24 | #Qqq #Spy #Robinhood
- 00:00:00we've all seen those click baity how I
- 00:00:03would learn to code if I started over
- 00:00:04videos and I always thought I would
- 00:00:07avoid making one and honestly I'm going
- 00:00:09to continue that said I saw this article
- 00:00:12and I was very excited for it so we're
- 00:00:14going to read it this is the closest
- 00:00:16you're ever going to get for one of
- 00:00:17those classic OG how I would learn to
- 00:00:19code from the start videos but I just
- 00:00:21want to read this blog post cuz it
- 00:00:22looked cool and the author's a bro so
- 00:00:24without further Ado let's dive into M
- 00:00:26Buffett's post a bunch of programming
- 00:00:28advice I'd give myself 15 years AG go I
- 00:00:30finally have the feeling that I'm a
- 00:00:31decent programmer so I thought it would
- 00:00:33be fun to write some advice with the
- 00:00:34idea of what would have gotten me to
- 00:00:36this point faster not claiming that this
- 00:00:38is great advice for everyone just that
- 00:00:39it would have been good advice for me
- 00:00:41let's see if it'll be good advice for me
- 00:00:42as well very curious this is a lot of my
- 00:00:45comments like to let me know I'm still
- 00:00:46clearly not a very good programmer teach
- 00:00:48theun if you or your team are shooting
- 00:00:50yourselves in the foot constantly fix
- 00:00:52the gun it's better not become anti-
- 00:00:54react I can't tell you how many times
- 00:00:56I've been on a team and there's
- 00:00:57something about the system that's very
- 00:00:59easy to screw up but no one thinks about
- 00:01:01ways to make it harder to make that
- 00:01:03mistake when I was doing iOS Dev used
- 00:01:05core data and subscribed to changes from
- 00:01:07a bunch of views the subscription
- 00:01:08callback came on the same thread that
- 00:01:10the change was triggered from sometimes
- 00:01:12that was the main thread and sometimes
- 00:01:14it was a background thread importantly
- 00:01:15in iOS Dev you can only make UI updates
- 00:01:18on the main thread or your app crashes
- 00:01:20so a new subscription could be working
- 00:01:22fine but then it would break when
- 00:01:23someone triggered an update from a
- 00:01:24background thread or if you add a UI
- 00:01:27update later on these are always really
- 00:01:28fun if you have some code that is
- 00:01:30working fine but it's on Main thread
- 00:01:31you're like oh for performance Reasons
- 00:01:33I'm going to move it and then don't test
- 00:01:35it thoroughly enough and then it breaks
- 00:01:37for your users I've seen this in all
- 00:01:38sorts of things this is not exclusive to
- 00:01:40iOS this is development of applications
- 00:01:42this was just something that people
- 00:01:44transparently accepted and often came up
- 00:01:46in reviews for newer people on the team
- 00:01:48every now and then one would slip
- 00:01:49through and we'd go at a dispatch q.
- 00:01:52main. async when we saw the crash report
- 00:01:54I decided to fix it and it took 10
- 00:01:56minutes to update a subscription layer
- 00:01:58to call subscribers on the main thread
- 00:01:59itself which eliminated a whole class of
- 00:02:01crashes and a bit of mental load I'm not
- 00:02:04trying to be like look at these idiots
- 00:02:06not fixing an obvious issue with the
- 00:02:08code base when it was obvious to me
- 00:02:10because it would have been obvious to
- 00:02:11anyone who thought about it for a few
- 00:02:13minutes I had one of these recently
- 00:02:15where I was helping a certain
- 00:02:16undisclosed application that had a
- 00:02:18certain massive Bill and a really slow
- 00:02:21site on a certain service and when I
- 00:02:24looked at their code they had like five
- 00:02:27plus Prisma database calls on every API
- 00:02:30endpoint all blocking even though they
- 00:02:33had no data in common so they had a big
- 00:02:36await block before you even start the
- 00:02:39request just to get the user data then
- 00:02:40they had another giant await huge query
- 00:02:43to get some more data then right after
- 00:02:46three more queries and I was able to
- 00:02:49Forex their performance by just taking
- 00:02:51all those queries and putting them in a
- 00:02:53promise.all so that they could all run
- 00:02:55in parallel instead of individually do I
- 00:02:58think those devs suck I'll mence my
- 00:03:00words but theoretically any of them
- 00:03:01could have looked at and been like yeah
- 00:03:03that's dumb we probably shouldn't do it
- 00:03:04that way it's not that I am so much
- 00:03:06better than those other devs it's just
- 00:03:08that I've done it more I care a lot and
- 00:03:10I'm a fresh set of eyes on the code base
- 00:03:12it's like yeah this should be better and
- 00:03:14as the author says here these things
- 00:03:15tend to stick around a weird amount
- 00:03:17because there's never a natural time to
- 00:03:18address them I see this so often
- 00:03:21especially with performance stuff
- 00:03:22because if your performance sucks when
- 00:03:23do you fix it usually when it sucks so
- 00:03:25bad that it's causing problems and not
- 00:03:27until then when you're first getting
- 00:03:28onboarded you're not trying to change
- 00:03:30anything big I I an exception here I I
- 00:03:33have had times where I joined a code
- 00:03:35base that was massive and I was like
- 00:03:37wait you guys aren't using prettier you
- 00:03:39guys don't have slint setup it's 2024
- 00:03:42and you're still writing this JavaScript
- 00:03:44like it's the the early 2000s and I've
- 00:03:46had times where my first poll request to
- 00:03:48a repo was like 100,000 line change and
- 00:03:50everyone hated me but then a week later
- 00:03:51they liked me but yes you probably
- 00:03:53shouldn't be trying to change anything
- 00:03:55big what you should be doing is reading
- 00:03:56the poll request tab you know what I'm
- 00:03:58going to do I'm going to in parallel
- 00:04:01write my advice to younger Theo advice
- 00:04:04to younger Theo and I expect this to be
- 00:04:07different but have overlap in the
- 00:04:09lessons the first one I want to put in
- 00:04:11here is don't learn a code base through
- 00:04:14the code
- 00:04:17tab start in the pr tab I've said this
- 00:04:20for a while and I'll continue
- 00:04:21emphasizing it when you're working on a
- 00:04:23big code base for the first time the
- 00:04:25worst thing you can do is start by
- 00:04:27reading the code because in a giant code
- 00:04:29base the the vast majority of the code
- 00:04:31hasn't been touched possibly for a
- 00:04:33decade even 90% plus of the code in a
- 00:04:36big code base just doesn't get touched
- 00:04:40and if you spend all your time trying to
- 00:04:41read and understand that code you're
- 00:04:43screwed but if you go and read a whole
- 00:04:45bunch of poll requests you see what is
- 00:04:47merging what people push back on what is
- 00:04:49changing and why it's changing your
- 00:04:52understanding of that codebase will be
- 00:04:53significantly better than if you just
- 00:04:55try to read it line by line in fact if
- 00:04:56you had two people one who has read all
- 00:04:59of the code and one who has read half
- 00:05:01the poll requests I promise you the one
- 00:05:03who's read half the poll requests
- 00:05:05understands the code Bas significantly
- 00:05:06better than the person who seen every
- 00:05:08line of code in it guaranteed yeah back
- 00:05:10to the article as they said when you're
- 00:05:12first getting onboarded you're not
- 00:05:13trying to change everything and
- 00:05:14certainly not anything big so you may
- 00:05:16think it's weird but you shouldn't go
- 00:05:17changing a bunch of things that you're
- 00:05:18still learning about then when you've
- 00:05:20been on the team for a while it sort of
- 00:05:22just Fades into the background I really
- 00:05:24like this framing because if you show up
- 00:05:25to a new code base and you're like this
- 00:05:28seems wrong you're often too scared to
- 00:05:30do the right thing and then after a
- 00:05:32while once you're comfortable it's now
- 00:05:34become normalized to you that's a really
- 00:05:36good framing I had not thought of before
- 00:05:38and it's actually something I try to
- 00:05:39index on when I'm running teams I'm
- 00:05:41going to add another point to my takes
- 00:05:44which is it's very easy to get into the
- 00:05:47state where if somebody new is showing
- 00:05:49up on the project they haven't touched
- 00:05:51it all before and they say hey these
- 00:05:52things are weird you're like oh don't
- 00:05:54worry you'll get used to it but you're
- 00:05:56saying that because you yourself are
- 00:05:57used to it it doesn't mean it's normal
- 00:06:00doesn't mean it's good so what I've
- 00:06:02learned to do is listen extra carefully
- 00:06:05when the dev shows up on the project for
- 00:06:07the first time what stands out to them
- 00:06:10what went wrong in the onboarding what
- 00:06:11was unclear when they started reading
- 00:06:13through the code what made their first
- 00:06:14poll request hard to do you don't get
- 00:06:16that feedback from your existing devs
- 00:06:18because they're all stock homed into it
- 00:06:20so the only way you can actually improve
- 00:06:23on those metrics is by taking massive
- 00:06:26advantage of the unique opportunity of a
- 00:06:28Dev trying out your code base and trying
- 00:06:29to contribute to it for the first time
- 00:06:31that's a rare experience and if you want
- 00:06:33it to be better for the next Dev listen
- 00:06:35very carefully to the current one who's
- 00:06:37onboarding right now and I I couldn't
- 00:06:38agree more that this is super common
- 00:06:40that devs are scared to make the big
- 00:06:42change based on what they expect and
- 00:06:44then by the time they have the
- 00:06:45confidence is too normalized and they
- 00:06:47move on it's a mindset shift you just
- 00:06:50need to occasionally remind yourself
- 00:06:52that you are capable of making you and
- 00:06:53your team's life easier when these sorts
- 00:06:55of things are hanging around absolutely
- 00:06:58absolutely agree first there's actually
- 00:07:00a good question here do you worry that
- 00:07:02person is coming in and trying to make
- 00:07:03what is comfortable to everyone else
- 00:07:05more comfortable for them or what
- 00:07:06they're used to seeing that's a
- 00:07:07conversation to have but chances are if
- 00:07:10you're showing up and you've worked in
- 00:07:12other code bases especially at a company
- 00:07:14like I when I was at twitch I touched
- 00:07:16like probably 20 plus code bases in a
- 00:07:18meaningful way and when I was working on
- 00:07:20most of them the tooling was relatively
- 00:07:22consistent there was obviously lots of
- 00:07:24differences between them but then when I
- 00:07:25would show up in another code base from
- 00:07:27a different team be like oh you guys are
- 00:07:28just behind the standards of the rest of
- 00:07:31the company can I propose some changes
- 00:07:34to make these things a little more in
- 00:07:35sync and usually a couple do would push
- 00:07:37back but a few others would be like yeah
- 00:07:39I worked on two other code bases here
- 00:07:40and those were better we should have
- 00:07:42that here too and as long as you can
- 00:07:44build a few allies and have a good
- 00:07:45conversation these changes are almost
- 00:07:47always worth doing and talking about
- 00:07:49back to the article assess the trade-off
- 00:07:51that you're making between quality and
- 00:07:53pace and make sure it's appropriate for
- 00:07:54your context Banger after Banger damn
- 00:07:57there's always a trade-off between
- 00:07:58implementation and how confident you are
- 00:08:00about correctness so you should ask
- 00:08:02yourself how okay is it to ship bugs in
- 00:08:04my current context if the answer to this
- 00:08:06doesn't affect the way you work you're
- 00:08:08being overly inflexible what a banger
- 00:08:11God coming out stronger than even me on
- 00:08:13it what a way to say unit tests are
- 00:08:15useless if they're useless to you so
- 00:08:17yeah obviously I agree I think that the
- 00:08:20way you write software that failures
- 00:08:22would kill people should be very
- 00:08:23different from the way you write
- 00:08:24software where failures mean they don't
- 00:08:26get a fancy Emoji when they hit a button
- 00:08:28quite as fast as they would otherwise
- 00:08:30it's important to recognize the the
- 00:08:32difference in these types of things
- 00:08:34where certain Services should never fail
- 00:08:36ever and if they do people die and then
- 00:08:38there's other services like especially
- 00:08:40in the startup world where as
- 00:08:41unintuitive as it may seem failures
- 00:08:43might actually be somewhat good an
- 00:08:45interesting thing we learned when we
- 00:08:46were running ping is that if we had two
- 00:08:48customers one had no issues they signed
- 00:08:50up and everything went well and then one
- 00:08:52customer had some issue big small
- 00:08:55whatever and they report it to us if we
- 00:08:57fix that issue for them fast enough and
- 00:08:59we get them involved in the conversation
- 00:09:01so they feel listened to understood and
- 00:09:03cared for the customer that had the bug
- 00:09:05will be more loyal than the one who
- 00:09:07didn't so if we had built everything in
- 00:09:09a way where it's harder to write bugs we
- 00:09:11might have had less happy customers not
- 00:09:13even accounting for the fact that if we
- 00:09:15slowed things down enough to never ship
- 00:09:16bugs we would never have shipped a lot
- 00:09:18of the features that our users wanted
- 00:09:19and if they did still run into bugs it
- 00:09:21would have taken us even more time to
- 00:09:22fix them so ignoring all of that having
- 00:09:25bugs was still better in our context in
- 00:09:27scenario we making Medical where that
- 00:09:29would not be the case we're making a
- 00:09:31silly app for streamers to collaborate
- 00:09:33very different use case very different
- 00:09:35results very very different context and
- 00:09:38you should adjust the way you work based
- 00:09:40on that context couldn't agree more at
- 00:09:43my first job I was working on Greenfield
- 00:09:45projects around data processing which
- 00:09:47had good systems in place for
- 00:09:48retroactively reprocessing data the
- 00:09:50impact of shipping a bug was very minor
- 00:09:52the proper response to that environment
- 00:09:54is to rely on the guard rails a bit move
- 00:09:56faster because you can you don't need
- 00:09:58100% test cover or an extensive QA
- 00:10:00process which will slow down the pace of
- 00:10:02Dev at my second company I was working
- 00:10:05on a product used by tens of millions of
- 00:10:07people which involved high value
- 00:10:08financial data and personally
- 00:10:10identifiable information even a small
- 00:10:12bug would entail a postmortem I shipped
- 00:10:14features at a snails pace but I also
- 00:10:16think I may have shipped zero bugs that
- 00:10:18year usually you're not at the second
- 00:10:20company I've seen a lot of devs air on
- 00:10:22the side of that sort of programming
- 00:10:24though I couldn't agree more even when I
- 00:10:27was at twitch I found a lot of teams
- 00:10:28trying to meet like Amazon's reliability
- 00:10:31standard it's twitch I loved
- 00:10:34working at twitch it was a great company
- 00:10:36building awesome things and I'm
- 00:10:37streaming live on Twitch right now by
- 00:10:38the way every Wednesday live on Twitch
- 00:10:40if you want to see how I record these
- 00:10:41videos and hang out and chat with my
- 00:10:43homies here twitch is a great place to
- 00:10:44work twitch is a really cool product
- 00:10:46twitch does not need to have six NES of
- 00:10:48reliability and if that results in a
- 00:10:50shipping worse features slower it's a
- 00:10:52mistake and the fact that we had such
- 00:10:54insane code coverage rules was just
- 00:10:56obnoxious it actually resulted in us not
- 00:10:59shipping things well pretty regularly a
- 00:11:01story I tell a lot because it haunts me
- 00:11:03is that we had I think there was 80 or
- 00:11:0590% code coverage as a rule I had a
- 00:11:07feature that we rewrote to be about a
- 00:11:10tenth as much code so we had the old
- 00:11:12version which was let's make up numbers
- 00:11:15um let's say 100,000 lines of code and
- 00:11:17we had the smaller version which was
- 00:11:1810,000 lines of code both are probably
- 00:11:2010x smaller doesn't matter the 100,000
- 00:11:22line of code version had code coverage a
- 00:11:24bit over 80% the 10,000 line of code
- 00:11:27small version had code coverage at 100%
- 00:11:30both were in the project because it was
- 00:11:32feature flagged so you'd get one or the
- 00:11:34other we had moved 100% of users over to
- 00:11:36the new one the new one was faster it
- 00:11:38had new features users liked it more
- 00:11:40you're ready to go okay so it's time to
- 00:11:42deprecate the old one to delete that
- 00:11:44100,000 line of code mess I never could
- 00:11:46delete it because deleting it put us
- 00:11:49just below the code coverage threshold
- 00:11:51even though the feature I replaced it
- 00:11:52with had better code coverage it didn't
- 00:11:55matter because the pure number of lines
- 00:11:57of code that were tested being removed
- 00:11:59was enough to just barely drop us under
- 00:12:01the threshold and I would not be
- 00:12:03surprised if that giant pile of unused
- 00:12:06code still existed in the twitch code
- 00:12:08base simply because deleting it hurt a
- 00:12:11metric that didn't matter for a product
- 00:12:13where people can play games and talk to
- 00:12:14each other that is every layer of that
- 00:12:17is stupid every single one and even if I
- 00:12:19loved working at twitch that's just
- 00:12:21proof of how dumb this is the only code
- 00:12:23coverage number that's acceptable is
- 00:12:25100% And even that is dumb too yeah I I
- 00:12:27digress anyway
- 00:12:30as they were saying usually you're not
- 00:12:31at the second company I've seen a lot of
- 00:12:33devs air on the side that of that sort
- 00:12:35of programming though in situations
- 00:12:36where bugs aren't Mission critical which
- 00:12:38is 99% of web apps totally agree you're
- 00:12:41going to get further with shipping fast
- 00:12:43and fixing bugs fast than you would
- 00:12:44taking the time to make sure you're
- 00:12:46shipping pristine features on your first
- 00:12:48try totally agree and I also agree that
- 00:12:51good test should not think about code
- 00:12:52coverage percentages but if you're going
- 00:12:54to enforce one the only percentage of
- 00:12:56code coverage that makes any sense at
- 00:12:57all is 100 still doesn't make much sense
- 00:12:59but at least it makes some a less than
- 00:13:01100% number nonsense useless throw it
- 00:13:04away next Point spending time sharpening
- 00:13:07the a is almost always worth it Prime is
- 00:13:09going to love that one you're going to
- 00:13:11be renaming things you're going to be
- 00:13:12typing type definitions finding re
- 00:13:14references Etc a lot and you should be
- 00:13:16fast at this you should know all of the
- 00:13:18major shortcuts in your editor you
- 00:13:20should be a confident and fast typist
- 00:13:22you should know your OS well you should
- 00:13:24be proficient in the Shell you should
- 00:13:26know how to use the browser Dev tools
- 00:13:27efficiently and effectively I can can
- 00:13:29already tell people are going to be in
- 00:13:30the comments like you can't just spend
- 00:13:31all day tweaking your neovim config I
- 00:13:33mean if you become a YouTuber that talks
- 00:13:35about neovim you can but I digress
- 00:13:37sometimes you need to chop the tree too
- 00:13:39I don't think I've ever seen someone
- 00:13:40actually overdo this though one of the
- 00:13:42biggest green flags I've seen in new
- 00:13:43Engineers is a level of care in choosing
- 00:13:45and becoming proficient with their tools
- 00:13:47you know
- 00:13:48what fine my issue is never that
- 00:13:51somebody's really excited about NE ofm
- 00:13:53is when they shame others for being less
- 00:13:54excited if you want to go all in on NE
- 00:13:57and really care about the cooling
- 00:13:59experience that you have A+ if you're
- 00:14:01going to make fun of me for saying vs
- 00:14:02code is good enough get off my team
- 00:14:05that's my line also on that note before
- 00:14:07I forget I went through this phase so I
- 00:14:09can talk all the I want I still
- 00:14:11spent a whole summer at Amazon
- 00:14:14configuring my I3 t-u neovim everything
- 00:14:18because I wanted to be a real legit
- 00:14:20hacker so I could feel less like an
- 00:14:21impostor and learning those skills
- 00:14:23helped me a ton I got way better at ins
- 00:14:27and outs of navigating
- 00:14:29complex developer environments that all
- 00:14:31said once I got a Macbook I kind of just
- 00:14:34drifted towards full screen vs code and
- 00:14:37I've been happy with it since but like I
- 00:14:39had to do my time in the trenches of a
- 00:14:41crazy complex developer experience setup
- 00:14:44that I owned all of and was really
- 00:14:45confident in before I could make that
- 00:14:47shift with similar confidence where I
- 00:14:49just live in command Tab and Tilda and
- 00:14:51as you guys can see I have very little
- 00:14:52stuff open cuz I don't need to have a
- 00:14:54whole lot of stuff
- 00:14:55open next point you can't easily explain
- 00:14:58something is difficult then it's
- 00:15:00incidental complexity which is probably
- 00:15:02worth addressing I love that I love this
- 00:15:04point if you can't say why it's complex
- 00:15:07you should fix it like this is hard is
- 00:15:11not a good answer this is hard because A
- 00:15:13and C where those things are simple
- 00:15:15that's a good answer my favorite manager
- 00:15:17in my career had a habit of pressing me
- 00:15:19when I would claim something was
- 00:15:20difficult to implement often his
- 00:15:22response was something along the lines
- 00:15:23of isn't this just a matter of sending
- 00:15:25up X when we y or isn't this just like Z
- 00:15:28that we did a couple months ago very
- 00:15:29highlevel objections is what I'm trying
- 00:15:31to say not on the level of the actual
- 00:15:33functions and classes that we were
- 00:15:35dealing with which is what I was trying
- 00:15:36to explain I think conventional wisdom
- 00:15:38is that it's just annoying when managers
- 00:15:40simplify things like this I know I've
- 00:15:42pissed off a lot of people doing that
- 00:15:44but a shockingly high percentage of the
- 00:15:46time I'd realized when he was pressing
- 00:15:47me that most of the complexity I was
- 00:15:49explaining was incidental complexity and
- 00:15:51that I could actually address that first
- 00:15:54thus making the problem as trivial as he
- 00:15:55was making it sound this sort of thing
- 00:15:57tends to make future changes easier as
- 00:15:59well I'll drop the hot take of this is
- 00:16:01why I like react and a lot of the new
- 00:16:02react stuff is once you stop thinking
- 00:16:05about those details and you plan the
- 00:16:07system and make decisions around the
- 00:16:09design I actually find it to be much
- 00:16:11easier to both build and reason about
- 00:16:13and then longterm most importantly makes
- 00:16:15it easier to maintain these are all good
- 00:16:18things try to solve bugs one layer
- 00:16:20deeper ooh and react's already coming up
- 00:16:23oh boy imagine you have a react
- 00:16:24component in a dashboard that deals with
- 00:16:26a user object retrieved from state of
- 00:16:28the currently logged in user you see a
- 00:16:30bug report in Sentry Sentry plug Channel
- 00:16:32sponsor they're not sponsoring this
- 00:16:33great product for debugging stuff though
- 00:16:35you see a bug in Sentry where user was
- 00:16:37null during render you could add a quick
- 00:16:39if no user returned null or you could
- 00:16:41investigate a bit more and find that
- 00:16:43your logout function makes two distinct
- 00:16:44State updates the first is setting the
- 00:16:47user to null and then the second is
- 00:16:48redirecting the user to the homepage you
- 00:16:50swap the two and now no component will
- 00:16:52ever have this bug again because the
- 00:16:54user object is never null when you're
- 00:16:55within the dashboard keep doing the
- 00:16:57first sort of bug fix and you end up
- 00:16:59with a mess keep doing the second type
- 00:17:01of bug fix and you'll have a clean
- 00:17:02system and a deep understanding of the
- 00:17:04invariance makes perfect sense it's so
- 00:17:06tempting to just if no user return null
- 00:17:09I will say as a huge react query fan
- 00:17:11I've been guilty of this where I solve
- 00:17:13those error cases where they're coming
- 00:17:15up with errors but since especially with
- 00:17:17like the new model I find myself just
- 00:17:19defining within the call the right thing
- 00:17:22the update to set things to null should
- 00:17:23also send you to the right place I
- 00:17:25absolutely agree you should aim for the
- 00:17:27second type of fix don't underestimate
- 00:17:29the value of digging into history to
- 00:17:31investigate some bugs again reading PO
- 00:17:33requests all that stuff really really
- 00:17:35good strategies I've always been pretty
- 00:17:37good at debugging weird issues with the
- 00:17:38usual toolkit of print line and the
- 00:17:40debugger so I never really looked at get
- 00:17:42much to figure out the history of a bug
- 00:17:44but for some bugs it's crucial I
- 00:17:45recently had an issue with my server
- 00:17:47where it was leaking memory seemingly
- 00:17:49constantly and then getting out of
- 00:17:50memory killed and restarted I couldn't
- 00:17:52figure out the cause of this for the
- 00:17:53life of me every likely culprit was
- 00:17:55ruled out and I couldn't reproduce it
- 00:17:57locally it felt like throwing darts
- 00:17:59blindfolded I've certainly had bugs that
- 00:18:01felt like that and it is miserable I
- 00:18:03looked at the commit history and found
- 00:18:04that it started happening after I added
- 00:18:06support for Play Store payments never a
- 00:18:08place I would have looked in a million
- 00:18:09years it's just a couple of HTTP
- 00:18:11requests turns out it was getting stuck
- 00:18:13in an infinite Loop of fetching access
- 00:18:15tokens and after the first one expired
- 00:18:17maybe every request only added a
- 00:18:18kilobyte or so to the memory when
- 00:18:20they're retrying every 10 milliseconds
- 00:18:22or so on multiple threads that starts to
- 00:18:24add up quick and usually this is the
- 00:18:26sort of thing that would have resulted
- 00:18:27in a stack Overflow but I was using
- 00:18:29async recursion in Rust which doesn't
- 00:18:31stack
- 00:18:32Overflow rust is a great programming
- 00:18:35language this never would have occurred
- 00:18:36to me but when I'm forced to look into a
- 00:18:38specific bit of code that I know must
- 00:18:40have caused it suddenly the theory pops
- 00:18:42up I'm not sure what the rule is here
- 00:18:44for when to do this and when not to it's
- 00:18:46intuition based in a different sort of
- 00:18:47huh to a bug report that triggers this
- 00:18:50sort of Investigation you'll develop the
- 00:18:52intuition over time but it's enough to
- 00:18:53know that sometimes it's invaluable if
- 00:18:55you're
- 00:18:56stuck along similar lines try out get
- 00:18:59bisect if the problem is amendable to it
- 00:19:02meaning a g history of spa commits a
- 00:19:04quick automated way to test for the
- 00:19:06issue and you have one commit you know
- 00:19:08is bad and one that's good I'm going to
- 00:19:09go a slightly weird angle with this for
- 00:19:11my own
- 00:19:13advice make it
- 00:19:15deploy then make it useful I'd find that
- 00:19:19a lot of devs early on especially myself
- 00:19:21would spend so much time trying to make
- 00:19:22the code work locally on their machine
- 00:19:24that by the time they had it working it
- 00:19:26was already complex enough to deploying
- 00:19:28it was nonviable with modern tools that
- 00:19:31make CI and CD easy like forsell netlify
- 00:19:34any of these other options you can just
- 00:19:35link your project to a GitHub repo and
- 00:19:38now it will auto deploy Auto build and
- 00:19:42auto publish any changes you make when
- 00:19:44you push up the commits which makes it
- 00:19:46significantly easier in a situation like
- 00:19:48this where you're trying to figure out
- 00:19:49which commit broke you're trying to
- 00:19:50figure out why deploy aren't working or
- 00:19:52why out of memory is happening if you
- 00:19:54have the ability to Auto deploy every
- 00:19:56version you can go look at an old
- 00:19:58version and see whether or not it was
- 00:19:59working as expected these types of
- 00:20:01things become exponentially easier and
- 00:20:03the amount of time you'll spend dealing
- 00:20:04with these things is exponentially lower
- 00:20:07one more similar thing learn get really
- 00:20:11early I know this what's gotten me into
- 00:20:13trouble but the confidence you get from
- 00:20:15realizing making changes isn't scary is
- 00:20:18huge when I started school it was very
- 00:20:20clear to me that my peers were scared
- 00:20:22when I would use their machines in
- 00:20:24delete code because to them code deleted
- 00:20:26was code gone forever but if you learn
- 00:20:28the basics of get you don't worry
- 00:20:30anywhere near as much yeah this is a
- 00:20:32great reference I helped the dev a while
- 00:20:35back who was trying to deploy their
- 00:20:36giant remix project onto versel I was
- 00:20:39the one screen sharing I was just you
- 00:20:41can even tell from the uh terminal there
- 00:20:43that's obviously me that's my color
- 00:20:45coding that's my um t-u everything that
- 00:20:49was my machine because I was so annoyed
- 00:20:51that the particular Dev that was having
- 00:20:53the problem was insisting that vercell
- 00:20:55was the issue even though they had never
- 00:20:57once got it to deploy so my response was
- 00:21:00what the can we get this remix can
- 00:21:02we get a remix project to deploy and
- 00:21:05then we can debug the difference between
- 00:21:06the two because you should have made
- 00:21:07this deploy as soon as you made it and I
- 00:21:08was able to get it working in like 10
- 00:21:10minutes once I jumped in even with like
- 00:21:11Lee Rob and crew hopping in too it was a
- 00:21:14a fun chaotic experience that absolutely
- 00:21:17could have been settled if the dev had
- 00:21:19deployed before they built so as
- 00:21:21unintuitive as it might sound to put
- 00:21:23deploy first before you make something
- 00:21:25useful trust me it makes life better and
- 00:21:28that's why all of my tutorials I deploy
- 00:21:30really really early and then we do the
- 00:21:33rest
- 00:21:35after back to the article this is a
- 00:21:37great article by the way uh shout out M
- 00:21:39Buffett will give you a big Shout Out
- 00:21:41near the end I'm sure I'll put their
- 00:21:42Twitter in the description too give them
- 00:21:43a follow it's really easy to write
- 00:21:45terrible code but it's also really easy
- 00:21:47to write code that follows absolutely
- 00:21:48every best practice which has been unit
- 00:21:51integration fuzz and mutation tested for
- 00:21:53good measure your startup will just run
- 00:21:54out of money before you finish don't
- 00:21:56forget those Airbnb lint rules that
- 00:21:58Airbnb doesn't even use so a lot of
- 00:22:00programming is figuring out the balance
- 00:22:02absolutely agree I'm going to drop the
- 00:22:04hot take of simple almost always scales
- 00:22:07one more of Mind aim for simple it
- 00:22:10scales well I'll even put surprisingly
- 00:22:14well I find people will look at a simple
- 00:22:16thing and say oh what happens when
- 00:22:18that's at Enterprise scale well if the
- 00:22:20architecture is simple enough then what
- 00:22:22the way it scales up as it gets more
- 00:22:24difficult is way less bad than something
- 00:22:25that starts difficult and has more
- 00:22:27complexity as you go and it's a balance
- 00:22:29it's absolutely balance but if you aim
- 00:22:31for simple the likelihood that things
- 00:22:33scale well is actually higher not lower
- 00:22:36and people love to pretend otherwise and
- 00:22:37they're wrong if you erir on the side of
- 00:22:40writing code quickly you'll occasionally
- 00:22:42get bitten by a bad bit of tech debt you
- 00:22:43learn stuff like I should add great
- 00:22:45testing for data processing because it
- 00:22:46often is impossible to correct later or
- 00:22:49I should really think through table
- 00:22:50design because changing things without
- 00:22:51downtime can be extremely hard if you ER
- 00:22:54on the side of writing perfect code you
- 00:22:56don't get any feedback sorry rust
- 00:22:59things just universally take a long time
- 00:23:01you don't know where you're spending
- 00:23:02your time on things that really deserve
- 00:23:04it and matter or if you're just wasting
- 00:23:06that time feedback mechanisms are
- 00:23:08essential for Learning and you're not
- 00:23:10getting that I absolutely agree I was
- 00:23:12just filming a video earlier about
- 00:23:14Ladybird which is a new browser that's
- 00:23:16entirely unusable because its goal is
- 00:23:18implementing web standards not being a
- 00:23:19good usable browser as a result the
- 00:23:22likelihood that they get actual feedback
- 00:23:24about what is and isn't working is way
- 00:23:26lower versus the browser I'm using Arc
- 00:23:29which I've used for a while now still
- 00:23:31has a fun bug where when I click the
- 00:23:33collections tab because I download a lot
- 00:23:35of things it lags my browser is chugging
- 00:23:38now because I have some thousand files
- 00:23:41in that folder which means I can give
- 00:23:43them that feedback and they're
- 00:23:45rethinking decisions around their entire
- 00:23:47Swift architecture because Swift is so
- 00:23:49bad at long lists but they're able to
- 00:23:51learn these things and make these
- 00:23:52changes because they have actual users
- 00:23:54because they ship something sooner
- 00:23:56versus ladybird which isn't going to use
- 00:23:57any existing solution they're building
- 00:23:59everything themselves and as a result
- 00:24:01the amount of time it takes for them to
- 00:24:02get any feedback at all is
- 00:24:06massive to be clear I don't mean bad as
- 00:24:09in I couldn't remember the Syntax for
- 00:24:11creating a hash map so I did two inter
- 00:24:12Loops instead I mean bad like the
- 00:24:14following instead of a rewrite of our
- 00:24:16data ingestion to make the specific
- 00:24:18State unrepresentable I added a couple
- 00:24:19asserts over our invariance at a couple
- 00:24:22key checkpoints oh
- 00:24:25oh yeah our server models are exactly
- 00:24:28the same as the dto we would write so I
- 00:24:30just serialized those instead of writing
- 00:24:32all the boiler plates so we can write
- 00:24:33the dto later as
- 00:24:35needed I skipped writing tests for these
- 00:24:37components because they're trivial and a
- 00:24:38bug in one of them is no big deal I mean
- 00:24:40that's all components ideally but yeah
- 00:24:42good
- 00:24:43examples make debugging easier I like
- 00:24:46that one a lot let's see what he has to
- 00:24:48say here there's so many little tricks
- 00:24:50I've acquired over the years on making
- 00:24:51software easier to debug if you don't
- 00:24:53make any effort to make debugging easy
- 00:24:55you're going to spend unacceptable
- 00:24:56amounts of time debugging each isue as
- 00:24:58your software gets more and more complex
- 00:25:00hey uh nextjs make things easier to
- 00:25:04debug please thanks I know you're
- 00:25:05working on it I know's working on it I
- 00:25:07just had to point that out because if
- 00:25:08you don't have browser tools things are
- 00:25:10a lot harder it's a great Point too
- 00:25:11you'll be terrified to make changes
- 00:25:13because even a couple new bugs might
- 00:25:15take you a week to figure out yep
- 00:25:17there's plenty of code bases I'm scared
- 00:25:19to touch because I'm more likely to add
- 00:25:20a bug than fix the thing I'm trying to
- 00:25:22fix in the first place here's some
- 00:25:25examples of what I mean by the way this
- 00:25:26person's a huge chest brow and has a cou
- 00:25:28cool chess Services they built for the
- 00:25:30back end of chessbook they have a
- 00:25:31command to copy all of a user's data
- 00:25:33down to local so they can reproduce
- 00:25:35issues easily with only a username based
- 00:25:37they trace every local request with open
- 00:25:39Telemetry making it very easy to see how
- 00:25:41a request spends its time also based
- 00:25:43even though open Telemetry is a
- 00:25:44standard I have a scratch file that acts
- 00:25:46as a pseudo repple which re-executes on
- 00:25:48every change ooh I love this I'm a big
- 00:25:52fan of having a Sandbox file in your
- 00:25:53project so that you can just try things
- 00:25:55there and not have to like spin a bunch
- 00:25:57of stuff up to do it this makes it easy
- 00:25:59to pull out bits of code and play around
- 00:26:01with it to get a better idea of what's
- 00:26:02going on love it totally agree oh here's
- 00:26:05a fun one in staging they limit
- 00:26:06parallelism to one so that it's easier
- 00:26:08to visually parse logs ooh spicy I like
- 00:26:12it for the front end I have a debug
- 00:26:14requests setting which prevents
- 00:26:15optimistic loading of data to make it
- 00:26:17easier to debug requests interesting I
- 00:26:19think I dig that I also have a debug
- 00:26:21State setting that will print out the
- 00:26:22entire state of the program after each
- 00:26:25update along with a pretty diff of what
- 00:26:27happened they also have a file full of
- 00:26:29little functions that get the UI into
- 00:26:31specific States so that is they're
- 00:26:32trying to fix bugs they don't have to
- 00:26:33keep clicking in the UI to get to that
- 00:26:35state I should have more of that it's a
- 00:26:36weird example but I have this project
- 00:26:38Doge T3 G so I actually put this little
- 00:26:41query Pam on the page where Dev mode is
- 00:26:44true now we get this thing on the page
- 00:26:47where I can really quickly add a bunch
- 00:26:49of values add money and then get this
- 00:26:52into the state I'm trying to debug at
- 00:26:53any given time this was essential to
- 00:26:57getting this working I can't imagine how
- 00:26:59I would have built this project without
- 00:27:00it there's definitely not a really
- 00:27:02popular project in the front-end world
- 00:27:04that is significantly more annoying than
- 00:27:07it ever should be that people use
- 00:27:09because getting their components into
- 00:27:10the right state is really hard that's
- 00:27:12that's definitely not a thing it's not
- 00:27:14like people would use this component
- 00:27:16Library tool to debug UI because they
- 00:27:19don't have a way to get the UI into the
- 00:27:20state that they're actually testing that
- 00:27:22would be absurd there's definitely not a
- 00:27:24whole industry of people making really
- 00:27:26annoying tools that keep getting misused
- 00:27:28because UI devs kind of suck that's
- 00:27:31definitely not a thing unrelated website
- 00:27:33by the way ignore whatever I was just
- 00:27:35scrolling totally don't know how I ended
- 00:27:36up there yeah having ways to get your
- 00:27:38components into the state that they
- 00:27:39should be yeah you should and every Dev
- 00:27:42should normalize that the idea of making
- 00:27:44it easy to see play with debug Etc it
- 00:27:47helps with places you wouldn't even
- 00:27:48expect like having these tools makes
- 00:27:50like QA easier too it's just it's good
- 00:27:53it's really good practice to find simple
- 00:27:55ways to get your application into the
- 00:27:57states that you're actually working on
- 00:27:58it also will encourage you by the way to
- 00:28:00make things simpler because if it's too
- 00:28:02hard to get things in the right State
- 00:28:04you'll start to realize ways to simplify
- 00:28:05that State Management and those are
- 00:28:07almost always worthwhile stay vigilant
- 00:28:10about how much of your debugging time is
- 00:28:11spent on setup reproduction and cleanup
- 00:28:13afterwards if it's over 50% you should
- 00:28:15figure out how to make it easier even if
- 00:28:17that will take slightly longer this time
- 00:28:19bugs should get easier to fix over time
- 00:28:21all else being equal I hate that's a
- 00:28:23spicy take because it's entirely correct
- 00:28:25as a code base gets more complex you
- 00:28:27should be counter trting that making
- 00:28:29reproduction even easier to deal
- 00:28:31with when working on a team you should
- 00:28:34usually ask the question I'm putting
- 00:28:36that in mind too uh dumb questions rule
- 00:28:40I've talked about this a bunch I can't
- 00:28:41even remember which videos I have
- 00:28:43because there been so many the dumb
- 00:28:44questions rule is a thing I apply to new
- 00:28:46Engineers when they join my team I
- 00:28:48mandate a minimum number of dumb
- 00:28:50questions that they have to ask every
- 00:28:52day if they haven't asked me at least
- 00:28:54one dumb question every day for their
- 00:28:57first week or two the day is not over
- 00:28:59until they ask the question the reason I
- 00:29:01push this is because devs and honestly
- 00:29:03everyone is really insecure about
- 00:29:05feeling dumb in saying dumb things so I
- 00:29:08force them to get over that by making
- 00:29:10them do it ask the dumb question and it
- 00:29:11kind of goes back to this point earlier
- 00:29:13of taking feedback from unfamiliar devs
- 00:29:15more seriously because the dumb question
- 00:29:18is a thing others probably thought when
- 00:29:19they were trying the project for the
- 00:29:21first time but they were too scared to
- 00:29:22say and if you don't get that feedback
- 00:29:24you'll never know and this goes both
- 00:29:27ways if you're the Dev that always asks
- 00:29:29the question you're more likely to be
- 00:29:31working in code bases that solve these
- 00:29:33problems because if everyone on the team
- 00:29:34isn't willing to say it and you're also
- 00:29:36not willing to say it it won't get fixed
- 00:29:38but even if everyone else isn't willing
- 00:29:40but you are all of a sudden these things
- 00:29:42start to get fixed so it's really
- 00:29:44important to ask the questions even if
- 00:29:46no one else on your team is in the worst
- 00:29:48cases you get fired for and you can find
- 00:29:50a team that's better aligned with you
- 00:29:51there's a spectrum of trying to figure
- 00:29:53out everything for yourself versus
- 00:29:55bugging your co-workers with every
- 00:29:57little question and I I think most
- 00:29:58people start their careers way too far
- 00:30:00on the former side absolutely agree it
- 00:30:03has been hard for me to find people who
- 00:30:04ask too many questions when they're
- 00:30:06working with me there are absolutely
- 00:30:08people who are not working for me that
- 00:30:10are just random people in my DMs asking
- 00:30:11me all sorts of stupid totally see
- 00:30:13that that is a problem but for the vast
- 00:30:15majority of people especially once
- 00:30:16they're employed they're almost scared
- 00:30:18to ask the question and you got to push
- 00:30:20them to or if you're that person you
- 00:30:21just got to do it don't be scared to ask
- 00:30:23the question almost ever there's always
- 00:30:25someone around that has been in the code
- 00:30:27base for longer or knows technology X
- 00:30:29way better than you or knows the product
- 00:30:30better or is just a more experienced
- 00:30:32engineer in general there's so many
- 00:30:34times in that first 6 months of working
- 00:30:35somewhere where you could spend over an
- 00:30:37hour figuring something out or you could
- 00:30:39get the answer in a few minutes again
- 00:30:41really important point I can't tell you
- 00:30:43how many times the dumb question ended
- 00:30:45up being well I've been stuck on this
- 00:30:46for 4 hours do you have any tips on how
- 00:30:48to get this particular tool working and
- 00:30:51my response was oh yeah you should run
- 00:30:53these two commands instead I should have
- 00:30:54updated the docs for that my bad I'm
- 00:30:56going to go fix that and now this thing
- 00:30:57that had spent hours on get solved in
- 00:31:00like 30 seconds and our docs improve
- 00:31:03huge massive this is a great thing thank
- 00:31:06you schaer for sharing this junior Dev
- 00:31:09here I've been praised as the best on my
- 00:31:11team at asking questions ask the
- 00:31:13question you don't have to be an
- 00:31:15experienced engineer to ask good
- 00:31:16questions in fact the inexperienced
- 00:31:18Engineers they have a massive Advantage
- 00:31:20because they have better questions
- 00:31:22because they're not going to default to
- 00:31:24existing knowledge that might be
- 00:31:25incorrect they're going to challenge the
- 00:31:27thing and they're going to ask great
- 00:31:29questions as a result lean into that as
- 00:31:31a junior Dev and as an experienced one
- 00:31:34get those questions get that feedback
- 00:31:35it's all so helpful this happens all the
- 00:31:37time I I can't I would love if you have
- 00:31:40this to link it because this happens
- 00:31:44five times a day there is no world in
- 00:31:46which I remember your specific question
- 00:31:48like you it we all have these moments
- 00:31:51that haunt you know what one more piece
- 00:31:52of
- 00:31:53advice that one dumb thing that haunts
- 00:31:56you
- 00:31:58nobody remembers
- 00:32:00it I have plenty of those I have so many
- 00:32:04of these moments where like wow I can't
- 00:32:07believe I thought that or did that like
- 00:32:09like here's a fun one that actually got
- 00:32:10brought up because others remembered it
- 00:32:12for me so bad example but I love it I
- 00:32:14didn't know react query could be used
- 00:32:16for things that weren't graphql until
- 00:32:18Tanner Lindley was on Jason langdorf
- 00:32:20stream there's actually in the VOD I bet
- 00:32:23I could find it yeah cool almost
- 00:32:25certainly going to be at this time stamp
- 00:32:27yeah yes look at me in chat
- 00:32:30there look at
- 00:32:32that I am so so so stupid and somehow
- 00:32:35just realize react query isn't just a
- 00:32:37graphql client I need to go do a very
- 00:32:39deep dive and this was October 21st 2020
- 00:32:44we've all had these issues we've all had
- 00:32:46that moment where we feel dumb and
- 00:32:48nobody remembers the only reason that
- 00:32:50one got noticed is somebody else was
- 00:32:52watching the video and said yo Theo I
- 00:32:54saw you pop up in stream here look at
- 00:32:55your comments I was like wow holy
- 00:32:57I'm dumb but no one else remembered no
- 00:32:59one remembers those moments don't worry
- 00:33:01about it and again the only time that
- 00:33:03this would ever annoy people if you're
- 00:33:05asking too many questions is if it's
- 00:33:06clear you could have found the answer
- 00:33:08yourself in a few minutes and even then
- 00:33:10it can be useful because you might not
- 00:33:12have known the strategy to find the
- 00:33:13answer and if I then show you that
- 00:33:16awesome you'll ask less questions I've
- 00:33:18had once or twice in my career where
- 00:33:19somebody would ask questions over and
- 00:33:20over and I'm like okay how did you try
- 00:33:22to figure this out and then realize they
- 00:33:24didn't know about one of the docs
- 00:33:26resources or one of the things to search
- 00:33:28sort for and when I show them that they
- 00:33:30would stop like almost every time if
- 00:33:32you're asking too many questions it's
- 00:33:33because you haven't been shown the way
- 00:33:34to find the answers and if you ask too
- 00:33:36many questions awesome now we can
- 00:33:38realize that deficiency exists and we
- 00:33:40can plug it after you responded to me I
- 00:33:43sat down and got really into
- 00:33:44understanding how these things actually
- 00:33:46work so it helped you a ton that's
- 00:33:47awesome I'm sorry if I was harsh in the
- 00:33:50reply there but I it sounds like you
- 00:33:52used that opportunity to level up and be
- 00:33:53better like even if I didn't handle your
- 00:33:55question well it seems like you handled
- 00:33:57it awesome and I really hope that you're
- 00:34:00not scared of asking questions in the
- 00:34:01future because that's dope to have you
- 00:34:03here have you sharing this experience
- 00:34:05and have you productive enough to to
- 00:34:06deeply understand next now you massively
- 00:34:09leveled up as a result of that so I love
- 00:34:11that shipping Cadence matters a lot
- 00:34:14think hard about what will get you
- 00:34:16shipping quickly and often love this
- 00:34:19startups have limited Runway projects
- 00:34:21have deadlines when you quit your job to
- 00:34:23strike out on your own your savings will
- 00:34:24only last you so many months that this
- 00:34:26hits too deep this hurts Hur me in my
- 00:34:28soul
- 00:34:30ideally your speed on a project
- 00:34:33only compounds over time until h no I I
- 00:34:36have another Theo point and it's not
- 00:34:37even that related to this but it's
- 00:34:39inspiring me uh you don't know what
- 00:34:42level you're at until you get an offer
- 00:34:45at that level somewhere else companies
- 00:34:49love to make you think you're not a
- 00:34:50certain level because they don't want to
- 00:34:52pay you for that promotion so they
- 00:34:54always make the promotion process hell
- 00:34:56there was a window where I didn't think
- 00:34:57I was a senior Dev because I was having
- 00:35:00problems getting my senior doc to like
- 00:35:02get started I just getting my managers
- 00:35:03to do it was annoying turns out those
- 00:35:06managers sucked and when I started
- 00:35:07applying to other companies Not only was
- 00:35:09I massively exceeding their bar for
- 00:35:11senior I was approaching like the staff
- 00:35:13level bar and I didn't realize that
- 00:35:14because I didn't realize I should be
- 00:35:16talking to other companies and not
- 00:35:18basing my ability on what this one
- 00:35:20particular person thinks they should or
- 00:35:22shouldn't sign off on because the
- 00:35:23reality was if that manager promoted me
- 00:35:25they'd have one less headcount for a
- 00:35:27senior Dev but if they didn't promote me
- 00:35:29they could hire another senior Dev and
- 00:35:31have me underpaid outworking that senior
- 00:35:33Dev it was an obvious win for my team so
- 00:35:36I never understood what my actual level
- 00:35:38was because my company had a competitive
- 00:35:40advantage of not telling me and then
- 00:35:41when I figured it out gave him the
- 00:35:43finger and quit they were worse off as a
- 00:35:45result regardless this happens all the
- 00:35:47time and you as an individual developer
- 00:35:50should know how much you're actually
- 00:35:51worth what your skills actually look
- 00:35:53like measured up against other actual
- 00:35:55companies so do interviews a ton all for
- 00:35:57that a point interview a lot at least
- 00:36:01once every 6 months one more on this
- 00:36:04topic give
- 00:36:06interviews if you're qualified for the
- 00:36:08role you're qualified to interview for
- 00:36:10the
- 00:36:15role yeah I find so many devs take way
- 00:36:18too long to get into the interview
- 00:36:20process on both sides they take too long
- 00:36:22to start getting interviews to work at a
- 00:36:24company and once they're at the company
- 00:36:26they're hesitant to start giving
- 00:36:27interviews interviews are essential to
- 00:36:29our success and growth and opportunities
- 00:36:31as devs you got to push through it it
- 00:36:33sucks but you have to give interviews do
- 00:36:36interviews deeply understand interviews
- 00:36:38if you can't do those well you're
- 00:36:40massively bottlenecking yourself and
- 00:36:42your capabilities certainly
- 00:36:44bottlenecking your success yeah this hit
- 00:36:46deep the reason I thought of all of that
- 00:36:47is I just started thinking too much
- 00:36:48about quitting and going off on my own
- 00:36:51and realizing at that moment oh I
- 00:36:53should have quit a while earlier I am
- 00:36:56very down if you're down to share but no
- 00:36:59pressure at all hoi I still want to
- 00:37:02understand why the session never gets
- 00:37:03past the client this is strange as
- 00:37:04to me the data is there but it simply
- 00:37:06never receives the prop I'm looking all
- 00:37:07over for the solution this one was not
- 00:37:10actually
- 00:37:11particularly obvious yeah I'm going to
- 00:37:14drop an even hotter take for you hooi
- 00:37:16this wasn't a problem with your
- 00:37:18understanding so much as next being
- 00:37:21shitty get serers side props being a
- 00:37:24function both for redirecting and for
- 00:37:27passing props is bad this code shows
- 00:37:32just how bad the conflation of concerns
- 00:37:35that existed in Old Pages router was the
- 00:37:38fact that you could do this that you
- 00:37:39could return a redirect and props is a
- 00:37:42fundamental design failure in next so I
- 00:37:45do not blame you at all for this this is
- 00:37:49why old nextjs sucked and this is also
- 00:37:52why I think new nextjs is so good it
- 00:37:54does a great job at solving these
- 00:37:55problems by not having these magic fun
- 00:37:57that have all of these different roles
- 00:37:59you just component style call what
- 00:38:01you're doing when you do it so I
- 00:38:02actually am pumped that you found this
- 00:38:04example because it's subtle but it
- 00:38:06actually perfectly showcases the types
- 00:38:08of design failures that the old next
- 00:38:10model by Design encouraged a lot of so
- 00:38:14phenomenal oh I missed your follow-up
- 00:38:16question too my bad on that you pass
- 00:38:18session as props it does not show in the
- 00:38:19props initial
- 00:38:25problem uh I think you understand now so
- 00:38:28whenever you send the data grabs app
- 00:38:30grabbing session provider so whenever
- 00:38:32you send the data of the session as
- 00:38:34props s is grabbing it passing it yep
- 00:38:38yep to be clear these things were way
- 00:38:40more complex than they should have been
- 00:38:43and none of this is your fault like I
- 00:38:46really want to emphasize that point this
- 00:38:48design sucked because of next and I
- 00:38:52actually love that you brought this up
- 00:38:53as an example because yeah this was your
- 00:38:56huge learning is you had only worked in
- 00:38:57single Page Apps and this abstraction
- 00:38:59for them wasn't great like you know that
- 00:39:02was a good question cuz it was like you
- 00:39:04didn't pretend you understood more than
- 00:39:05you did you said that it doesn't make
- 00:39:07sense it's small I'm going to give you a
- 00:39:09massive compliment here there's a lot of
- 00:39:11subtle things in this question that I
- 00:39:12think you did really well I want to
- 00:39:15understand you didn't say this is wrong
- 00:39:17or dumb you didn't say this problem
- 00:39:20sucks or that this tool sucks you said
- 00:39:22that you want to understand why this
- 00:39:24strange thing is happening and you even
- 00:39:26said strange to you the qualifiers here
- 00:39:29are actually incredible this is like
- 00:39:30almost like an artistic example of like
- 00:39:32a really really good question when you
- 00:39:33feel lost and clueless you owned that it
- 00:39:36was your desire to understand this was
- 00:39:39the fact that you said the word
- 00:39:40understand before describing the problem
- 00:39:42that you want to understand huge huge
- 00:39:44green flag you're not just trying to fix
- 00:39:46the problem and move on you want to
- 00:39:47understand it and it's strange to you
- 00:39:50you know it might not be strange to
- 00:39:51others you know that there might be
- 00:39:52something better that's just not
- 00:39:53clicking for you this is a great great
- 00:39:56question so yeah I wouldn't even qualify
- 00:39:59this as a dumb question honestly if if
- 00:40:01you had presented this to me as an
- 00:40:02employee of mine as your dumb question I
- 00:40:05would have said no that's a good
- 00:40:06question come back with the Dumber one
- 00:40:07later this is great A+ fantastic
- 00:40:09representation and like to anyone
- 00:40:11looking for examples of how to ask a
- 00:40:13question about something you don't
- 00:40:14understand here you go just say it say
- 00:40:16that you want understand and you don't
- 00:40:18and say what is confusing to you
- 00:40:20fantastic A++ thank you for sharing that
- 00:40:22who you wrot by the way like that's
- 00:40:24really good gold example of asking a
- 00:40:27question when you're clueless people are
- 00:40:29really scared to do if you just don't
- 00:40:31understand at all it's scary to ask the
- 00:40:33question but you did it you learned a
- 00:40:35bunch and now I get to highlight you in
- 00:40:36a video as an example of these types of
- 00:40:38things A+ is all around I love this
- 00:40:41thank you for sharing don't worry about
- 00:40:43having to participate in the time and
- 00:40:44all that but if you're down and you're
- 00:40:46here clearly you bring a lot of value so
- 00:40:48pump to have you here man anyways let's
- 00:40:50see more what this author has to say
- 00:40:52ideally your speed on a project only
- 00:40:53compounds over time until your shipping
- 00:40:55features faster than you could have ever
- 00:40:57imagined to ship fast you need to do a
- 00:40:59lot of things oh I'm so pumped that you
- 00:41:01have you're the best person to teach
- 00:41:03like knowing that you ask questions that
- 00:41:05well means you're going to set a really
- 00:41:07good example for the students the fact
- 00:41:09that there's people that are learning
- 00:41:10from you makes me very very excited back
- 00:41:12to these examples of things that you
- 00:41:13should do if you want to ship fast you a
- 00:41:16system that isn't prone to bugs you need
- 00:41:17a quick turnaround time between teams
- 00:41:19you need a willingness to cut out the
- 00:41:2010% of a new feature that's going to
- 00:41:22take half the time Yep this happs a lot
- 00:41:25the the number of times I see a product
- 00:41:27a feature a tech plan a spec that would
- 00:41:30be way way simpler if we trim one or two
- 00:41:34things half my videos where I'm ranting
- 00:41:35about old jobs are just me complaining
- 00:41:38about this specifically so couldn't
- 00:41:40agree more consistent reusable patterns
- 00:41:42that you can compose together for New
- 00:41:43screens features and end points Yep this
- 00:41:46is a huge part of why react one by the
- 00:41:48way the fact that the patterns and
- 00:41:49components can all be reused composed
- 00:41:52stacked and done all these crazy ways
- 00:41:54that's why react really took off early
- 00:41:56because it scaled well to small projects
- 00:41:59and big projects and it lets you move
- 00:42:00really fast quick and easy deploys wow I
- 00:42:03must have pre-read when I said make it
- 00:42:05deploy then make it useful crazy process
- 00:42:07that doesn't slow you down like flaky
- 00:42:09tests slow CI fuzzy linters slow PR
- 00:42:11reviews jira as a religion Etc yep and
- 00:42:16about a million other things of course
- 00:42:18shipping slowly should Merit a
- 00:42:20postmortem as much as breaking
- 00:42:21production does holy spicy take that I
- 00:42:24love our industry doesn't run like that
- 00:42:26but it doesn't mean you can't personally
- 00:42:28follow the north star of shipping fast
- 00:42:30couldn't agree more at every scale I
- 00:42:33just dropped the link in the reply to
- 00:42:34this tweet because that was such a great
- 00:42:36article I know I say that a lot but uh
- 00:42:39holy I'm very thankful for this
- 00:42:40author when I found this article
- 00:42:42initially I quickly checked their
- 00:42:43Twitter they were following me I was
- 00:42:45like oh my God awesome I reached out
- 00:42:47they were really hyped and God I'm
- 00:42:49excited for them to see this video
- 00:42:50because that was great I say this a lot
- 00:42:52but that article was great I haven't
- 00:42:55agreed that hard on something I've read
- 00:42:56on stream for a while let me know what
- 00:42:57you think in the comments though and
- 00:42:58what you learned that might benefit you
- 00:43:00as an experience Dev or as a new one
- 00:43:02until next time peace Nars
- consells de programació
- solucions duradores
- rendiment del codi
- aprenentatge eficient
- gestió de la qualitat