Struggling for Competence

Source Control, Build, Test

I believe that the three fundamental practices of Software Engineering are: source control, build and test.

sourcecontrol build test

To be more specific these practices mean:

I have worked on a number of projects which adopted these practices to a greater or lesser extent. My experience is that the greater the adoption of these practices the "less painful" the project has been to work on.  None of the projects I have worked on has fully implemented all three practices. Most often we have failed to fully implement automated testing.  

This is because automated testing is difficult.