Title: Teaching Developer Hygiene Date: October 10, 2016 Tags: me devops ======================================== How do you teach non-developers good development practices and process and get them to like it? Where I work, people write a lot of code. Not all of them are developers and, more importantly, not all of them are writing code to create a software product. For them, the code is a disposable tool that generates *results* which are important to them. Management wants everyone to be writing better, more professional code. Those writing code, want to write it quickly, get out of it the "important" information then throw it away. To make this complicated, it's the important information generated by the code that management truly values. So that makes my job: get people to do things they should be doing, don't want to do, see no value in doing, and without incentive to do it. We do have "actual" developers as well. There are people who have worked for commercial companies building software products. I'm trying to tap into their experience and knowledge of software process. I'm no stranger to it myself. I've worked as a developer and in roles very close to development and am familiar with development process and tools. To these developers, things like testing and code review, are like brushing your teeth. It's just something you do. It's automatic and even though you don't see it right away, in the long run, you're better off for having put in the time. That's the key. Making them want, or at least, not feel like it's extra work to follow a good process. The level of ideas I need to get across run the full range. Check your code into source control...repeatedly as it changes. Use branches and merge them often to keep them up-to-date. Automate tasks that you have to do all the time so they actually get run. Tag, date, document, name, something, releases that you hand to someone else so when they get to it 6 months later, you know what you gave them. Some more advanced topics might be: Use a good branching strategy to separate development, releases, and hot fixes. Write and automate unit tests, as well as system or integration tests. Maybe throw in some fuzzing or static or dynamic analysis. Use a code style, write comments and generally make the code readable. I want to live in a world where a developer writing code, collaborating with other developers, doesn't have to be told to check in their changes so the others can use and build from it. I have to create that world.