modularization, better gitignore