Agile Summary

12 Points of Agile

Agile is a type of software development philosophy widely used and considered one of the most effective philosophies for development. There are 12 Principles which define software:

  1. Satisfy customers need ASAP(early) w/ continuous delivery of software to customers [customers #1]
  2. Changing requirements, even late into development
  3. Deliver software frequently
  4. All parties of a project must be involved throughout
  5. Build around motivated individuals and create environment & support for them to get the job done
  6. Team face-to-face conversations is the most effective and efficient form of communication
  7. Working software => progress
  8. Sustainable development, constant pace of all parties [indefinitely]
  9. Attention to design and "technical excellence"
  10. Simplicity is key
  11. An effective self-organized team is the produces the best architectures, requirements, and designs
  12. Regular reflection on effectiveness and ways to fine tune and improve

Sprints

The typical software cycle (Sprint) [and by no means a strict one] consists of Meeting, Planning, Designing, Developing, Testing, Deploying, Evaluating, Launching, and then repeating.

Class Project Notes

During our project, some key things need to be considered:

  • Daily Scrums to understand state of the project and necessary adjustments/plans
    • Assingments for integration and deployment
  • Roles:
    • Scrum Master: Ensures Agile, tacks issues and maintains scrum boards, find ways to improve and tune workflow
    • DevOps: Role is to combine and ensure the implementation of philosophies, tools, and practices to increase high velocity delivery of application and service; version control, integration, managing dependencies, POM file management, AWS deployment
    • Frontend Developers: The physical front of the service/application the user sees and interacts with
    • Backend Developers: Builds mechanisms for data processing and perform actions (data storage, security, other non-visible server functions)
  • Use class time (3-4 hours a week)
  • During Sprints (2 weeks of 5-6 hours) total per person (20-24 hours) total of work
  • Sprints should be focused efforts to produce a working program for the client
    • Daily Meetings, Scrum Boards, Planning, Agile, etc.

7 Important Transferable Skills

  • Creativity (Problem Solving, Conceptualization, Foresight, Connections, Synthesizing Ideas & Data)
  • Critical Thinking (Problem Solving, Ability to Question/Ponder, Problems Combatted Before Even Found)
  • Communication (Verbal, Writing, Listening, Technological Comms, Communicating w/ All Teammates/Group and Audience)
  • Collaboration - Leadership (Responsibility Delegation, Time Management, Decision Making, Conflict, Group, Multi Tasking, Teaching/Mentoring)
  • Collaboration - Teamwork (Accepting Responsibility, Making/Implementing Decisions, Time Management, Meeting for Short & Long Goals, Organizations, Deadlines)
  • Research (Analyzing Info, Brainstorming, Delineating Needs/Reqs, Gathering & Extracting Data, Forecasting Problems, Setting Goals, Solving Problems)
  • Technical (Easy to Work w/, Quick to Learn, Appreciative to Learn, Failing and Always Willing to Try New Things, New Doors Esp in Cases of Oversight)

Reflection

Given the practical use Agile has in software development, the philosophy I personally think can apply to any where whether it be in another field of work or even my own life. For any successful person, I suspect that, especially for the 7 important transferable skills, they practice Agile in some way or form throughout their lives. I think getting a grasp for this kind of experience will go a long way to improving myself as a programmer and person.