Hacker Newsnew | past | comments | ask | show | jobs | submit | doutunlined's commentslogin

It may be more interesting as a dual host format, where one person is knowledgeable and the other is asking questions. Otherwise it can get monotonous to simply hear someone read a summary.


Crashes are the easiest bugs to self-fix.


agreed! but it'd be nice to not have to jump back to the editor to fix a minor crash and then go rerun


Because IRL you're effectively always in call. Not sure whats hard to understand about the difference.


I just don't see the difference. When I worked in an office I'd wander over to a colleague and say "coffee?" Now I open a dm and say "coffee call?"


Your code reviews are doomed regardless if the feedback cycle is 1 day.


"It works" is perhaps the lowest bar you can possibly have for merging code.


"It works" is the most common metric I've seen juniors decide when to submit code (the rest being just trash). Add code review to that and expect it to get merged because "it works"? Not sure the problem is with the code review holding up the ship...


Why would you rewrite them as loops?


"It's much easier to read a loop than a list comprehension, please rewrite all the list comprehensions as loops."

I squashed that.


Sounds awfully micromanagey, making the decision as someone with way less context than the senior engineer… unless you have OCD and non-pragmatic engineers upholding unreasonable expectations.


List comprehensions are advised against in Google’s official Python Style Guide and many similar guidelines for this exact reason. You sound like a micromanager who thinks he’s more technical than you actually are


Your comment implies juniors are only juniors for a temporary amount of time. I've worked with many SWEs (some with years of FAANG experience) who consistently code like juniors. They are aware of things like the separation of concerns, but as soon as they run into a situation wheres its easier for them to leak one layer's concern into another they will do so. Consistently doing this over months erodes the quality of a codebase.


> They are aware of things like the separation of concerns, but as soon as they run into a situation wheres its easier for them to leak one layer's concern into another they will do so.

That says nothing without context.

If you want to move fast then it's ok to break things, and leaking layers is far from a non-negotiating tradeoff. Software is soft, and you can always revisit a piece of code to refactor it to suit someone's architectural tastes.

It makes no sense to criticize someone for focusing where it matters the most and actually deliver critical features without delay if the tradeoff is some legacy debt, and that by no mean implies they're junior.

One important skill of a senior is being able to keep their eyes on the prize and be smart about tradeoffs. Prioritizing subjective opinions over software architecture over delivering value is more in line with a junior way of thinking about software than not, and to me doesn't sound like a position to criticize others.


I'm gonna call bullshit on all of this. The time tax on not leaking layers in an application that doesn't already leak layers is nearly zero.

The problem is people don't want to expend the very minor extra amount of effort.

So you do it once. Then the next person does it because hey we already do it there so the code is not even subjectively worse, it's objectively the same, cuz you already crossed that line.

After a while you have a giant festering pile of shit that you just keep making bigger and bigger and now people are talking about rewriting it.

In my experience you start actively losing velocity in this situation very quickly. If you're doing this when you still your have 3+ months on a project, you're likely making poor decisions.

I'm not saying you need to constantly gold plate your architecture. But it should be palatable.

The subjective part is what is palatable. But I don't know anyone who thinks steaming turdpiles are palatable.


I mostly agree, BUT, it's very possible to end up with a situation where your current layers, even if they don't leak, are ill-designed for the feature you're working on. It can be a lot of work at that point to keep it non-leaking. You should still do it, but it won't be "nearly zero" cost.


In my experience, codebases never maintain their level of quality. Unless you are taking deliberate action to improve the codebase with every commit, it's actively getting worse like you described above.

The interesting thing is that this isn't a technical problem, it's a human problem. Most folks want to clock in, do their job and clock out, and going the extra mile to improve things isn't worth the effort.

I think its the same human tendency that leaves so much pee on the toilet floor - some humans will clean up their own, but almost none will clean up someone else's.


> Most folks want to clock in, do their job and clock out, and going the extra mile to improve things isn't worth the effort.

I suspect this is because it’s almost never rewarded. Either because nobody up the chain of command understands and values quality beyond “it’s working and making us money right now so it’s fine” and also because doing things right is tiring. Why should I spend energy on this and not have that energy when I’m off the clock if I’m not going to get more money/recognition/time off for it and I’ll probably get laid off or move on in a couple years anyway.

