From what I learned in 15+ years working with most valuable people in successful projects I came to believe the key factors are:
As a freelance software developer"done" is when the customer/users can install and use the application comfortably. + I require from the customer a product backlog of UserStories with acceptance criteria + I agree which UserStories will be "done" in the next 2 to 4 weeks (sprint and sprint backlog respectively) + After the 2 or 4 weeks of the sprint I deliver all the files needed to build and install the application and automated tests to confirm the acceptance criteria were satisfied and the application is free of defects. I show how this can be done in a demo. I ensure the customer can continue development or maintain the application even without my help + using the fewer and broader known tools and programing patterns that can solve the problem + commenting source code and showing with automated tests how the application may be extended or modified For most applications I suggest a combination of a scripting with a low level general purpose language, e.g. Python, Javascript, Ruby or Perl running on C or Java and extended as needed in these languages. I can consider many other options for complex cases, as explained in the Tech section.
+ showing the principles and how they incarnate in what we do as developers + defining management goals as acceptance criteria for easy to compute software metrics
+ using the metrics to evaluate risks and decide next actions
+ teaching and helping the team adopt best practices
If given enough time (from two to three months) I use the same quality metrics and acceptance criteria to measure my contribution (shared goal) (If you are looking for eXtreme Programming coach or a Scrum coach think of this as a most effective path to reach your goal, backed up by the skills and years of real-world experience we developers usually need to trust somebody)
+ I quickly build working prototypes and simulations to ensure all the stakeholders share the same view and can try and explain all the relevant cases and scenarios, be current or predictable. + I map as many needs as possible to already existing solutions, concepts and patterns and help everybody understand and speak the same language + I use this information to define implementation strategy, requirements and acceptance criteria | ||||