(unthreaded from here)
During the day, I’m a Lead of a group of programmers. We’re responsible for a range of tools and tech used by others at the company for making games.
I have a list of the my priorities (and some related questions) of things that I think are important for us to be able to do well as individuals, and as a team:
- Treat people with respect. Value their time, place high value on their well-being, and start with the assumption that they have good intentions
(“People” includes yourself: respect yourself, value your own time and well-being, and have confidence in your good intentions.) - When solving a problem, know the user and understand their needs.
- Do you understand the problem(s) that need to be solved? (it’s easy to make assumptions)
- Have you spoken to the user and listened to their perspective? (it’s easy to solve the wrong problem)
- Have you explored the specific constraints of the problem by asking questions like:
- Is this part needed? (it’s easy to over-reach)
- Is there a satisfactory simpler alternative? (actively pursue simplicity)
- What else will be needed? (it’s easy to overlook details)
- Have your discussed your proposed solution with users, and do they understand what you intend to do? (verify, and pursue buy-in)
- Do you continue to meet regularly with users? Do they know you? Do they believe that you’re working for their benefit? (don’t under-estimate the value of trust)
- Have a clear understanding of what you are doing.
- Do you understand the system you’re working in? (it’s easy to make assumptions)
- Have you read the documentation and/or code? (set yourself up to succeed with whatever is available)
- For code:
- Have you tried to modify the code? (pull a thread; see what breaks)
- Can you explain how the code works to another programmer in a convincing way? (test your confidence)
- Can you explain how the code works to a non-programmer?
- When trying to solve a problem, debug aggressively and efficiently.
- Does the bug need to be fixed? (see 1)
- Do you understand how the system works? (see 2)
- Is there a faster way to debug the problem? Can you change code or data to cause the problem to occur more quickly and reliably? (iterate as quickly as you can, fix the bug, and move on)
- Do you trust your own judgement? (debug boldly, have confidence in what you have observed, make hypotheses and test them)
- Pursue excellence in your work.
- How are you working to be better understood? (good communication takes time and effort)
- How are you working to better understand others? (don’t assume that others will pursue you with insights)
- Are you responding to feedback with enthusiasm to improve your work? (pursue professionalism)
- Are you writing high quality, easy to understand, easy to maintain code? How do you know? (continue to develop your technical skills)
- How are you working to become an expert and industry leader with the technologies and techniques you use every day? (pursue excellence in your field)
- Are you eager to improve (and fix) systems you have worked on previously? (take responsibility for your work)
The list was created for discussion with the group, and as an effort to articulate my own expectations in a way that will help my team understand me.
Composing this has been useful exercise for me as a lead, and definitely worthwhile for the group. If you’ve never tried writing down your own priorities, values, and/or assumptions, I encourage you to try it :)