I'd recommend to use some tools for agile development to create a self-organized and self-directed work team. Agile methods advocates adaptive planning and flexible response to changes which could help with your problem.
In traditional Scrum, the day of each programmer starts with a stand-up, where team members shortly discuss what they did the previous day and what goal they have today. Therefore every member knows what his colleagues work on, which supports to create a commited cross-functional team. However stand-ups can be very disruptive because you have to stop what you're doing to attend to such daily meeting. Instead you can use a tools like Slack (https://slack.com) to support communication between team members, submit daily reports or share problems and ideas.
Next improvement is to do pair programming and code reviews. This not only allows newcomers to understand your source code faster, but also has a high impact on code quality produced by your existing team members. Code reviews are supported by many popular source code management tools like Github (https://github.com).
Another improvement could be to introduce Kanban board, which will allows you to visualize progress of the team and do changes in the flow of work items without shaking up the whole system. The board has vertical columns to organize programming tasks into a pipeline (for example: Backlog, In progress, Stalled, Code review and Done). Individual team members can then assign themselves to tasks which they want to implement or review. This may look like a very mechanical approach, but it has a profound effects on people and how they interact with one another. If you use Github for your source code management, you can use for example a tool called ZenHub (https://www.zenhub.com/).
You can also integrate the tools together, for example to receive a notification on Slack, when somebody reviewed your code or suggested some modification. Or automatic notification can be send to other team members on Slack when you change the state of your work item on the board. Other programmers can then assign themselves to inspect your code when you move your work item on the board to Code review column.