# Development Guidelines for the GeoAdmin team -> **None of us is as good as all of us** <- ## Definitions Production/prod: Anything that we offer as a service to the public or a 3rd party. ## We embrace the [agile manifesto](http://www.agilemanifesto.org/) - We work according to its [twelve principles](http://www.agilemanifesto.org/principles.html) ## What we consider a good Pull Request (PR) - A PR addresses a well described and well documented issue - A PR has a proper name - A PR contains atomic and well named commits - A PR describes the changes that are introduced and mentions possible side-effects for testing - A PR describes the necessary steps to undertake before merging (infrastructure, data, varnish, etc.) - A PR provides a testlink - and if that's not possible describes how it can be tested - A PR should be of **production** quality ## We review each others work, including our own - When creating a PR, you are the first to review it. - Before creating a PR, we review a PR by another developer. ## We treat *master* as production - Everything that is in master has production quality ## We never commit/push to *master* - We always develop on branches ## We develop in *dev* environments, using *dev* resources - We consider resources that are auto-deployed (db tables, others?) to be production resources - We never develop using production resources - We never develop code/scripts that read/manipulate production resources - We never create testlinks or do tests that use production resources ## We treat each script/test/codepiece/data the same - All code is production code, including testprojects, POC code, etc - We put everything up for review (including bash scripts, SQL, etc) ## We write tests for each piece of code - We do an extra effort to write tests for our code - Test code are an integral part of any development ## We never deploy on Friday, before holidays or alone - This concerns all production systems - This concerns infrastructure too (puppet runs) - Established and tested automatic scripts/processes are exceptions to this guideline ## We actively test production after each deploy - We develop, then deploy. These are 2 separate processes. - After each deploy, we test if the deployment was successfull. - Auto-triggering scripts are tested directly after the deploy. ## We treat global resource with care Gobal resources are resources shared by every developer. These are currently: - mf0 machine - apache on mf0 (take care of your config!) - sphinxsearch - db's (_dev) -> **Never stop improving** <-