Moving to Agile

As I wrote in the last posting about Agile, truly moving to Agile development requires a buy in from company hire ups. In our case, we knew we had to change directions. There were lofty goals ahead of us on what the business was asking for in the platform we were creating. Way more than three engineers could handle.

Our current operation just wasn’t scalable. The founder, who had, among 50 or so other hats, was acting as the product manager and the QA manager. To give full credit, he did start with an idea, and hired contractors to start his vision. He had started long before the Atlassian stack exited, let alone other tools. He had learned to organize his operation through the extensive use of spreadsheets (and he loved the Google stack).

When our new CTO came on, during the testing cycle of last waterfall iteration, he saw the chaos that was our testing scheme. The system had become large enough, and inter-twined enough, that his testing spreadsheet had over 10,000 tests on it. A lot of support engineers, along with us developers spent quite a few late nights running through the tests, to get a release done we were comfortable with.

On top of that, the current platform required a build. The only system that could do the build was on the system of our most senior engineer, who lived in Canada, not the Southern United States. As you can see, getting to done was a monstrous task, and we knew we needed to ramp up the number engineers we had working on the product.

This shows one of the huge strengths of Agile. It’s built for scale. And since as a team, you focus on breaking down the projects into small tasks, accomplished and tested quickly, you eventually get rid of the huge testing cycle (admittedly, getting to that point takes time, but you’re able to shorten what is tested based on what was worked on).

As we were educated on Agile, we were also introduced to the concept of Srum. In a few weeks, after finishing the last release, the CTO started hiring more engineers, and got us working in the Scrum format. Really getting into Scrum took a little bit of time, since along with hiring more Software Engineers, the CTO also had to start building a QA team, as well as a Product Development team.

For those new to Scrum, a Scrum team consists of 3 to 8 Software Developers, a QA Engineer, and a Product Manager. Over time, we came to learn, in our teams, the ideal number of Software Developers was 5.

We were introduced to the concept of breaking projects into a series of “stories”, and weighting the “stories” with a point basis. The point basis is a numerical description of how hard a task is. The idea is, the entire team points the stories, discussing and debating the weight, until a consensus is reached. Once all the stories are pointed, team members choose what they are going to work on over the next iteration, called a sprint.

One of the genius points of Scrum, is that is it supposed to be self-organizing. There is a designated “Scrum Master”, who leads the team, but not from an authoritarian stance. The value of the points are supposed to grow organically (though we did end up adopting a standard hour-value for a point, to make it easier for management to project timelines and efficiency).

Since team members choose what they are going to work on, they are in essence committing to the rest of the team that they will have the tasks completed within the next sprint. The length of the sprint is arbitrary, and our teams chose to make each sprint 2 weeks long. The tasks were not considered complete, until after the QA member of the team had tested each tasks, and product management had accepted the work.

As we were making the evolution to full Agile and Scrum, we broke into two teams: a team specialized to a very unique set of code (which I was on), and the other, larger team, that did more generalized work. The other team investigated build systems (to free up our most Senior Engineer, and to protect the company in case something ever happened to him), and also investigated frameworks, since our code was old enough to be very custom.

One other thing the other team worked on (other than code enhancements) was creating coding standards for each language we worked in. Unfortunately, since all these major enhancements were being done by the other team, while my team was neck deep in new code, we were always playing catch up after the fact on learning these technologies (and never did have a say in the accepted coding standards).

One other change that happened very quickly was moving our development process to the Atlassian stack (even before investigations into the build systems occurred). I was so thankful to get away from all the spreadsheets, and start using a Scrum board. Eventually, as our teams grew out, there was one team that was working on integrations for our front end system that chose to use a Kanban board. This also meant moving away from SVN server (which had served us well for many years), and moved over to Bitbucket (a GIT based system, focused more on private repositories rather than Open Source repositories – also part of the Atlassian stack).

When we first started doing Scrum, our CTO acted as our Scrum Master. Over time, as he was getting spread wider in his responsibilities, those who chose to volunteer to become Scrum Masters were sent off to classes to become Certified Scrum Masters. I was one of those. As our CTO said, not all trainers were of the same value. The one he recommend, which we went to, was a group called “Mountain Goat”. If you are interested in becoming a Scrum Master, I highly recommend this group (I don’t get any kind of kick back for saying that, or linking to their site – I really mean it!).

For those interesting in learning Agile development, here are a few suggested readings:

Learning Agile: Understanding Scrum, XP, Lean, and Kanban

Scrum: The Art of Doing Twice the Work in Half the Time

Scrum Mastery: From Good To Great Servant-Leadership

Agile Development

A lot of talk has been given in the last 10 years to the concept of Agile Development. Since it’s creation in 2001, it has swept the software engineering industry. I remember first hearing the about it back in 2013. I was working as a Software Engineer as a C# developer. I was getting ready to take some time off, and my manager had mentioned she wanted to investigate Agile development, and incorporating it in our team.

I did a quick search for something on Agile I could read while on vacation. I stumbled on the book, “The Phoenix Project”. While not specifically on Agile, it gives a great basis on flow constraints. It’s an easy read, and really opens up the mind on how to spot bottlenecks in a flow process, and how to alleviate them.

In a lot of ways, this is what Agile development is all about. For years (and even for a lot of companies is still the normal flow), the way we developed was what was know as “Waterfall Development”. You spend a lot of time designing every minute detail of your software, get approvals, go back, refine the design, get more approvals, and finally, start coding. Once you’re done coding, you test, fix, test, fix, blah, blah, blah. Eventually, after several months, you release a finished product. And then you go back, and start designing again.

This flow has several huge draw backs. If there is a need for your company to shift directions, and you’re halfway through the development phase, how do you, as a company, react? Do you drop what the developers and project managers have spent weeks to months designing, and start over? Do you let part of your developers finish what’s been started (making the process even longer)?

From a current industry approach, is releasing software once or twice a year acceptable? Is this maintainable if you’re build a cloud based platform?

These questions, and a million more like them, are why Agile is taking over. Any SAAS platform that is doing Waterfall development will never be able to keep up with their competitors. The concept of CI/CD (Continuous Integration and Continuous Delivery) cannot exist in a Waterfall environment.

When I came back from vacation, my manager did her best to implement Agile. Looking back, she didn’t have the training and understanding to really implement Agile. I give her huge credit for trying. It’s very difficult to move to Agile without the buy off the upper management of a company, and it’s hard to get that buy off if you don’t fully understand the framework. And none of us really did, so we really only integrated a small piece of Agile.

The next company I worked for started out very small. They had been around for quite a few years, and the primary product was starting to get some maturity. I was the third engineer hired at the company, and it was definitely a Waterfall approach. Over the first year and a half I was there, the company saw remarkable growth, which included building out a large dev team. One big issue with Waterfall is that it doesn’t scale well.

As the company grew, the founder was getting spread to thin, and so a CTO was hired. He was well versed in Agile. He came in just as we were going into a debugging session before a release. He watched us struggle with the thousands of tests required to ensure full integration worked seamlessly. As the next iteration began, he began to integrate Agile and Scrum into our operation flow. While it took a while for us, as a dev team, to really get up to steam on the mindset, once we did, the amount of quality work getting completed skyrocketed.

My next post will delve into how we moved from Waterfall to Agile, and some of the hurtles we had to overcome.