Agile - Moving Fast

Agile - Moving Fast

We always here about Agile, and think about which methodology do we use, what practices do we have, team velocity, sprints

But at the end of the day, Agile is intended to be fast, it is all about productivity, So weather you are using Scrum or Kanban, weather you do a Sprints and demos and retrospectives or not, there are somethings that if followed, will really help you be very productive, and by definition ... very agile

Git flow & Tags

No alt text provided for this image

Following Git-flow is really important for productivity, even if you work alone, having features separated on branches makes your life easier when a feature is blocked so you can switch to another one on another branch

also making sure that big code refactors are done on there own feature branches at the right time saves you the over head of conflicts when not expected, refactoring is a daily practice when you try to keep your project clean and maintainable, but you must plan for big refactors and arrange this with the team, moving files from one place to another or renaming classes that are used in many places in the code is not a good idea when it is not planned, you can easily refactor these classes from inside, and move them later when you agree with the team to do so, and have a task for this on your board (like JIRA for example)

also using tags with your releases makes it easy to move around your code history, and revert back to stable points if any thing went wrong ... you can use tags with internal releases or test releases, not only releases deployed on market

bottom line is ... branching is your ultimate tool in keeping your app stable, weather by keeping unstable code on separate branches, or reverting to stable code at any point of time ... if you can keep your app stable on market, it is safe to go fast and deploy fast, and if any thing goes wrong ... just revert back till you fix the issue ... and this is a big deal for speed ... for being agile

JIRA

No alt text provided for this image

Not only JIRA, any similar tool ... it is important to put the Stories in a way that can be implemented in your branching model, you can think of it like this :


  • STORIES will be your feature branches, if a story is too big, it can be an EPIC
  • SUB-TASKS are the technical details per story, not a task that deserves it's own branch

for example, as a Mobile Apps Developer, if the story is a user that goes across multiple screens, does something on every every screen, and has to call the server with different API on each screen

we can make an EPIC for this User Journey, each screen will be a STORY that will be implemented on it's feature branch, and any technical details (like working on making repositories and writing code that connects to server and calls the API) are SUB-TASKS in each STORY, as these sub-tasks wont be done on different branches, they are fundamental part of this feature branch

and so on ... this way, the team will not reach a state that a story is blocked on another, or that a Story is not finished in this sprint ... we try to minimize the size of stories as much as possible, each story can be finished in one day or 2 days maximum, and that way we can maintain our speed in having new feature every day of 2 max

CI/CD

No alt text provided for this image

Continuous Integration and Deployment is all about automating the process of Delivering the app, to move faster ... no CI/CD will work without Tests, and I mean Unit tests, Integration tests, and End to End tests ... there must be the essential amounts of tests that can tell if this code should be deployed or if the whole process should stop due to an issue in the code

However, the more important part about CI/CD is the automation of fast delivery, the team should have a goal of delivering something every 1 or 2 days max, and also there should be a way to automate this delivery ... like for example, one of the projects I work on, as Mobile team, we deliver a new app version every day to beta users, and to make things faster we made the app update itself once a new version is available.

The Result

This way, we plan our Stories to be deliverable every day or two, and using automated delivery we can know the feedback as fast as possible, and we can fail fast as well so we can fix things fast, and using branching and tags, we can revert to the latest stable version as soon as we discover any issue, and then we can re-deploy our app again after the fix ... our delivery cycle is matter of 1 or 2 days max

Youssef Khalifa

Staff Engineer @MaxAB | Java | Kotlin | Spring boot | PSM I? | AgilePM? | MCSD?

5 年

Great Article :)

要查看或添加评论,请登录

Ahmed Adel Ismail的更多文章

  • Sharing data across multiple Mobile Squads - with examples

    Sharing data across multiple Mobile Squads - with examples

    Earlier I shared an article suggesting a solution to a common problem with teams following the "Spotify Model", which…

  • SDD - Squad Driven Design

    SDD - Squad Driven Design

    Working in multiple big teams I've found that we are always trying to apply our known best practices in software, but…

    4 条评论
  • Easier Testing with MVVM, MVI, MVP and Kotlin Multiplatform

    Easier Testing with MVVM, MVI, MVP and Kotlin Multiplatform

    Before we start, this article requires basic knowledge about the following topics : Clean Architecture Unit Testing…

    10 条评论
  • Android - A Cleaner Clean Architecture

    Android - A Cleaner Clean Architecture

    It has been a while now since Clean Architecture was out, and even many of us started embracing hexagonal (ports and…

    10 条评论
  • Beyond Functional Programming

    Beyond Functional Programming

    In the Android industry, lately functional programming was the all new stuff to learn, RxJava, Kotlin, and the whole…

    7 条评论
  • Dependency Injection in Clean Architecture

    Dependency Injection in Clean Architecture

    After Google's Opinionated Guide to Dependency Injection Video, Google made a clear statement that they want developers…

    18 条评论
  • Meta Programming in Android

    Meta Programming in Android

    Year after year we are getting rid of the boilerplate code that we need to write for small and simple tasks in Android,…

    2 条评论
  • MVI Pattern For Android In 4 Steps

    MVI Pattern For Android In 4 Steps

    Lately I wrote an article about MVI pattern, but as we are facing new problems every day and face more use-cases, we…

    7 条评论
  • Kotlin Unit Testing with Mockito

    Kotlin Unit Testing with Mockito

    I've always believed that, if the code is designed to be tested, we wont need any testing framework or library ..

    17 条评论
  • MVI - Model View Intent simplified

    MVI - Model View Intent simplified

    I have been searching for a proper resource to explain the MVI pattern, but every time I get hit with Hannes Dorfmann…

    4 条评论

社区洞察

其他会员也浏览了