I don’t think anyone deliberately starts a job or task thinking they’ll do the absolute minimum. People generally want to do their best but the system moderates this desire and that’s the result.

I don’t really have a solution, just pointing it out.


I too like to use the metaphor a codebase is like a public toliet. Gotta clean it or it’s gonna get gross!


And that's why you don't let any bullshit in, exercise eternal vigilance and rely on static analysis tools to stem the turd wave in an automatic fashion as much as you can.

The solution is not to accept "it is what it is".


> I'm gonna call bullshit on all of this. The time tax on not leaking layers in an application that doesn't already leak layers is nearly zero.

The time tax is paid by not delivering a feature. Architecture is supposed to be there to help you, not fail deadlines.

Also, it seems you completely failed to read or get what I wrote. My point was that if a PR delivers a feature without defects then your team is far better off if you accept the PR and refactor later when you can spare the time then it is if you throw a hissy fit and refuse to get the feature done if you don't get your way. You are paid to create value which is in delivering features and fixing bugs. Architecture is supposed to be there to help you.

Think about it for a second. If your architectural purity demands a hefty refactor, is that a good justification to postpone a bug fix or delivering a feature? No, it isn't.

> The problem is people don't want to expend the very minor extra amount of effort.

Except that most time it isn't minor.

You have to pass interfaces throughout a bunch of components, which require updating all sorts of tests, and result in a large code footprint.

> After a while you have a giant festering pile of shit (...)

That only happens if you're incompetent at your job and fail to do the most basic maintenance tasks in your code base.

Look at what you're trying to claim. It's supposedly easy and trouble-free to put together a PR that respects your personal notion of what the software architecture should be. Yet, the work to refactor code that breaks it is so insurmountable that you're no longer able to refactor it back to shape?

Which one is it then?

It looks like the FANG engineer you tried to badmouth had a firmer grasp on things and on what it matters the most than you do.


> The time tax is paid by not delivering a feature. Architecture is supposed to be there to help you, not fail deadlines.

Most deadlines are artificial. If it's not artificial, yeah, you're going to have to sacrifice something for the sake of the real deadline. But you are sacrificing something, and it's not just subjective fluff.

> Also, it seems you completely failed to read or get what I wrote. My point was that if a PR delivers a feature without defects then your team is far better off if you accept the PR and refactor later when you can spare the time

You don't ever have spare time. When you finish a feature there's another waiting for you. At least, that's how it works literally everywhere I've worked. Working this way is just another form of over-promising and under-delivering.

> then it is if you throw a hissy fit and refuse to get the feature done if you don't get your way

Rejecting a change doesn't mean you're throwing a hissy fit.

> You are paid to create value which is in delivering features and fixing bugs. Architecture is supposed to be there to help you.

It does help you. In the medium to longer term. In the short term, literally any standard out there will slow you down - unit tests, CI/CD, shit - testing at all. It all slows you down. It doesn't mean we should just code like its 90s era PHP - the fact that we don't should be a strong signal about the value of this whole hypothesis you have going here.

> You have to pass interfaces throughout a bunch of components, which require updating all sorts of tests, and result in a large code footprint.

Funny. Your tests are slowing you down, why don't you just comment them out to get your feature in?

> Look at what you're trying to claim. It's supposedly easy and trouble-free to put together a PR that respects your personal notion of what the software architecture should be.

It's not actually just personal. We have unit tests that enforce certain architectural rules.

> Yet, the work to refactor code that breaks it is so insurmountable that you're no longer able to refactor it back to shape?

If you don't do these things for the sake of feature velocity, as a senior software engineer, why should anyone else? If no one is, how large of a problem do you think you're going to get? And do you really think its just as easy to fix something after the fact?

Of course, if you don't know how something should be, that's one thing. But knowing how it should be and just skipping it altogether is quite another.

Why are you even refactoring for reasons you view as subjective? I don't do subjective refactorings. Despite what you claim, at the point of a change, much of this stuff is very not subjective. If you show any developer a function call before a feature was added, and what it looks like after its been hacked it in some fucked way, no one is going to say the fucked version is better.

