If you're used to 'programming in the small' (e.g. working on single person projects, or single-use projects or prototypes where maintanence isn't a primary concern), what changes as you go to 'programming in the large' (e.g. working on teams on projects that will be maintained)?
Some thoughts (i'm not sure about these):
- external issue tracking, rather than todos in the code
- static typing becomes more useful, as a way to communicate invariants to other programmers
- defined interfaces between parts of the program
- documentation of those interfaces, also more time spent on commenting code
- ad-hoc metaprogramming slightly discouraged (because it makes code harder to read), although on the other hand there is more reason to meta-program a project-wide framework for the whole team to use
- more time spent refactoring, rather than improving functional or non-functional requirements
- code becomes cruftier as more and more real-world special cases are handled
- more laborious procedure for getting changes accepted
please email me any comments