I worked on LiMux in the developer team at the start of my career. HN is a village, lol. And the situation is more complex, and long enough has passed for me to detail out what actually were the problems without revealing anything top secret...
1. most of the desktop hardware was OLD. Like really fucking old. We're talking of systems with 256M of RAM. Anything would send these into swapping. But instead of blaming the finance department for not upgrading the computers, everyone was more than happy to blame LiMux because many people hoped that enough blaming would bring Windows back eventually (as it did...)
2. A lot of the hundreds of sites that the city of Munich has weren't connected to fast fiber, but via 10/10 SDSL (or slower) links. That's enough for Active Directory to work, and most sites had cache servers on-site to make life bearable, but still: everything was SLOW for a lot of users. From what I hear through the grape vines, that has changed at least for everything inside the Mittlerer Ring demarcation as M-net/SWM built out FTTB across the entire area, but some sites more remote still are on crap links.
3. LibreOffice, or rather OpenOffice was shit back then - I was there right when the fork happened. (And from what I hear, it's not gotten much better... developing an office suite actually requires funding which barely anyone wants to provide)
4. Many of the special applications ("Fachverfahren") were only available for Windows. Some (e.g. SAP) were available as Java apps (with all the problems JVM has, particularly being a memory hog), a few were available as Linux applications but usually in rpm format and not deb which made every update a PITA with alien (LiMux was Ubuntu based), but the utter majority were Windows-only. Some could be made to work with WINE, but some (particularly those interfacing with proprietary hardware such as specially hardened printers) still required a few Windows workstations here and there.
5. We were fucking understaffed. Like 4 FTEs working on packaging and development, but a whole externally sourced test department (that was, to be fair, really needed to catch regressions, and there were a lot of them). But each and every single one of my colleagues were absolute experts and a joy to work with and learn from. Without them, the situation would have been much worse.
6. Political interference. Not just from the city government and its bullshit, but especially from the entrenched "micro fiefdoms" in the administration. No one wanted to cede control to us or the central IT@M organization that was being formed when I was there, instead they all wanted their own decentralized teams (dIKA). Some wanted to opt out of LiMux entirely, and had good reasons for that (chiefly, their applications not running on LiMux).
7. Dieter fucking Reiter, the successor of Christian Ude as mayor after the 2014 elections, as well as the Social Democrat-Conservative government that came into power with him. Ude, for all he turned wrong after he left office, was a staunch protector of LiMux, and we all knew what would come once he left, and so it inevitably happened. And that's just one thing in the long list of reasons to despise Reiter.