Software Development Philosophy
Originally published
Last modified
Be aware of and look out for community management anti-patterns
Software is a product of the environment it was created in. Create a good environment for yourself, your team, and others.
Good software created in a bad environment can only be the result of a stroke of luck, or team members burning themselves out.
What makes good communication?
- "Seek first to understand before being understood"
- Know your audience; gauge familiarity to prevent assuming too much knowledge and to prevent being patronizing
- Provide specific and precise answers to specific and precise questions.
- Pause regularly to allow participants to ask questions, clarify positions, and comment insight.
What makes good documentation?
Information loss is an inherent part of communication. Creating and maintaining clear, referencable documentation will help to minimize the information loss of time-bound communication like face to face conversation, email, and chats.
Use a combination of documentation checked into version control and documentation on a wiki. A few short examples are worth a few pages of wordy prose. Place documentation near the subject being documented.
What makes a good developer?
- Knowing the language syntax and features
- Knowing the tools, frameworks, and libraries
- Knowing data organization and algorithms
- Knowing idioms, patterns, and pitfalls
- Having a mind for general problem solving and independent research
- Handling all errors and every code path
What makes a good tester?
- Testing odd and unintuitive behavior
- Writing detailed bug reports with specific language
What makes a good team member?
Just being a good developer or tester does not automatically mean you are a good team member. Healthy collaboration additionally demands the following:
- Compassion
- Having a common goal
- Pride in quality
- Effective communication
- Understanding of trade-offs
- Objective discussion
- Asking well-formed questions
What makes a good development manager / team lead?
In addition to all the criteria for good team members, team leads shoulder more responsibility that is worth explicitly calling out:
- Steady vision of path to the goal
- Taking an active role in team health
- Proactive solicitation of feedback
- Creating and executing a plan to solve problems identified by the team
- Identifying and solving problems that have not been realized by the team
- Preventing problems from occurring to begin with
- Regular recognition of specific work done
- Confidence in team member work
- Transparency of concerns
- Useful prioritization
How can time be spent most effectively in meetings?
Meetings are expensive because they are time not spent being individually productive. Extract as much value from meetings as possible by taking and sharing good notes. Quality notes can prevent redundant meetings.
Create a wiki page for each meeting before the meeting. Create bullet points for each item to discuss, including, if applicable:
- Context
- Questions
- Choices
- Next Steps
Take live notes on the wiki page during the meeting. If possible, share your screen while taking notes. Notes should be detailed enough that there should be concrete text to specifically point at and agree or disagree about, for any item being discussed.