> It looks like the FANG engineer you tried to badmouth had a firmer grasp on things and on what it matters the most than you do.

Well maybe you're just so smart its trivial for you to navigate this stuff. If so, continue by all means. Until then, us mere mortals will have to adopt standards so our codebases don't outpace our ability to understand it.


In my professional experience of > 10 years, that is 95% of codebases. Maybe I'm unlucky?


This possibly be true in some case, but I find it to mostly be wrong. The best time to fix up some code is when you are already modifying it, because that’s when you are already fully in context to understand the effects. Going back later to clean stuff up is much less likely, because you have to pay that marginal comprehension cost again and again for each issue you fix (and are less likely to even notice the problem). If you’re making this excuse, that suggests you have internalized that it’s ok to makes your codebase worse and you are probably degrading it progressively.


> This possibly be true in some case, but I find it to mostly be wrong.

Yes. That’s why it’s an important skill for an engineer to know when to make that tradeoff.

Sounds like you’re agreeing with the grandparent comment?


"Separation of concerns" as in splitting a simple thing into 12 files because you've had too many books about architecture?


As in not making a 10k lines function that does everything because you didn't read any books about architecture

I get it, you've been burned out by Enterprise(tm) code. Going to the very edge of the other side isn't any better


A 10k loc function is just a program wrapped in a function. I find it somewhat fun to refactor those. And you're god damn right I cannot deal with this eldritch horror you architecture astronauts come up with anymore, I'll take the dumb code please :-) YAGNI + KISS >>>>> SOLID all day every day


>I find it somewhat fun to refactor those

I don't. I like to feel productive instead of having to do laundry before getting to the actual work because someone just went ahead without any regard for quality control

>YAGNI + KISS > SOLID

Agreed

Monster architectures are monster architectures, and yet going from Enterprise(tm) architecture to chaos architecture so you can't know anything about the system without carefully going over hundreds of lines of code isn't any better


No linter? Seems like a quick thing to standardize


I actually did set up our linter but can't enforce the casing since so much of the codebase is all over the place and leadership didn't want to take any risk with an automatic conversion :shrug:.


Did not work for me


What response did you get?


I'm sorry, but this seems to be a string of letters and symbols without a clear meaning or context. Can you provide more information or clarify what you're looking for assistance with?


No wonder it succeeded.


lol - tesla, spacex, etc didnt succeed ? what planet are you living on?


It is hip on Twitter to say he just bought it all (with daddy’s money is even better to note) and knows nothing. As in: without getting free money he cannot succeed, only break. Link to an image of collapsing Tesla price.

It’s boring; chatgpt is great or skynet and either Musk is god or Musk is worthless is most of my Twitter timeline.


I don't know how rich Musk's dad is, but even if he was a billionaire, turning a billion into combined $1T+ marketcap companies is an incredible achievement.


Yes, but many of course think they would do equally well or better. And then many others are just trolling.


it's great, but it's also skynet's latest iteration. let's not kid ourselves while we're blinded by the new shiny.


Let’s not kid ourselves. Boring mass surveillance dystopia powered by fancy curve fitting algorithms is not going to be anything like Skynet.


Algorithmic dragnets running over all communications technology, every human carrying a microphone everywhere that they don't have control over, and walking killer robots sound very much like Skynet. The big difference is that it won't be run by an overarching AI, but by the grandchildren of the people who own everything now.


Life is a marathon, not a sprint. Let’s see how many of those are around when we actually go through a full business cycle. No company started since 2003 has really been through a real downturn. 2007/2008 was limited in its blast radius and the fed just threw money everywhere…


So 20 years for Tesla and 21 years for SpaceX is a sprint? What amount of time is a marathon? Facebook was founded in 2004, Google in 1998, are they still just sprinting?


how about when Tesla can survive off of the margins from ops without growth and without bilking its customer for vapor ware?

How about when they come out with a new body and chassis? When they go through a re-tooling cycle or two?

And again, let’s seem then make it through a full business cycle, because again, no company founded since 2001 knows that it’s like to run a company in a no growth or shrinking economy…


What is your definition for a "full business cycle"? Specifically the length? If you are going to define it as "I know it when I see it" then there's no room for a conversation here.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: