This presentation will outline key lessons learnt in developing scientific software in Python. Methods of maintaining and assuring code quality will be discussed, in particular: - designing effective unit tests; - visualising output data to discover defects; and - designing characterisation tests to test the actual system behaviour and to identify unintended system changes.