In the part - I of this post, I listed out a whole lot of engineering practices. But didn't elaborate-
Which one of that in the list is most important or all of them are important?
How can you adopt them? All at a time or one at a time?
If one at a time, which one is that?
Is there any dependency between them so that one practice becomes predecessor to another practice?
Most of the time, correct answer for such questions is 'It depends'. Since each project is, each customer is, each environment is unique often you cannot give a definite answer to such questions. But even then I thought of a few practices stand apart from others in terms of criticality, dependency, business value and logical starting points. In my view, the one thing that stands out in the crowd is 'automated unit tests'. Why is it so important?
It's a logical starting point, without which you cannot implement many of the other practices. In terms of the amount of business value, no other single practice brings this much value as the automated unit tests.
It 'increases quality to the market' by making the defects obvious in the development cycle itself;
It 'reduces time-to-market' by catching the bugs early in the development cycle;
It 'reduces the Total Cost Ownership (TCO)' by helping the developer to figure out potential bugs even before code check-in; (bug detection after code check-in is always costlier);
It 'reduces the TCO' by reducing the regression test cycle;
It 'increases the life time of the product' by improving the maintainability
What more you need? Further, many of the other practices cannot be implemented without having automated unit tests
Continuous integration that runs all the unit tests before doing the real 'integration';
Test Driven Development depends on automated unit tests for high quality implementation;
Collective Code Ownership expects the automated unit tests to point out early bugs when somebody not familiar with the code base is tasked with changing the code;
Simple Design and Refactoring depends on automated unit tests to catch problems early when the structure is progressively changed without changing the behavior or functionality;
So if you are catching up with agile engineering practices and looking for a starting point, the choice is obvious: Start with automated unit tests, teach them, coach them, give some time for them to catch up before it becomes a habit and reaping benefits