Live data from Hacker News

Beware of Developers Who Do Negative Work

blog.professorbeekums.com

71–80 of 271 posts

Re: Beware of Developers Who Do Negative Work

#71
post #5
post #2

Maybe these developers that produce "negative work" think your code sucks. Ever consider that?

What's your point exactly?

I think cripytx might be suggesting that the negativity of one's work might be subjective. In software development, this idea has proven to be a very dangerous one. And it's false.

Take a perfectly well-written module, it's always possible to transform it into objective crap. Just for fun, here are some recipes for C++: - add to the module a dependency on a framework (e.g to use QString instead of string just because the dev is more familiar with QString) - replace implicit memory management with explicit one (e.g just because the dev doesn't like unique_ptr) - reformat some parts of the source files one's own coding style (e.g because the official one isn't good anyway) - inline every function that's only called once (e.g why the need to factorize if it's only needed once?) - up-front convert functions into function templates (e.g one day someone might need the generic version!) - "optimize" the code (unroll loops, inline calls) without profiling it (e.g this part can't be profiled anyway because it doesn't take enough time)

Let's take one module (module A), apply these recipes, you get module B. At first, A and B both have the exact same number of features, and the exact same number of bugs. However, as time passes, the stability of both will quickly diverge, the cost of new features will also quickly diverge.

It doesn't require more work to directly create module A, because it's actually about not doing some things ; however, it certainly requires more knowledge. Developers directly creating module B are implicitely relying on the ability of their team to transform it into module A. And _this_ will require work. This is negative work, i.e work that should have been done but hasn't (also known as "technical debt").

Re: Beware of Developers Who Do Negative Work

#72
post #53
post #32

Earlier quoted context omitted.

+1 to this. I used to work with a guy like that and it created a ton of tech debt. He would write new services using a new technology for each one, not to documenting or maintaining any of them.

What's sad is that it looks great on his or her resume to do that. That developer might leave a trail of carnage but they don't care--on to the new shiny job for them. It never catches up.

I can't really blame developers for this -- they're just responding to incentives. So long as hiring managers penalize candidates that don't have experience with trendy stacks then your actively doing your employees a disservice by prohibiting them. The only thing I can perosnally do to combat this problem is be conscious of it, not engage in that kind of hiring behavior in my office, and hope that the culture changes.

Giving employees opportunities for side projects helps somewhat. Allowing for gradual migrations to new technologies helps as well.

Re: Beware of Developers Who Do Negative Work

#73

> So if the cost of a developer who does negative work is so high, how do they get hired? Part of it can be explained by an interview process that needs improvement, but a less talked about part is the temptation to lower hiring standards. I've seen plenty of people who can reverse binary trees or fizzbang etc who are terrible additions to teams and do "negative work". That's because having a grasp of CS fundamentals…

Even though CS fundamentals and contributing in teams are somewhat different skills, in my experience the terrible developers that contribute negatively to the project tend to be those that do not have a good grasp of CS fundamentals.

I mean, some problems we are faced with are very, very challenging and if somebody can't figure out how to reverse a binary tree or do a FizzBuzz, then what can he do?

Also I'm hearing this advice to hire engineers recommended by other engineers quite often, however speaking as somebody constantly engaged in hiring decisions at our company, I must say that recommendations don't scale.

You see, outside the SF bubble of course, our friends are mostly not into software development and we engineers are kind of introverts, goes with the territory, so we don't have that many friends or acquaintances anyway, except for people that we meet on the Internet, which usually live in another city or country. If an employee can produce one good recommendation, that's way, way above the average. It's such a rare event actually that such employees need reward.

This advice also misses the point. The problem is that our industry is constantly growing and there aren't enough good people to go around. Which means we have to take the plunge and hire beginners as well. Investing in the education of beginners is the only way a company can scale in talent. But even then you need a filter. You can't hire anybody that walks through that door, as firing people is a serious drag on morale and a net loss for the company.

So what filter can you apply to beginners? CS education of course, or in other words what people should have learned in school.

Re: Beware of Developers Who Do Negative Work

#74
post #44

An even more egregious form of negative work is a developer who is stuck using out of date programming practices AND has a large amount of influence at a company. At the other extreme is the developer who is so entranced by "newer is better" mentality that they rewrite everything in an attempt to conform to "latest best practices", increasing complexity massively while introducing a bunch of bugs and huge dependencie…

