Generally you had this thing called a "Project Manager" who DID THEIR ***ING JOB assigning sub-tasks within larger codebases to each line developer. They would make sure code from different programmers actually worked together, met the requirements of the projects, and handled every aspect of integration... Typically whilst double-fisting a pair of extra-large Dunkins dark roast triple-sweet whilst browsing auto trader for a replacement bumper for their 1982 Saab 99 Turbo.
NOT to be confused with today's "Project Manager" who spends two hours a day screwing around making pointless presentations and arranging even more pointless meetings, an hour or two pressing their nose up their boss' backside, and the rest of their day sitting there playing Facebook games. Typically whilst sipping their goofy illogically named Starbucks latte admiring their receipt for a Tesla 300 that won't even be delivered for three years.
See there was this time where programmers working on projects ACTUALLY TALKED TO EACH OTHER. In person, on the phone, using chat, using in-house forums. If you were working on code that might depend on or modify what someone else was doing you TALKED TO THEM instead of blindly hoping some goof-assed painful to use 'automation' wouldn't suddenly screw over the whole damned project via 'regressions' or conflicting commits.
Though to be fair I've NEVER worked on a project where version control wasn't creating more problems than it solved. Problems that just having ONE person accountable for the whole project fixes everything -- __assuming said person DOES THEIR HUFFING JOB!!!
I honestly think that a major part of why so many modern codebases are bloated train wrecks of developer ineptitude riddled with bugs, security holes, and performance headaches is an over-reliance on automation of things that should NEVER have been automated in the first bloody place. Version control software being a prime example of this where things would be far FAR better handled if people would just huffing TALK TO EACH-OTHER!