Priorities and keys to success are listed here by major category and in cases where the subcategories could be made into acronyms, I did it. If you have any additions or subtractions to this list, please feel free to comment.
Product quality (PATS)
- provability (stable, reliable, code-review)
- agility / adaptability (most code should be usable across projects)
- testability (includes building tools to test)
- suitability (does it meet the requirements strictly? loosely? spirit?)
- listen first (everyone wants to talk, don't interrupt, just listen, then talk)
- intellectual discussion (never personal or emotional)
- frankness / honesty
- follow up (don't let any ask go two weeks without asking "where are we on this task?", make lists for following up)
- listen (subordinates have a lot to say, and they can tell if you are listening or not)
- integrate ideas (demonstrate that you trust that person by using his ideas)
- needs (home, pets, schedule, etc, openly discuss social style)
- goals for the employee - possibly cross training
- engage employee (one on ones, intellectual debate on work, etc)
- radiate positivity
- production (pipeline)
- integration tools (tools for AI, tools for audio, etc)
- effort reduction (automated builds, automated build disks, file copying, etc)
- core systems (engine, memory, file systems, etc)
- status monitoring (build bot, PerForce, frame rate monitoring)
Steady at the helm - this is the hardest responsibility to do because everyone wants to make rapid changes but this one is the key to the success of any engineering process. These are suggestions and require you to be a hard ass.
- Quarterly changes. Do not change deliverables/goals but once per quarter. Stable delivery is impossible when the goals change often.
- Queue up change-requests in a detailed list and one week before the next quarter, review. Only keep things that designers think are still important. Use a rating system.
- Rate the importance of all game features based on fun, necessity for modern titles to have it, and difficulty to deliver. There should be very few features not listed.
- front end and interface (GUI, menuing, icons, etc)
- controllers (esp for wii)
- audio
- presentation and camera control
- gameplay
- AI
- animation
- systems
- People don’t know what they want until they see it. Encourage mockups, design docs, and whiteboard sessions.
- give the designers ‘tweekability’ and allow them to do as much testing as they can stand.
- UML baby
- always discuss patterns by name when it applies. (education)
- build systems, not classes. Integrate, not isolate.
- early preparation (make periodic builds that run on target hardware, put processes in place to facilitate quick builds)
- under-promise and over-deliver (a good engineering pracice I learned from Scotty)
- warn early - repeat warning (always let others know when you face a mountain and that it is interfering with other work).
- be prepared to repeat everything you say at least 5 times related to delivery
- define key dates by names (alpha, beta, FPP, etc, this really matters)
- define short-term deliverables and mid-term deliverables for everyone (less than 8 weeks and 8-20 weeks respectively)
- keep designers busy or they make your life hell (tools, design ideas, helping with testing tools, etc). Do not let designers or art staff work directly with programmers.
- set and keep schedules (project management 101)
- we know the tasks, let engineers pick which ones get to be done. This gives people a little control over their lives and some choice is better than none.
- Allow cross pollination by letting people work on different teams at least one day per months. This keeps your bus number moderate (if you were hit by a bus...) and keeps people inerested and educating one another.
- allow engineers to speak, at least a little and use their ideas
- look for cross-discipline gains like creating an event system that can be used to drive AI, Gameplay, Audio, etc.
- leave progress tracking to the producers. This isn't your job and distracts you from your job.
- Build and maintain a book library that all staffers can use. Checkouts must be written in blood and all people who leave the company must return these items.
- Make decisions about which software the company should be using for building, maintaining, and creating software. Do not decide this on your own, but ask the opinions of all of your leads. Then make a hard choice and not everyone will like your choice. That's part of being in charge. Just let everyone know what you decided and if you want to be nice, you might explain to them why you chose that piece of software over their recommendations.
- Always show up on time
- Never undercut your leads in public... ever. Always support them in public, even when they conflict (where possible).
- Encourage XP style of development. Most game companies could use more of this and it does dramatically improve code quality.
- When you hear others bitching about someone, remind them that they would want respect from others. Don't give them a hard time or make a big deal of it. This is natural and all people do it. When you catch others bitching about you, just ignore it. This is natural and you are the boss: very few people love their bosses.
- You must love the success that comes from guiding people, helping people, and reforming people. Your job is mainly a people job and not a programming job. If you are a TD, you won't have any time to code, debug, test, or review: get over it.
That's about it for now. Please offer your suggestions.
No comments:
Post a Comment