Title: Practices of an Agile Developer
1Practices of an Agile Developer
- Written by
- Venkat Subramaniam
- Andy Hunt
2Contents
- Agile Software Development
- Beginning Agility
- Feeding Agility
- Delivering What Users Want
- Agile Feedback
- Agile Coding
- Agile Debugging
- Agile Collaboration
- Moving to Agility
3Agile Software Development
4Agile Concept
- Software development
- Dynamic process.
- The spirit of agility
- Lightweight processes.
- People, collaboration, responsiveness, and focus
on demonstrable. - Development is continuous and feedback is
continuous
5Agile Practice and Tool
- The Practice of Agility
- Agile teams is small or broken up to small.
- Work processes in iterations.
- An Agile Toolkit
- WikiWikiWeb
- Version control
- Unit Testing
- Build automation
6Beginning Agility
71. Work for outcome.
- Blame doesnt fix bugs.
- Feels like the team is working together, not
blaming each other.
82. Quick Fixes Become Quicksand.
- Quick fix is a very seductive proposition.
- Dont code in isolation.
- Use unit tests.
93. Criticize Ideas, Not people.
- Negativity kills Innovation.
- Some techniques
- Set a deadline.
- Argue the opposite.
- Use a mediator.
- Support the decision.
- Take pride in arriving at a solution.
104.Damn the Torpedoes, Go Ahead.
- Have the courage to communicate the truth.
- The only way to remove obstacles.
11Feeding Agility
125. Keep up with change.
- How to keep up with changing
- Learn iteratively and incrementally.
- Get the latest buzz.
- Attend local user groups.
- Attend workshop or conferences.
- Read voraciously.
- You dont have to become an expert at everything,
but stay aware of where the industry is headed.
136. Invest in Your Team.
- A well-educated team is a better team.
- Set up Brown-bag session.
- Raise the industry awareness of the whole team.
- Feel likes everyone get smarter.
147. Know When to Unlearn.
- Dont use your old language tools at all while
youre transitioning. - Unlearn any old habits that might hold you back.
158. Question Until You Understand.
- Why? is a grate question.
- Keep questioning until you understand the root of
issue. - Feel that you understand the real problem.
169. Feel the Rhythm.
- Agile projects have rhythms and cycles.
- Edit, run tests and review, over a consistent
iteration length, and ten release.
17Delivering What Users Want
1810.Let Customers Make Decisions.
- Decide what you shouldnt decide
- Shouldnt business decision
- Business applications are developed as
partnership - Keep record of decisions
1911. Let Design Guide, Not Dictate.
- Design is an essential step in development
process to understand - Interrelationships between parts and subsystems.
- Details of systems.
- Direct you toward an implementation.
- Design should be only as detailed as needed to
implement. - Two levels of Design Strategic and Tactical.
- Good design is a map.
2012. Justify Technology Use.
- Choose technology based on need.
- Identify what problem you are to solve and
consider - Does it really solve the problem?
- Will you be tied to this technology?
- What about maintenance cost?
2113. Keep It Releasable.
- Checked-in code is always ready for action.
- Dont check in broken code.
- Run your local test.
- Check out the latest source.
- Check in.
2214. Integrate Early, Integrate Often.
- Dont stay isolate too long.
- Should integrate your code several times a day,
never go longer two or three days.
2315. Automate Development Early.
- Give QA team a chance to test deployment.
2416. Get Frequent Feedback Using Demos.
- Requirements are fluid as ink, you cant freeze
requirements. - Consult your customers frequently, getting input
as you develop. ? get feedback often.
2517. Use Short Iteration, Release in Increments.
- Iteration development carry out the tasks of
development in small, repetitive cycle. - Set a milestone in the end of each Iteration.
- An increment of the product is complete when you
are ready to release product.
2618. Fixed Prices Are Broken Promises.
- Estimate base on real work.
- Estimate will change throughout the project.
- Plan-based development nonagile environment.
27Agile Feedback
2819. Put Angles on Your Shoulders.
- Agility is all about managing change, and the
code is the one thing that change the most. - Run the unit tests every time you compile or
build.
2920. Use It Before You Build It.
- Write tests before writing code.
- Using TDD Test driven development.
3021. Different Makes a Difference.
- Run unit test on each supported platform and
environment. - Hardware is cheaper than developer time.
3122. Automate Acceptance Testing.
- Create tests for core business logic.
- Using FIT Framework for Integration Testing.
(www.fit.c2.com)
3223. Measure Real Progress.
- Use backlog to measure progress.
- Backlog is a list of tasks that still need to be
completed. - Focus on functionality, not the calendar.
3324. Listen to Users.
- Find the truth and fix the real problem.
34Agile Coding
3525. Program Intently and Expressively.
- Readable code.
- Reduce unnecessary comments.
3626. Communicate in Code.
- How to comment
- Purpose
- Pre-conditions
- Post-conditions
- Exceptions
3727. Actively Evaluate Trade-Offs.
- Consider performance, convenience, productivity,
cost and time. - No best solution.
3828. Code in Increments.
- Code in short cycle.
- Run a build/test cycle after writing a few lines
of code.
3929. Keep It Simple.
- Develop the simplest solution.
- Easy to follow and correct.
- Simple and readable code.
4030. Write Cohesive Code.
- Cohesion a measure of functionally related the
members of a component are. - MVC -- Model -View- Controller.
4131. Tell, Dont Ask.
- Command-query separation.
4232. Substitute by Contract.
- Use inheritance for is-a.
- Use delegation for has-a or uses-a.
43Agile Debugging
4433. Keep a Solution Log.
- Day log
- Date of problem
- Short description of issue
- Detail description of solution
- Reference to articles, URL.
- Any code segments, setting, est.
4534. Warnings Are Really Errors.
- Treat warnings as errors.
4635. Attack Problems in Isolation.
- Separate the component or module that has the
problems.
4736. Report All Exceptions.
- Write your code with exception,
- Determining who is responsible for handling is
part of design.
4837. Provide Useful Error Messages.
- Provide users with a clean, high-level exception.
- Provide an easy way to find the details of
errors. - Ex. File Not Found
- -gt Cant open /andy/project/main.yaml
49Agile Collaboration
5038. Schedule Regular Face Time.
- Use Stan-up meeting to get the team together.
- Keep meeting focus in three question
- What did I achieve yesterday?
- What am I planning to do today?
- Whats in my way?
5139. Architects Must Write Code.
- Architect person who design and guide,not a
person who just draws pretty pictures, speak
jargon, uses a lot of patterns. - Good design develop from active programmers.
- Dont let anyone design in isolation.
5240. Practice Collective Ownership.
- Rotate developer across different modules and
tasks in different areas of systems. - Have to be more careful if know others are
watching.
5341. Be a Mentor.
- Knowledge when given.
- Use Bag Brown session.
- Great way to invest your team.
5442. Allow People to Figure It Out.
- Give the others chance to solve problems.
- Answer the question with another question.
5543. Share Code Only When Ready.
- Never check-in code that doesnt ready for others.
5644. Review Code.
- How to review
- The all-nighter
- The pick-up game
- Pair programming
5745. Keep Others Informed.
- Give the others know your progress.
- Use information radiator use poster on the wall
or website or wiki to broadcast their status.
58Moving to Agility
- Just One New Practice.
- It made a huge difference to a team.
- Rescuing a Failing Project.
- Introducing Agility The Managers Guide.
- Introducing Agility The Programmers Guide.
- The End? www.pragmaticprogrammer.com