Basic software engineering issues:

In the real world, a large application is typically designed by a team of programmers and other specialists over a period of months or years. The programming team generally overlaps with neither the people who want the application designed, nor its eventual user community. In such large projects, the “good programming practice” you saw in CS I & II becomes even more important, on an even larger scale, and other issues of scale start to emerge.

Requirements and specification:
Top-down design:
Strong typing and type checking:
Modularity and interfaces.
Documentation:
Update documentation and version control:
Reuse:
Testing and debugging:
Maintenance: