Live data from Hacker News

Software engineering topics I changed my mind on

chriskiehl.com

631–640 of 704 posts

Re: Software engineering topics I changed my mind on

#631
post #605

Earlier quoted context omitted.

The problem with that is that we can't be sure that it is their code. And let's be honest, it doesn't really work for designers either. Because the problems of hiring programmers isn't unique to programmers. Hiring gets harder the more you need out of your workers. Take any reasonably skilled position, hiring is incredibly difficult because it's hard to evaluate a person's skill in the blind. Hell, it can be difficul…

I am a veterinarian and recruiting is way more straightforward. You’re not going to test the person on the spot. It’s way more about personality fit, what you like/dislike to do, and where you see yourself a few years later down the road. And then a real paid tryout. Also I just changed jobs and was able to write code quickly because they were recruiting with tasks in mind for me. Sometimes it feels like the position…

Veterinarians have boards and licenses, right? I can't hang a shingle as a vet on a whim. That's a very clear filter. All the vetting of whether or not someone can perform the job is done before they even get to you.

However, anyone can call themselves a programmer and apply to programming jobs and there's no way to tell if they're capable or not until they're at it.

And even previous job experience isn't a strong signal of competence. I've inherited code bases from people who left for other programming jobs where the code they left behind was just a mess inside.

Re: Software engineering topics I changed my mind on

#632

Earlier quoted context omitted.

A place I used to work had engineers documenting their work essentially in the form of a blog. It was actually really a useful habit, and reviewing the project blogs once each week made it really easy for me to find cases when I could help a colleague who was working on something I'd had experience with before.

I'd venture that the parent was talking about engineers "documenting" their work for managers, whereas I think you mean documentation for other engineers. Very different audiences and thus different things to say. (And widely different lifespans for the information.) The latter no doubt is hugely useful (I'm on a long slow effort myself to get my co-workers to document their work more robustly). But writing status re…

I was hoping both purposes would be served, at this mandatory level.

I would adore any engineer who writes more blog posts walking through what they're up to more technically.

How do you feel about every-day stand ups as a means for managers/PMs to check in on employees? My own impression has been that this is at least 50%+ of the reason for stand up, and to me, I'd far prefer periodic write-ins, rather than ephemeral, undetailed, synchronous communication.

Re: Software engineering topics I changed my mind on

#633
post #19

I predict the following changes: 1) Typed languages are worse, and you want people with high levels of competence. 2) Java actually IS terrible. You win very little by designing for incompetent coworkers. Plan for competence, and hire appropriately. Small elite teams beat large incompetent teams every time. See #1. 3) Thinking through scalability upfront matters in many systems. Not all systems. Many systems. 4) SOLI…

Hard agree with 4 and 5. Soft agree with 6, I think there's nothing's wrong with sharing specially since many of the important teachings are incompatible with the kind of people for whom these lessons are not obvious after a couple of years of experience. But points 1 to 3 give me a visceral negative reaction. I'll go into detail: 1) If you're writing anything that's not a script with a few lines, and you care about…

> 1) If you're writing anything that's not a script with a few lines, and you care about your software not being terrible to maintain and change for other people in real production settings, typed languages wipe the floor with dynamic languages (excluding ecosystem moats, just judging the languages).

It's sort of the other way around. Typed languages result in most code being better, but completely prevent some design patterns. I have yet to run into piece of Java code -- beyond the completely standard use-case of a database-backed e-commerce / employee / inventory web site -- which doesn't go through one or two architectural contortions somewhere due to being forced into a specific paradigm.

The wins throughout the code from static take a back seat to the architectural contortions from not being able to express what you want.

Now, with incompetent developers, perhaps you want to prevent some design patterns, but those are workplaces I avoid like the plague.

> Java was sold to managers as "prevents cheap workers from making mistakes", but it was never about that and it's mostly terrible at it.

What do you think it's about?

I think that's a fair sale. If you're making a generic business system (you have things -- employees, inventory, customers, etc. you want to manage, which map 1:1 to objects, and which are exposed through a UX), it's nearly perfect, and you'll never hire qualified devs to work on those sorts of systems.

