Lesson #4 - Agile Methodology

Unbeknownst to most outside of tech, software development is an extremely collaborative profession. You likely won't work in isolation and you will more often than not work across departments.

The modern development workspace usually includes daily meetings with your team, continuous integration of new features, meeting with other professionals from design, marketing, accounting, or really any department that pertains to your current project, reporting to clients, and much more! Basically, you'll be in constant communication!

In fact, communication and collaboration is so paramount to the day-to-day of developers that wholes books and courses have been created to teach approaches to software development that is inclusive of collaboration!

When implementing a project, a decision has to be made about what development methodology to use. The two basic, most popular methodologies are the traditional Waterfall approach, and an Agile approach.

Waterfall methodology is a linear approach to software development that usually goes something like:

  1. Gather requirements
  2. Design
  3. Code
  4. Test
  5. Bugfix
  6. Deliver

In a true waterfall approach, each of these are distinct phases of development, and one phase has to be totally finished before the next can begin. This approach is straight-forward, but is often slow and clunky. The first step is to gather the project requirements, but users often don't know their actual needs, or needs change, and after months or years of work, the product rarely meets those needs.

Agile methodology is a rapid development approach that involves working in short bursts to implement a viable version of a feature as quickly as possible, then iterating on feedback quickly.

Think about how Facebook was built. If they had tried to build it all out at once, it would have taken years, and not been the successful platform we know today.

Instead, it started as a simple app where each user had a wall and pictures. Then they added a news feed. Then events. Then chat, et cetera. For each iteration, they looked at user feedback and usage data, and modified their platform as it made sense, via a series of relatively small, quick changes.

We want to use this kind of development process to quickly develop our projects.

To do so, we break our work into units called Sprints.

Sprints are short, generally 1-3 week, periods where the team focuses on a particular feature or set of features.

To help keep the sprint on track, teams will have a daily Stand-Up. Stand-ups are meetings where every member says what they did yesterday, what they will do today, and any potential blockers they can foresee. This helps with transparency and accountability for all team members. These are called "stand-up" because team members generally stand during the meeting to help keep the meeting short and focused.

At the end of a sprint, the team will meet for Playback, which is when they can demo what they did during that sprint.

They will also have a Retrospective, which is an opportunity for the team to work democratically to refine their process for future iterations.

Essentially, agile methodology uses incremental, iterative work. Each group will be creating their own "standup" schedule to reconvene with the group and talk about what they have worked on, what they will work on, and whether they have run into blockers. This is meant to be quick, focused meeting hence the name "standup".

Design Thinking

An important aspect to either development methodology is to practice radical empathy of the end user. This is known as Design Thinking. Proper employment of design thinking includes working with clients to identify pain points, define the issue, ideate possible solutions, creating rapid prototypes, iteration, and test!

It's important to point out that "clients" can mean the company that is contracting you for your services or the end user. Remember that design thinking is all about putting yourself in the shoes of the client!

You can learn more about design thinking here!