That's not really "flat" in the sense that the OP is describing it. What he's talking about is restructuring a company to look more like an FOSS project. You have the project maintainers (c-level team) that set the goals. They sign off on all subprojects that are aligned with those goals and have enough people who want to work on them. The subprojects are run the same way, with people deciding what to hack on, in a way that is aligned with the goals, plus has support of the other team members.
The situation you described has all the crappiness of a corporate hierarchy, but none of the promises of meritocracy ("work hard and advance"). From the programmer’s perspective, he’s stuck both in rank and in skill.
Contrast this with the FOSS model, which creates the feeling that he’s working on something, versus working for someone. He can work on whatever project he’s interested in, or create a new one if it has enough traction. Since he’s not going into management, that leaves him with advancing in either depth or breadth. He can advance in depth by choosing to work on something that challenges his skill level. Or he can advance in depth by working on new technology or in a new area (e.g. frontend vs. backend).
>> He can work on whatever project he’s interested in, or create a new one if it has enough traction.
Just to play Devils Advocate here, but what happens if everybody wants to work on the same project? And this same developer doesn't have enough traction for other projects he would like to start?
If everyone works on the same project, there's only so much work to go around. If no one wants to work on something, it's probably a sign that it's not worth doing.
The situation you described has all the crappiness of a corporate hierarchy, but none of the promises of meritocracy ("work hard and advance"). From the programmer’s perspective, he’s stuck both in rank and in skill.
Contrast this with the FOSS model, which creates the feeling that he’s working on something, versus working for someone. He can work on whatever project he’s interested in, or create a new one if it has enough traction. Since he’s not going into management, that leaves him with advancing in either depth or breadth. He can advance in depth by choosing to work on something that challenges his skill level. Or he can advance in depth by working on new technology or in a new area (e.g. frontend vs. backend).