> 3) I would say that's a deceitful take, for only the absolute minority of systems have to care about scaling beyond a single server with failover (and a separate database if going with managed DB). For those systems that absolutely do care about horizontal scalability the answers should be absolutely obvious to any senior dev from the moment the requirements are stated. And for those cases where someone feels there may be a need for a complex scalability solution but there's not an obvious case for it yet, development will most of the time be better off starting with the simple solution and selectively optimizing as needed, just don't make it impossible to switch later down the road.

My experience -- having done a few successful startups and one or two failures -- is that it's critical to plan for success down the road. A major mode of failure is that decisions made early prevent success down the line. The system doesn't need to be scalable on day 1, but it absolutely positively needs to be designed for scale. The world is unpredictable, and you don't know the moment you'll hit exponential viral growth. At that point, you need to be able to refactor the system to hit scale virtually overnight. It doesn't always happen, but if you don't plan for it, it will never happen. It's the successes that define your career (and your bottom line).

The way I tend to design systems, they tend to run on 1-3 servers on a random cloud provider (depending on level of failover), but they use abstractions mapping onto scalable architectures (e.g. generic key-value stores and similar). If I do need to scale, it's a refactor away. A system I'm working on right now has an especially complex data pipeline. Thinking through scalability cost a few months time since it is complex, but without that, if we do hit scale, we'd hit a glass ceiling. As is, for now, we're sitting on top of a non-scalable managed RDBMS. If we do hit scale, I can migrate seamlessly to a horizontally scalable setup. At that point, we'd need to grow the team several-fold (esp. dev ops), but if you're scaling, that's okay; it's a fine problem to have.

I've advised startups, and ones which don't think through the long-term (and not just scalability; total addressable market, monetization, architecture to target adjacent markets, etc.) almost always fail, and if they succeed, it's by sheer, dumb luck.

Re: Software engineering topics I changed my mind on

#634
post #576

Earlier quoted context omitted.

I do not understand why people have to wait to discuss the blockers? Discuss a blocker whenever you have one.

Discuss a blocker whenever you have one. But that would require me interrupting one or more people in the middle of whatever they are doing and possibly ruining their flow. Unless there is a very tight deadline, work on something else and bring up your blocker when you know the relevant people have time to listen.

I also prefer not to interrupt others or to be interrupted. But if you send your problem as an e-mail, people can answer at their convenience.

My own experience is that frequently, the act of thinking about an issue long enough to be able to formulate a coherent e-mail about it makes the solution jump out at me before I even send the message.

Re: Software engineering topics I changed my mind on

#635
I agree with most of your assessments.

> Despite being called "engineers," most decision are pure cargo-cult with no backing analysis, data, or numbers

This is indeed so, most people are developers/programmers rather than software engineers. As a discipline, writing/crafting code still lacks the systematic approach of other engineering disciplines.

If I ask for a house to be built for me, people give me a plan as well as cost & time estimates, as part of a pretty standardized process. For sofware, there is much of a zig-zag route towards a foggy end goal in many projects.

