See the author's analysis of Agile as well as benefits for practitioners, teaching Agile, spreading Agile, and more.
Join the DZone community and get the full member experience.Join For Free
I have been teaching Software Design and Documentation, a project-based computer science course, at RPI for many years. When I began teaching this course, I used the Unified Process, stepping the students through the phases of Inception, Elaboration, Construction, and Transition. In my process of mastering teaching this class, I found that agile methodologies were more efficient and produced better results for the projects and also for the students themselves in their development. Not only did the agile principles lead to better software, but they better prepared the students for working in the software industry when they completed the class.
I was moved by reading the Agile Manifesto (https://agilemanifesto.org/). I find the values and principles expressed in this work extremely valuable for all concerned. Agile principles carry through to all parts of the development process and into the rest of the development environment as well.
This article discusses the many ways that agile methodologies can contribute to a student’s success as well as some ways to effectively teach these ideas and practices.
You may also like: 6 Ways to Create an Amazing Agile Team
Benefits for Practitioners
We all want our work to be meaningful and make a difference in the world. Adopting Agile principles and adhering to an Agile methodology has tremendous benefits for practitioners in this regard; being Agile creates meaningful work.
The primary focus of the Agile Manifesto is to promote individuals and interactions. That is why that value is listed first. Practicing Agile contributes to deliberate, intentional collaboration, preventing team members from working in isolation. The communities that are created around Agile teams become closer through these structured deliberate interactions. Agile methodologies encourage transparency and full communication from practitioners, challenging developer’s potential feelings of shame for writing inferior code and other mistakes.
Since an Agile culture of transparency without shame allows people to express themselves more fully, teams are more willing to share themselves and their ideas, which means their work is a truer expression of themselves. It might seem a stretch to consider that writing code is a form of personal expression; however, if developers feel freer to be themselves, they will feel freer to take more risks with their designs and algorithms. The resulting software is superior in quality, maintainability, and possibly even simplicity. It is important to note that in our current political climate, these enhanced interactions bring people together more than separate them, regardless of their individual views.
Agile practices create meaningful work because:
- Agile practices contribute to deliberate, intentional collaboration between team members
- They promote openness and authenticity, both professionally and personally. They help keep people honest
- Adhering to these practices promotes sustainable quality of developed products
- An Agile culture of transparency and no shame allows people to act more honestly, which allows them to express themselves more completely in their work
- Agile practices are designed to promote the individual and interaction. This matters even more than ever because of our current political climate
- The primary focus of the manifesto is individuals and interactions over processes and tools
- They result in a meaningful, deliberate, authentic, sustainable expression of the individual in community
After several semesters of teaching Agile development, I have discovered my own principles for delivering the material. Teaching Agile calls for Agile teaching, which I believe includes the following principles:
- Everything is OK
- Model Agile in the teaching of the class
- Teach to every learner
- Adapt to the changing requirements of the class
- Allow the students to iterate through the deliverables
Effectively teaching Agile requires me to hold everything as OK. That is to say that while things happen that are less than desirable at times, I have no need to ever declare problems as intractable or cast blame on anyone. My key to teaching Agile methodologies is to model and practice them rather than just speak about them in a formal academic manner. I set up my classes to emulate an industry production environment in which groups can see first-hand what kinds of things happen in a development organization. It is also important for me to act as a supportive project manager for the many teams in my class.
As the instructor, I model and present myself as an illustration of the Agile mindset. This dynamic is very similar to effectively teaching sports such as skiing. A ski instructor needs to be able to demonstrate effective movement. This kind of demonstration, paired with a succinct verbal explanation and practice, provides the students with three different ways to absorb the techniques, providing for the three kinds of learners: auditory, kinesthetic, and visual. To cover these three methods of teaching, I include lectures (auditory), slides, example documents and charts (visual), and then ask the class to participate in exercises that add to their projects (kinesthetic).
As in teaching anything, speaking endlessly is the death of students’ attention. In my class, I include many activities for individuals and groups to participate in. These activities are designed to enhance group cohesion and participation. Some activities are used for group building and visioning, such as the Marshmallow Challenge and Shield Drawing. Other activities are used for visioning a proposed product, such as Paper Prototyping and role playing as a persona. These class actions have proved to be extremely fun and useful for groups and have helped advance the work they are doing.
The Marshmallow Challenge is a group exercise where teams design and build a tower made from raw spaghetti, tape, and string to support a marshmallow. This activity is an excellent way to make a team more cohesive as they are focused on a common problem. I use this exercise immediately following the formation of teams to allow these new groups to experience and reflect on how they work together. By observing their interactions without prior experience together, they get some insight into ways they can powerfully set themselves up to work well together for the remainder of the semester.
Paper Prototyping presentations are great for visioning and displaying the plans for a user interface. Drawing a proposed interface, stepping through the actions a user would perform, and showing more drawings that illustrate the subsequent system responses is an excellent way to envision a proposed application. The students get an opportunity to achieve a deeper understanding of what they are producing during the development and can communicate how they envision their proposed system.
These interactive aspects of the class provide a good variety of presentation formats as well as very effective methods for students to absorb the information, utilizing alternate learning styles. None of the activities are a distraction from the development they undertake to create their products, nor is any of it “busy work.” It is all designed to facilitate and empower the students to work better together and to more powerfully create a solution that addresses their design problems.
Similarly, an effective instructor of Agile technologies needs to deliver the material in several different ways. Work with teams to engage in the various practices dictated by Agile methodologies. For example, if teaching Scrum, have daily stand-ups, work with burndown charts, track velocity, and other similar practices. Lastly, as mentioned above, instructors need to model the Agile values and present themselves as a model of Agile.
I use Agile practices for assignments as well. The teams work in sprints and submit a variety of documents along the way. The submitted documentation represents the different aspects of their project. Since projects iterate each sprint, it is a natural process to allow the groups to take the corrections provided by the instructor team and then resubmit the documentation that incorporates the feedback. The new version is then re-evaluated, giving the group a better grade for that assignment. This brings home the idea that nothing is set in stone and can always be improved. The students appreciate this opportunity to improve their documents, and the class stays Agile by bringing iteration to the assignments.
Graduates of a university Computer Science program are likely moving into a career developing software. Having an opportunity to participate in an Agile-centered development project provides them with a valuable chance to learn and practice Agile methods of development. In a classroom environment with a good instructor utilizing available teaching moments, students get multiple opportunities to have their interpretations of Agile practices and philosophies either validated or corrected. As a result, their experiences in these classes do a better job of training the students and prepare them well for participating in Agile teams in industry. They leave the class with a deeper understanding of the principles and mindsets of Agile methodologies.
Graduates of Software Design and Documentation often contact me wanting to have current students apply to jobs at their companies. The values and skills they learn from the class are highly desired in the software development industry. Companies more frequently want students that have been exposed to Agile practices, as more and more software development organizations are utilizing Agile methodologies with their teams.
Agile is now the de-facto standard among software development organizations; however, these methodologies are not universally used. While there is a place for waterfall development, most newer software development projects are using iterative styles of development. Software developers are in high demand, and a familiarity with Scrum, Extreme Programming, or other Agile methods of project management only adds to their employability. Agile is a necessary addition to every university Computer Science program. These courses need to be taught with creative and experiential components to ensure full understanding and acceptance.
Opinions expressed by DZone contributors are their own.