4 ms·
The "nihilist" described here is a person that sees implementation as means towards an end, and in this perspective, functional requirements are at the center.
by partycoder 9y ago
The "nihilist" described here is a person that sees implementation as means towards an end, and in this perspective, functional requirements are at the center. Because of this, for these people software is a black box where the only important things are the touching surfaces.
The "optimist" described here is a person that sees software in a more broader sense: functional AND non-functional requirements. Non-functional requirements include maintainability, scalability, performance, security, configuration, etc. and will strive to implement them.
--
Now, my opinion:
My name for the "nihilist" programmer are "feature fairies" or "duct tape programmers". The problem with feature fairies are that they create more problems than they solve, and never volunteer to fix them.
Feature fairies like to get credited with completed features, but never with the defects associated with their contributions. Therefore they will usually play dumb when a bug happens, or an incident is declared, and make someone else clean up after them while they implement the next feature.
So after a couple of years, you have someone credited with a lot of features, and a team of people that have been cleaning up after such person. The duct tape fairy is now a 10xer, a rockstar whose time is very valuable therefore needs to be paid more, even promoted, even though this person is responsible for wasting 90% of the engineering payroll in fixing trivially avoidable defects.
The way to prevent that is to leave a trail of evidence that can link commits to bugs. When an incident happens, make sure to identify the commit id causing the problem and put it directly in the ticket. Make it very clear where the defects are coming from and who they're coming from.
Never volunteer to clean up after a feature fairy. By the time you do this, the feature fairy marked their task as complete and from the eyes of management you would be wasting your time working on a completed task. Rather than doing that:
- When the feature fairy wants to take on the next task, ask if they have fixed one of the defects caused by them as per evidenced in the commit id.
- Rather than opening a new ticket, reopen the original ticket. This better reflects the situation: you are completing the work the duct taper failed to complete, you are not adding new work. This also denies the duct taper of their prized fake task completion.
When a feature fairy volunteers to be in a hiring committee, prevent it at all costs. They last thing you need is having to clean up after more people.
Be careful while doing this to not be perceived as negative.
- scribu 9y ago> The way to prevent that is to leave a trail of evidence that can link commits to bugs. Or have a code review step in the workflow, so that the buggy commits don't get merged in the first place?
- partycoder 9y agoYou can, but while you do so be extremely careful to not be perceived as conflictive, negative or nitpicky. If they are reasonable and take feedback well, you can work with them and iron out any issues effortlessly. But if they're toxic, don't antagonize them.
- overgard 9y agoI've been programming professionally for a decade and I've yet to see a "feature fairy" like you describe. I have seen a lot of crab mentality though -- mediocre developers and managers trying to use process to bring everyone back to the mean. Humoring the idea for a moment though: isn't anyone that writes a high volume of code also going to create a (proportional) high volume of bugs as collateral? If someone has written twice as much of a system as others on the team, it wouldnt be weird if they were responsible for twice as many bugs.
- partycoder 9y agoProductivity is not writing more code, but rather finishing more work, and while there's an overlap, they're substantially different things. If you are taking less time than the rest, there are a couple of possibilities: - You are a legit virtuoso of software. <- this is possible, but less likely. - You are cutting corners and leaving work for others to do. <- this is much more likely In the first case there's no problem. In the second case you are not truly finishing your work and the team has a legitimate reason to ask you to finish your leftover work. If everyone starts contributing code leaving left-overs to inflate their productivity, it quickly becomes a race to the bottom: technical bankruptcy. If you are not able to explain what your code does word by word that means for a start that you did not read the documentation, you repurposed code you don't really understand. Therefore your time savings are at the expense of compromising the quality. If you didn't handle errors, if you didn't write tests, if you hardcoded magic numbers and strings, if you didn't test your code, if you didn't stick to the coding standard, if your identifiers don't reflect the code they represent, if you coupled unrelated code and performed actions at a distance... you are also saving time at the expense of the product quality because you cheated to finish earlier. All those problems add up to technical debt.