That's why I'm working on a methodology to make things more systematic (there are of course many people working on methodology, some heavy like UML, some rather light/"agile", my focus is on methodology for data-intensive systems - systems that require machine learning components, which imposes a rather special list of process requirements on the project, for which nobody appears to have written up detailed guidelines/best practices, so that's ongoing).

> After performing over 100 interviews: interviewing is thoroughly broken. I also have no idea how to actually make it better.

I've interviewed a few hundred people in recent years, and been interviewed a few times myself. I agree most people use a broken process. My idea for making it better is: (a) cover a range of areas: motivation/goals - interpersonal - project experience - management - algorithms & data structures - coding practice. No silly logical riddles, but examples that are common in the daily life. So in case they really have been doing what their CV says, they should not need to have to practice for any of it.

Re: Software engineering topics I changed my mind on

#636
post #605

Earlier quoted context omitted.

The problem with that is that we can't be sure that it is their code. And let's be honest, it doesn't really work for designers either. Because the problems of hiring programmers isn't unique to programmers. Hiring gets harder the more you need out of your workers. Take any reasonably skilled position, hiring is incredibly difficult because it's hard to evaluate a person's skill in the blind. Hell, it can be difficul…

I am a veterinarian and recruiting is way more straightforward. You’re not going to test the person on the spot. It’s way more about personality fit, what you like/dislike to do, and where you see yourself a few years later down the road. And then a real paid tryout. Also I just changed jobs and was able to write code quickly because they were recruiting with tasks in mind for me. Sometimes it feels like the position…

1. “I am a veterinarian and recruiting is way more straightforward”

2. “Also I just changed jobs and was able to write code quickly because they were recruiting with tasks in mind for me.”

Is no one else confused by this? How common is a coding veterinarian and why do veterinarians write code?

Re: Software engineering topics I changed my mind on

#637
> Monoliths are pretty good in most circumstances

This 1M %!

I have seen a company being approached by an agency to design and implement them an e-commerce website that consisted of multiple web services and when I was asked for feedback, I said "start small; go with WooCommerce and when you hit it big, give me a call."

They are making 500K euros selling goods while being hosted on a shared hosting with a WordPress / WooCommerce website and the server spikes at 25% the most when traffic hit the website lol!

I will paraphrase the well-known "optimization / evil" and say:

    Over-engineer your infrastructure before go live will definitely lead you to failure, let alone bankruptcy.

Re: Software engineering topics I changed my mind on

#638
post #456

Earlier quoted context omitted.

> If a good developer you know, recommends someone they worked with: It's almost an instant hire. But for the rest, yeah, it's incredibly tough. A talk I watched recently by Ijeoma Oluo made a point I had never considered before: statistically, most people refer friends, and most friends are of a similar background, race, culture, gender, etc. It's not intentional- people aren't going out of their way to only refer p…

What is the upside of a higly diversified worksforce? Where I work we're all white males age 20-60 except accounting, they're white females around age 30. What's bad about this? What value does it bring to diversify, what should we look for and why is it important? Or are we too small to need diversifying yet with only about 30 employees?

There was a paper I saw a few years ago that showed a high correlation between the diversity of a lab (racial, cultural, income, political, age, anything they thought to measure) and citations of published work.

My personal experience is the more diverse a team in software, the fewer blind spots the product will have. This might not be something you always care about, but I think in general it leads to better products, since all that input can be very valuable. I would say by the time you have 30 employees you have had a lot of opportunities to not hire an echochamber. Of course you’ll get some diversity just by hiring different roles. Even just having senior and junior devs rubbing elbows is a good start for diversity, and even if it doesn’t make your product better, you’ll find the two groups have different tasks that are morale tarpits, and you’ll tend to have a happier team.

Re: Software engineering topics I changed my mind on

#639
post #13

> Designing scalable systems when you don't need to makes you a bad engineer. > In general, RDBMS > NoSql These two bullet points resonate with me so much right now. I'm a consultant and a lot of my client absolutely insist on using DynamoDB for everything . I'm building an internal facing app that will have users numbering in the hundreds, maybe. The hoops we are jumping through to break this app up into "microservi…

I was on a team which used DynamoDB for their hottest data set. Which would trivially fit in RAM.

Oh, that’s nothing. My company took over a contract from another company that had two DBA writing a schema to store approximately one hundred items in a database! We converted it to a JSON file.

Re: Software engineering topics I changed my mind on

#640
post #607

>People who stress over code style, linting rules, or other minutia are insane weirdos Counterpoint: People whose source is sloppy (inconsistent naming, indentation, brace placement etc) are almost certainly bad programmers.

True. But I don't think he's talking about that. I don't particularly care if you prefer tabs over spaces, or if you do brace on the line or on the next line, or one of the many other trivial details that don't affect the code quality. I do care that you have a preference though. I do care that you're consistent in applying that preference and have reasons where you break with that preference. I have my own preferenc…

Yes, it is the inconsistency and lack of attention to detail that is the giveaway, rather than the use any particular convention. Unless they don't vertically align their braces, then they are clearly some sort of monster. ;0)
Post reply on HN