[HN Gopher] Dealing with the Perfectionism Trap as a Developer ___________________________________________________________________ Dealing with the Perfectionism Trap as a Developer Author : jebraat Score : 23 points Date : 2022-08-31 20:42 UTC (2 hours ago) (HTM) web link (jebraat.com) (TXT) w3m dump (jebraat.com) | michaelwww wrote: | _" Make it work, then make it beautiful, then if you really, | really have to, make it fast. 90 percent of the time, if you make | it beautiful, it will already be fast. So really, just make it | beautiful!"_ - Joe Armstrong | | As hard as it is to resist, I would argue that if you other | modules to make work, move on and leave making the current module | beautiful for later. | | That said it's really hard to leave working but ugly code alone | | I find a lot of freedom in coding for myself. In other words code | that no one else is ever going to see. This goes a long way to | silencing my inner critic. If I ever want to open source it, I | can make it perfect at that time. This is why I don't keep my | code on github. When I write code for myself I can express myself | the way I want to, which is not necessarily the "standard way" | that someone later might a "code smell" | jebraat wrote: | Thanks for the comment Michael! | | I 100% understand the "it's really hard to leave working but | ugly code alone" sentiment", as I get the same feeling a lot of | the time. That is one of the reasons I wrote this article. | | I often have to fight myself to move on to do work on other | things. | michaelwww wrote: | Other programmers can be harsh critics and it's important not | to internalize these critics. This isn't a knock on other | programmers, but the criticism is often based on their own | perfectionism! | slindsey wrote: | Those "other programmers" that are "harsh critics" are | often ourselves. How many times have you (any programmer) | looked at your own old code and thought, "what they hell | was I thinking?" | | I can't count the times I've looked at ugly code, fired off | `git blame`, and found out it was me. | MrLeap wrote: | Code that serves as a highway I try to make as clean as | possible. Code that serves as a cul-de-sac just has to work. | Aqueous wrote: | Perfectionism is a pitfall, but agile development has led a lot | of developers to prize velocity over correctness. Many seem | believe that any upfront mistake can be fixed through iteration. | The truth is that there are things that you _can 't fix through | iteration._ Things like having an incorrect data model. Some | things need to be perfect up front or you will quickly find | yourself boxed in down the road as you try to extend the system. | | Once you've gotten the right design at the center of your system, | understanding not only the current requirements but also likely | future requirements as well, scrum away. It's just not OK to blow | the "big picture" decisions that you need to do in order to build | a piece of software the right way because you want to move fast. | solarmist wrote: | > The truth is that there are things that you can't fix through | iteration. Things like having an incorrect data model. | | Yes! I spent a year iterating on my prototype for my startup | for precisely this reason. The data model kept changing and | that had repercussions through every other part of the | prototype. Often leading to reworking entire components. | | The data model is that the core of everything for my prototype, | so it was more than worth the time spent. | CodeWriter23 wrote: | The author is not wrong. But when you scale up is when you pay | the price for expediting processes earlier. | layer8 wrote: | > Treat digital products like ever-changing drafts | | Sorry, but no. As a user, this is the bane of "modern" software. | jebraat wrote: | I get where you are coming from. I don't think anybody wants to | use bug riddled software. I also think some companies take it | too far with releasing software to the general public (not | alpha/beta) that isn't refined enough. I suppose corporate | pressure to release things on arbitrary deadlines also doesn't | help. | | IMO the beautiful thing about software is, that we can push | updates and improvements pretty much instantaneously. Whether | that is adding features to a working product, or fixing bugs | that slipped through during development. | rileymat2 wrote: | As long as they are honest about the current state of it. | Often, I rather have something that I can struggle along with | than nothing at all. | layer8 wrote: | It's not primarily about bugs, it's about everything | constantly changing, from UI, look&feel to how features work. | This is a constant cognitive load to users, a perpetual need | for them to readjust to the changing software. As a result, | the software never feels finished, doesn't feel solid, and | often appears not to be well thought-out. This gets in the | way of the "it just works" the user wants, in a major way. | | The argument is not against enhancing and improving the | software, it's against delivering a "draft" (as you say) to | end users, it's against constantly changing the design and | working of features. Delivering a "draft" (or prototype) is | only acceptable for beta users, or in an initial design phase | involving the future users in the design process. It is not | acceptable for released software intended for productive use. | | Users want stability. They want the software to get out of | their way as much as possible, to be reliable and | unsurprising, to remain working in the familiar way. | jebraat wrote: | What if the requirements change? | layer8 wrote: | That has barely anything to do with treating delivered | software as unfinished drafts. | | If requirements change, then this has to be carefully | coordinated with the affected users, in particular if | they aren't the ones defining the requirements, or if the | user base is not uniform and the requirements may only | change for a portion of them. In any case, requirement | changes affecting how users operate existing | functionality shouldn't be a frequent occurrence. | dividuum wrote: | > IMO the beautiful thing about software is, that we can push | updates and improvements pretty much instantaneously. | | It is, but that directly results in garbage software being | released, because ,,we can fix problems later". And it also | means you can now perfectly balance perfecting your software | with providing the resulting support for your pile of | garbage. Which I guess is the reason I have to call support | every third time im I'm trying to use an EV charging station | because their software shit the bed again. </rant> | rglover wrote: | One of the biggest contributors, arguably, to the mediocrity of | modern software is the rejection of the inner voice that says | "you can (and should) do better" as "perfectionism." No offense | to the author, but imo this is a platitude that has done far more | damage than it has good. | | A few quotes to contextualize the thought (ones that I reference | when I try to weasel out of doing something properly): | | _"An important part of making good things--it's extremely | underrated in current day society--is having a critical eye for | the things that you're making and assessing 'are these things of | an appropriate quality, do these live up to the standard of what | I'm trying to create?' That's why it's not fun sometimes. But | it's also what enables it to be a peak experience in the end when | you succeed."_ | | - Jonathan Blow | | --- | | _"Doing something quickly is not the same as doing it well."_ | | - John Hegarty | | --- | | _"Any suppression is regression."_ | | - Kapil Gupta | | --- | | _"If you walk the path of mastery, you're going to have to walk | it all alone. There is no one who is going to accompany you | because no one has been taught that. No one believes that. That's | not in the water and in the food and in the air. You're basically | going to have to breathe a different sort of oxygen."_ | | - Kapil Gupta | eternityforest wrote: | One can perfect the software without perfecting the code. | | A bad overall architecture is unmaintainable. | | An ugly 30 line pure function that has unit tests and hasn't | needed changes in 5 years is just meh. 50 of those ugly pure | functions are still not going to break a project. They could be | untangled at any time as needed. | | 50 decent but not great functions are definitely not going to | break a project. | | So much perfectionism is at the level of functions and variable | names. Some makes things worse, when people reinvent nontrivial | functionality instead of using widely trusted libraries, like | as if work projects are their personal playground of weekend | educational stuff. | allenu wrote: | To me, it's really context-dependent and when working on a | solution, you may need to take into account the business | objectives and make the right trade-off in terms of time spent | and "quality" of the design. | | Architecture-level designs are important to get right as they can | constrain your future self's ability to scale or adjust how the | product works. However, it's also possible to spend way too long | making a very open-ended architecture whose features you never | actually use. (It may turn out you "build it to throw away" if | you learn even more about the space you're working in as you go | along.) | | If you're working on a product and don't even know if it's | something customers would use or want, I would say erring on | velocity is more important than necessarily getting everything | "right" in the design or even making the code beautiful. The | thing that will most likely "go wrong" for you is that you built | a product nobody wanted and not that the code just wasn't perfect | enough. Better to get it in front of people sooner so you know if | it's worth pursuing. Obviously, making that nuanced trade-off | between "high quality" and "good enough" depends on your skill | level and being able to recognize where things could blow up in | your implementation if you do get it wrong. | | Writing code is not done in a vacuum. We don't get to just write | the most beautiful, optimal things with endless amounts of time. | There are real business constraints and objectives we need to | meet, and the trade-offs we make in terms of time spent should | take the context into account. Unfortunately, most of are so | separated from the real business objectives of the company | leaders at the top, making it difficult to make the appropriate | trade-offs (or even caring one way or the other). It often simply | turns into "My boss wants this done in 2 weeks, but I would like | to do it right and that will take at least a month." | TrianguloY wrote: | Coding whatever first ugly solution you come across is horrible; | taking days deciding whether to use pattern A or pattern B for | something that probably will change in a few months is horrible | too. | | Find the balance between thinking of a better way, and the time | it takes to coding it. | | Personally I've found codebases that could be simplified | enormously just by using a different library, which I found just | by searching a few minutes before touching it. You and future | developers will probably be grateful. ___________________________________________________________________ (page generated 2022-08-31 23:00 UTC)