This is definitely true on both ends. At a previous company, the tech influencers believed in the archaic "do everything in the database." While we were technically using the .Net stack, we weren't allowed to do any actual business logic in C#. Instead it had to all be done in MS-SQL procedures (or at least at much as possible with very little CLR glue). Similarly at my current company, we had a product were the init…

Can you explain why you feel that "do everything in the database" is archaic? A lot of logic (especially authentication logic) can be put in the database only. Not to mention that I won't trust anything that only has application level security, and nothing at database level to check/limit it.

Re: Beware of Developers Who Do Negative Work

#75

While the concept of negative work is certainly instructive, my misgiving is that it's probably difficult or impossible to measure the overall value added (or subtracted) by any worker in a complex organization. My guess is that most of us have our positive and negative moments, and hopefully the positives outweigh the negatives.

This is pretty much how I feel about it as well. Sometimes you'll deal with a more complex system where bugs might creep in even for an experienced developer, that then end up needing bugfixes for a week to come.

Yet you might also write code that does it's job great (mostly) without bugs a week later.

Re: Beware of Developers Who Do Negative Work

#76

> So if the cost of a developer who does negative work is so high, how do they get hired? Part of it can be explained by an interview process that needs improvement, but a less talked about part is the temptation to lower hiring standards. I've seen plenty of people who can reverse binary trees or fizzbang etc who are terrible additions to teams and do "negative work". That's because having a grasp of CS fundamentals…

Danger with this is people recommend based on friendship & personal gain as much as competence.

You can end up with mini guilds of ~5 people, who know each other well, and help each other with their career by recommending each other as they migrate from company to company.

Seen this happen twice now. At my current company, someone joined the devops/infrastructure team, then brought 4 over from his network at his previous company. Most are competent, but one seriously isn't, and he's protected by his cabal, who now dominate the team. He's a 'senior' engineer to boot!

Re: Beware of Developers Who Do Negative Work

#77

Earlier quoted context omitted.

How do you ... know?

while I'm not arcticbull, I worked for a period of time with somebody who was a minority and completely horrible at their job. Everytime my boss tried to get him fired, HR pushed back

That is quite sad. In this case you are not firing for the wrong reason.

I get that HR might need to verify that this person is being fired for the right reason and that no discrimination is in play (which might happen unwittingly), but just keeping someone employed because they are a minority is not a good solution.

On a related note. If I was a minority, I would think that I was just being hired or kept on the team because I am a minority and not for my technical ability. This behaviour from HR would further encourage that thinking.

Re: Beware of Developers Who Do Negative Work

#78
post #6

There's this magical process called continuous integration that internalizes the impact of bad (or, more likely, misguided) developers. Don't let them merge their branch until all tests pass. If their commit breaks something while all tests still pass, then direct them to write the missing tests.

One of our (now ex) developers would write tests that setup a mock, and test the properties of the mock, so if you deleted the source code, the test would still pass!

His pull requests sucked up hours of other devs time, but bad stuff still leaked through simply because the other devs didn't have time to rewrite his PR. He was fired eventually, but the ongoing cleanup still continues...

Re: Beware of Developers Who Do Negative Work

#79

The "convoluted code" gauge is a double-edged sword. You could also be working at a company with developers who have no experience with the benefits of functional programming. In this scenario it's those who write nested loops, branching if-statements, and mutating side-effects that are in charge and you're the bad developer for using fold and map. You could be seen as an elitist who likes to write clever, obfuscated…

Functional programming does have some useful syntax and principles that can make code easier to reason about. But a much bigger red flag is if a developer is so fixated on a certain programming philosophy or methodology that they don't pay attention to writing simple, good code.

Re: Beware of Developers Who Do Negative Work

#80
post #49

Earlier quoted context omitted.

> Amazingly quickly he would suss out the problem and get things running -- making the customer happy and rescuing the SLA Probably skills they learned reading their own code. I've noticed it with other people, the ones he can quickly debug spaghetti are the ones that will create more of it. It's why they stick around, management likes them because the can solve problems, they just don't see the creation of yet more…

It was my job for a while to work with scientists and their spaghetti Fortran codebases. One esteemed fellow still stuck to the FORTRAN IV of his youth (the original pasta language). It was amazing how much they could do with such old technology. The overriding impression ultimately was: "Never keep intellectual property just in code"

I feel your pain. Scientists & data scientists are notorious for spaghetti code.

Refactoring scientists code was how I got into software engineering. I used to be a scientist, and I found restructuring/modularizing the analysis code more fulfilling than the actual analysis.

Post reply on HN