Software projects need heroes? lessons learned from 1100 projects
neverworkintheory.org
neverworkintheory.org
Oh gross. Open source projects?
And the paper's sanity checks are:
- one pull request.
- more than 20 commits.
– at least 50 weeks of activity.
– more than 10 issues.
– at least 8 contributors.
Secondly, the majority of the projects they looked at have the majority of their code as shell: Language Projects
Shell 416
JavaScript 396
HTML 344
CSS 314
Python 291
Makefile 229
Ruby 216
C 167
Java 150
PHP 146
C++ 126
Batchfile 81
Perl 67
Objective-C 67
Dockerfile 54
CMake 48
M4 43
CoffeeScript 38
Roff 35
Roff 35
C-Sharp 34
Emacs Lisp 30
Gherkin 26
Perl 6 21
And yes, they list Roff twice. This paper is really saying "In open source rando libraries on github, usually there is one person who does the majority of the work".The hero problem most people are talking about in software engineering are heroes at paid jobs, working on codebases with 2000+ commits, in teams of 10s to 10000s. I'm not sure this paper provides any reasonable insights to how we work together.
The heros can be the one or two people on the project who make it happen. It doesn't need to be 10,000 developers, I would expect different silos to emerge with a group that large.
The majority of projects is also something else, by my estimation.
Right, but the "hero" as discussed by most folks is only a problem if the team expects hiring more software engineers should speed up execution, even sub-linearly. With a "hero" this is extremely difficult to manage.
I see this as an interesting problem in software development, and there are many more interesting discussions about this.
However - this paper presents a pile of open source repositories (not even necessarily projects/products) that accepted commits/patches from others. Open source must operate differently as all contributions are voluntary. If someone wants to be a hero, great, move the project forward. Thus all of these BDFLs, as the projects can't even imagine themselves without their initial hero. Projects that don't look like this tend to have paid developers (rust, go, fuschia, chromium, firefox) as opposed to the projects with heroes.
This paper starts with "I found a data set, lemme try to fit it to my question" rather than "is this data set relevant for my question?"
At work it can be the developer who is pissed off the most about the code quality causing development pain or just naive enough to believe they might be rewarded if they care about the code.
In open source it is the pet project owner that often wants to see the project succeed.
It all comes down to who cares the most.
If you care you lay down industry best practices as the fundamentals, you tend the garden of knowledge and encourage pride in making your code the best. You mentor junior devs and put gates around your code to protect it. Fill your seats with developers who are willing to learn, challenge one another to greatness and when you find a hero, don't let them commit again until they have mentored two devs to take on the mantel.
That’s a pretty curious take. But in some way, it makes a lot of sense.
Ask who is willing to do documentation, do not chose anyone volunteering for that.
Real teamwork on the job does not work that way, unless management sux. When management checks out and stops managing/leading, it can descent there too.
They require a fraction of the resources to assess.
Gonna stop you right there. Ever consider industry best practices as not for everything and anything? 'The best' is very subjective.
- The vast majority of GitHub projects probably have only a single contributor. Hopefully this study excluded such projects. Edit: A quick survey of the paper doesn't clarify this - there's a plot showing number of developers which bottoms out somewhere below 20.
- Among the projects which have more than one contributor, the vast majority again probably has only one contributor who can be reasonably said to understand the whole project. They wrote it from scratch, and nobody else contributed until it became useful to a more general audience.
Rather than concluding that "heroes" should be supported to communicate more/better, wouldn't it be reasonable to conclude that each project is so different from every other project (there are such a huge number of tools and languages to choose from, after all) that any minor contributors are highly unlikely to be familiar with the project? Could we not from that draw the much more pedestrian conclusion that people unfamiliar with a project produce buggy patches?
"Hero developers are far less likely to introduce bugs into the codebase than their non-hero counterparts. Thus having heroes in projects significantly affects the code quality." This doesn't follow. You are saying that in hero projects heroes introduce fewer bugs than non-heroes. You can't conclude anything about the difference between hero and non-hero projects from that.
That said, I would hope that the communication tools become better in the future for all the contributors, so that newcomers and experts alike can more easily understand each other and the project, leading to better communication and contributions.
On the other hand, the term Hero in this article and research refers to a developer who is most involved with other people in the project, and has the most communication with everyone else, and thus shortening the communication gaps and misunderstandings. Reminds me a lot of a hack against Conway's Law. This person also happens to do most of the work, but that might as well be accidental, since this person (in these github projects) is the nominated responsible person for that project.
And the bias for "publicly available open source projects on github" is just horrible. It is like inspecting the color of bananas and then proving that avocados are in fact yellow.
In my case I don't see myself as a 'hero', I just see myself as the person motivated to build it. Probably all of the bugs were caused by me, mostly because I wrote nearly all of it.
In terms of interactions (comments on Issues), again it's mostly me because I know it and built it.
That's not to say others don't help or contribute, this project seems to 'fit the numbers', but I don't see how this is in anyway insightful, it's just obvious for open-source projects. To a certain extent I see the people who contribute as the real heroes, as they're not getting much out of it personally: it's me who gets all the kudos for the project, not them.
Some insight into how this translates into projects within real businesses would be much more useful. Anecdotally again, I do see the pattern of the hero in my organisation (and have in previous companies I've worked at).
Several members of my team are real force multipliers and could easily be called heroes, and to a certain extent they receive that hero worship within the organisation (which can be good and bad). I'd say we probably wouldn't have survived as a business without them being exceptional or going the extra mile.
But what I'm sure of is that you don't want to be the hero, unless you can participate in the upside on equity-like terms (unbounded) capturing significant fraction of the upside for yourself. Doesn't necessarily have to be monetary, starting a large and successful open source project is a great achievement.
Otherwise just close your laptop/go home and Let It Fail.
How exactly Igors come in possession of such knowledge is irrelevant to this empirical fact. Some may build up security by obscurity and make themselves indispensable; some might have accrued the knowledge by either being the one who designed it, or having had to debug its guts because a change had to be made. An Igor can be a bottleneck or a godsend. The defining trait is that whenever there's a weird issue in a subsystem or more than a cosmetic change needs to be made, everyone goes, "let's ask Igor" or "let Igor do it". Again, doesn't matter if Igor is good or evil.
Even when Igor is open towards the idea of knowledge sharing, even eager about it sometimes, everyone else is lukewarm at best, and all non-Igors just hope they don't replace Igor at his job. It's just damn convenient to have Igor around. When Igor departs the company, knowledge transfer sessions usually consists of Igor working hard to explain everything, and everyone else quietly hoping that somebody else will listen and take notes. No one will remember where the notes are, though, and where the recordings of the sessions are stored, or whether they indeed are made and stored at all.
When Igor gets hit by a bus, even the most documented system he was tending to will likely be replaced by something else, because reading is too much work already, and comprehension is even more so. There also may be an emerging larva of Igor who wants to put some cred onto his résumé, so he will obviously want to redesign everything in the coolest technology du jour.
One is that they are looking specifically at open source projects, which, as other comments have pointed out, can technically meet their definition of a "hero project" without anyone engaging in the types of heroics normally associated with that term.
The other problem is that they talk about comparing hero developers to non-hero developers, when they should be comparing hero projects to non-hero projects.
If hero projects (as the paper defines them) are so common, then the pool of non-hero developers is going to include a lot of non-hero developers working on hero projects. Of course those people make more mistakes than the heroes, they're less familiar with the project. But those mistakes were made following the hero project model and should count against it, not for it.
>> In our data, commits with lower defects come from the small number of hero developers who have learned how to talk to more people.
This makes me think of a RustConf 2021 talk that was just published, 'Compile-Time Social Coordination' by Zac Burns [0], where he discusses coordination problems that can come up when you have developers working on nearby code but don't communicate directly, and how you can encode what are normally 'socially enforced' norms and patterns into the type system to enforce correctness at compile time.
However, seems this research did not look into Apache projects, which basically maintain a different culture to encourage more contributors, so much as to encourage the main contributors to refrain from jumping to solve an issue until another person steps in first.
Interestingly, these works suggest that having a small number of developers that are critical for the project is risky and should be avoided, opposite to the conclusions of the paper discussed in the article.
Moreover, both Heroes and TF seem to me as consequences of the same problem: the inability of current technologies/methodologies to enable a seamless sharing/spreading of the knowledge acquired by veteran developers, that have been working for a long time on the project, with less experienced ones. I believe the shift to agile methodologies has made this problem worse if anything.
[1] http://aserg.labsoft.dcc.ufmg.br/truckfactor/avelino87423.pd...
It’s interesting to note that these people can also become the doom of the project. This is why there is no single easy recipe for picking the right person.
I've been working in such teams, the surgeon was typically one of the early developpers, that did (and knew) most of the code, but as the system grew sub-surgeons started to emerge for new or reworked parts.
Same for another submission against 10x engineers that is currently on the front page.
10 years ago hackers just had to fight the machine. Now they have to refute propaganda on a daily basis as well.
I wonder what you think pays my salary.
I wonder what propaganda you mean.
And the synthesis: the right team culture allows a diversity of engineers, including ‘hero engineers’, to flourish and effectively contribute together; time to adapt your culture to your team.
So why is this not fair? Intelligence, like confidence or socioeconomic status, is also not fairly distributed. Only about 5% of the general population will have an IQ above 125, so not even genius level but already heavily skewed. We can probably assume that this number is slightly higher for a population that make a career in IT... but intelligence is still not a given, why should it be considered more "fair"?
In any case, the 2nd point is a non-issue; incompetent people are rarely considered "heroes", so it's a bit of a self-correcting system in the end.
It's not ideal. The challenge is increasing the number of "heroes" (removing the bus factor), and preventing the heroes from burning out or falling back to indifference like the rest.
Note: I'm not saying the rest are lazy. In repetitive/predictable work, that's fine, but when there are lots of unknowns (like most software projects), you need to go the extra mile sometimes.