Attitudes
- Blame doesn't fix bugs.
- Don't code in isolation, do code reviews.
- Use unit tests.
- Do not code in quick and dirty ways.
Continuous Learning
- No need to be specialized on every technologies. But need to known the industry trend.
- Share knowledge with the team. Let everyone learn from each other.
- Learning new technologies may have to give up the old ones.
- Ask why and dig into the root of solution.
- Keep development cycle in a good pace. Design -> Implementation -> Testing -> Code Review -> Release.
Customer Oriented
- Let customer do the business decisions. Understand customers needs.
- Design in two phrases:
- Macro design: Give the direction of implementations. Not down to the details.
- Micro design: Ways on solve problems during implementation.
- A good design should be correct but not precise.
- Blindly picking a framework is like having kids to save taxes.
- Don't build what you can download.
- Base on project requirement, select the right tools and technologies.
- Checked-in code (on master branch) is always ready for action.
- Never accept big-bang integration. Should integrate codes more often.
- Automate QA testing.
- Get continuous feedback from customers. Ensure the project is on the right direction.
- Release the smallest usable feature in project development life cycle.
Feedback
- Use unit tests to provide coding feedback.
- TDD - Write tests before writing code.
- Good design doesn't mean more classes.
- Target for simple design.
- Ensure code works on different platform (if applicable).
Agile
- Write clean code when speaks its purpose or function.
- PIE - Program Intently and Expressively.
- Let code speak for itself. Comments only helps. Don't comment to cover up.
- DRY - Don't Repeat Yourself.
- Carefully pick meaningful variable and method names.
- No best solution.
- Always code in clean, simple and easy for maintenance way.
- Simple is not simplistic.
- Do not use complicated design pattern unless it's absolutely necessary and with good reasons.
- Use inheritance for is-a; Use delegation for has-a or uses-a.
Daily Practice
- Don't get burn twice. Keep a log book.
- Treat warning as an error. Solve it.
Collaboration
- Daily short (stand) meeting (10 - 15 minutes).
- Always know what others are working on.
- Simple questions for everyone:
- What's yesterday achievements?
- What's today's plan?
- Any obstacles?
- Do not discuss the questions during meeting. Details should be discussed after meeting.
- Meeting holds in the morning after everyone settle down.
- Advantages of daily meetings:
- Know the existing problems and progress.
- May reallocate resources if needed.
- Let everyone know what others are doing.
- May know who can provide a quick solution to a problem.
- Keep everyone in a good working pace.
- You can't code in PowerPoint.
- Architect should be able to code.
- Code should be reviewed and refactored if necessary.
- Every project member should shift to handle different part of the project.
- Knowledge grows when given.
- Inspire rather than given instructions.
- Code review basic check points:
- Easily readable and understandable?
- Any obvious mistakes?
- Is the code give negative effect on other functionality?
- Any repeated code?
- Can be improved or refactored?
- Unless there's obvious improvement after refactoring, do not change others code.
- Report progress and problems.
Marketing
- Both ends of the technology adoption curve might prove to be lucrative.
- You can't compete on price. In fact, you can't afford to compete on price.
- Supply and demand. Exploit market imbalances.
- Don't just know how to program. Now is the time to think about business domains you invest your time in.
- Be the worst guy in every band you're in.
- The people around you affect your own performance. Choose your crowd wisely.
- I haven't been given the opportunity...? Seize the opportunity!
- Be a generalist. Generalists are rare...and, therefore, precious.
- Your skill should transcend technology platforms.
- Be a specialist. Too many of us seem to believe that specializing in something simply means not knowing about other things.
- Don't invest on single technology or platform. Vendor - centric views are typically myopic.
- Passionate. Work because you couldn't not work.
Investment
- Learning. Don't wait to be told. Ask!
- Learn the business you work for. You can't creatively help a business until you know how it works.
- Find a teacher. It's ok to depend on someone. Just make sure it's the right person.
- Be a teacher. To find out whether you really know something, try teach it to someone else.
- Be a teacher. Mentors tend not to get laid off.
- Practice. Practice at your limits.
- Implementation. If you want to feel you own a process, help implement it.
- Stand on shoulder of Giant. Mine existing code for insights.
- Use existing code to reflect on your own capabilities.
Execution
- It's now. What can we do? Right Now?
- Mind reading. The mind - reading trick, if done well, leads to people depending on you.
- Daily report. Have an accomplishment to report every day.
- Don't forget whom you work for. Your managers' successes are your successes.
- Satisfaction. Be ambitious, but don't wear it on your sleeve.
- Get job well done today. How much more fun could you make your job?
- What's your value? Ask, "Was I worth it today?"
- Beware of being blinded by your won success.
- Enjoy Maintenance. Maintenance can be a place of freedom and creativity.
- Concentrate on 8 working hours per day. Projects are marathons, not sprints.
- Learn from failure. Every wrong note is but one step away from a right one.
- Stressful times offer the best opportunities to build loyalty.
- Say "No". Saying "Yes" to avoid disappointment is just lying.
- Don't panic. Heroes never panic.
- Say it, implement it, demonstrate it. Status reports can help you market yourself.
Sales
- Don't ignore feelings. Performance appraisals are never objective.
- Communication is important. Your customers are afraid of you.
- Communication and documentation. You are what you can explain.
- Show up. Learn about your colleagues.
- The right language to the right people. Market your accomplishments in the language of your business.
- Change the world. Have a mission. Make sure people know it.
- Let people hear your voice.
- Have your own brand. Your name is your name.
- Google never forgets.
- Publish your code. Anyone can use Rails. Few can say Rails contributor.
- Be a master.
- Relationships. Fear gets between us and the pros.
Leading technologies
- Outdated technologies. Your shiny new skills are already obsolete.
- You are not your job.
- Endlessness. Focus on doing, not on being done.
- Create yourself a product roadmap.
- Notice the market. Watch the alpha geeks.
- Developer, review themselves.
- Monkey catching trap. Rigid values make you fragile.
- Avoid waterfall career plannings.
- Daily improvement.
- Independent.