Lessons learned this Agile project (Week11) Final Blog
I've got a assignment of building a small project with Agile at Agile Development Project Subjects that I taken this semester (4 developers – 10 weeks planned).
This project was built on Java. And It gain a lot of things by doing this project especially in Agile Knowledge
XP-style Planning - Small iteration helps to track project progress and create better estimates.
Customer Feedback - Manage a project without client representative is a hell on the earth. You are working like in a vacuum. No response, no feedback and no attention.
Test-Driven Development - We wrote unit tests for all business objects before code, and it worked great. However, we did not have tests for controllers. Controllers are very close to GUI and they changed often (during first month). Maybe we should write unit tests for controllers as well, maybe not. This is unclear. But we should consider such a possibility in future. Anyway, TDD is good and we will use it as a mandatory practice.
Acceptance Tests - About 50 tests were created. We modified tests quite often and spent near 0.5 hour per day to keep them working.
Refactoring - It helps reduce code duplication and keeps system architecture clear. We had doing refactoring constantly, and sometimes we spent on major refactoring whole day.
Walking Skeleton - This is a first, fast and small release, which contains single system feature ‘in depth’. For example, show projects list, add project into the database, check user permissions on project. Walking Skeleton for the system took near 2 weeks. We manage to investigate many architectural decisions and choose the best. Small and fast release is a great thing.
Pair Programming - We create most important system modules in pair. The code quality and overall system architecture appears significantly better when pair programming used. Constant code review, communication and experience sharing are really great things. It is not easy to program 7 or more hours in a row, and you feel exhausted in the end of the day. But work satisfaction is great. We will use pair programming for teaching, experience sharing and critical modules implementation in future.
Code Metrics - LOCs dynamic, Unit Tests # dynamic, Acceptance Tests dynamic. Code metrics help to track project progress and predict team velocity and project size.
System Prototypes - Helps to resolve many issues on the early stage. In general, the prototype should be created if project budget allows to. But I do not recommend create comprehensive prototype, since it just waste time. Prototype should contain major system modules and maybe some secondary.
Honesty - Just be honest with your teammates. They will trust you, and trust is one of the major factors for jelled teams.
Documentation in Source Code - Almost all system architecture related documentation was in source code. The week point is that source code less browsable (it is slightly harder to find a method while scrolling, for example).






