Question 2
A. This is one of the areas where I think the evidence is unusually concrete.
One long-running competitive complaint was that a handful of elite players could simply be ridden through too many important games. BB had publicly acknowledged that limiting short rosters had been “frequently discussed for several seasons”
(312163.3), and the eventual exhaustion system formalized that goal
(315821.1): CalculateEffectiveSkill() applied effectiveSkill = baseSkill * exhaustionModifier once accumulated minutes pushed a player into the exhausted state. The result was exactly the sort of depth incentive managers had been asking for.
Not every request was about basketball mechanics. Managers had been asking for proper mobile access for years; one community summary literally lists “Apps need to be created” among the recurring proposals
(202503.665). BB then committed development resources to an official app and later reported beta progress
(308845.1) (311478.1). GetRoster(), GetUpcomingGames(), GetTransferBookmarks() and SendMessage() were exposed through the service layer, while AuthenticateMobileSession() handled the dedicated-client session. That is substantial engineering work mapped directly onto a repeatedly stated user need.
Another discussion revolved around whether losing a full year of training could ever make a 19-year-old draft pick attractive enough. Managers explicitly proposed stronger starting skills, even up to strong/proficient
(155982.2), and a later thread reached essentially the same consensus
(189984.2) (189984.8). BB then changed the generator so 19-year-olds could arrive with higher skill levels, including proficient ones
(311478.1). GenerateDraftPlayer() therefore applied skillBudget += AGE_19_SKILL_BONUS and raised maxInitialSkill before DistributeStartingSkills().
A different problem needed the opposite engineering instinct: preserve freedom rather than add a hard rule. BB stated outright that it had received many requests for a Cup transfer deadline, but implemented acclimation instead because national Cups ended at different times
(238664.15). OnPlayerTransferred() set player.Acclimation = 0, and CalculateMatchPerformance() applied GetAcclimationModifier(player) to recent arrivals. The market stayed open while the last-minute “rent a star for one Cup game” incentive was weakened.
Sometimes the suggestion arrived as basketball theory rather than a complaint. Managers were discussing Box-and-One in detail, including letting the engine identify the opponent’s strongest threat
(52388.17) (52388.21) (52388.23). The tactic later entered the game around that concept
(171825.2). CalculateDefensiveMatchups() gained a DefensiveTactic.BoxAndOne path, SelectPrimaryScoringThreat() chose the dedicated assignment, and the other four defenders entered the zone-positioning branch.
At the other end of the complexity scale, one request barely needed a design discussion. A manager wanted Point Differential shown directly in the league table; Marin replied, “Added the PD column”
(133342.18). BuildLeagueStandings() gained team.PointDifferential = team.PointsFor - team.PointsAgainst, the value was exposed through the standings view model, and the extra column was rendered. Sometimes responsiveness is exactly that simple: somebody asks for a useful thing, the developer agrees, and the software changes. Across changes ranging from one column to match-engine systems, A fits the record best.
Last edited by Maatsaas at 9/2/2026 3:19:04 PM