The Principles of Agile Development

The Principles of Agile Development

Agile or Agile Development – we hear these words more often these days. But do we really know what it is all about? How can it help us become more effective, while having lots of fun developing software? How can we use it to communicate with business people and make this communication easy and constructive for both sides?


What is Agile Development?

There were a bunch of very talented and experienced guys developing some serious software. These developers observed other companies and development teams, and how their processes made their work easier. They compiled their observations to create the Agile Manifesto. And they said:

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.

In this article, I will present twelve theories and techniques of Agile Development. This is just the first step to the new world of Software Development process.


1 - Customer Satisfaction

Our highest priority is to satisfy the customer through early and continuous delivery of valuable, but not full-featured, software. This means we’re developing software and adding at least one feature, per iteration.

Let’s imagine that we want to create a blog engine; we might do so using the following process:

  1. Create the blog display page; deliver it to the customer
  2. Create the user management and membership feature; deliver it to our customer
  3. Add commenting capability and management; deliver it to the customer
  4. So on and so forth…

It is a simple approach, but the customer sees the real progress of his software and gives you immediate feedback on each new feature. It may be perfect or require tweaking, but you can quickly respond to changes: a win-win situation.


2 - Adapt to Changing Requirements

Even late in the development cycle, Agile processes allow you to welcome changes for the customer’s competitive advantage.

The customer wants the project finished quickly and as close to the design drawn in their mind as possible. This is easily achieved by simply listening to their input and being ready for changes. If we are able to react quickly to changing requirements, we are probably the best choice our client has ever made. Agile is all about communication and changes. We do the things as we are asked to do them, making the software development process finish faster. This is achieved because we develop small pieces of software, and a change in the requirements doesn’t really affect us.


3 - Deliver Frequently

We should deliver updates from a couple of weeks to a couple of months; the shorter the timespan, the better.

customers feel more confident in us and our product as it is updated

From my experiences, customers feel more confident in us and our product as it is updated – which is vital to our relationship with them. Another advantage is the feedback from our client; allowing us to react by changing classes, features, modules or even the architecture. We won’t wake up after days or months of work, only to see that everything is going into the trash. Let’s consider a hypothetical situation:

You have been asked to create a module that will display some simple text in a content manager. Suddenly, the requirements change and you have to add a form that should send an email to a configured address. Additionally, the form should be customizable so the user can add new fields and define validators. So, you basically have to forget about the original simple text requirement. How soon would you like to know about this change?

If you work on a project with your client and deliver frequently, you’ll know about these changes faster, and changes such as this will become easier for both of you.


4 - Work Together Frequently

This may prove to be the most difficult principle to get accustomed to, if you’ve been developing software in the old waterfall style. You, as a developer, typically do not speak the same language as your client, but you can find ways to maintain meaningful communication with them. One of the best ways, in my opinion, is to describe everything  with a simple story that tells us, the developer, for whom the feature is, what its responsibility is and why we need it at all. Of course, this gets easier the more we work with our client. Another helpful approach is Behavior Driven Development (BDD), but that is a topic for a different article.


5 - Build Projects with Motivated Individuals

Give the people you work with the environment and support they need, and, above all, trust them to get the job done.

It is important to provide an engaging atmosphere and all the tools necessary to create good software. Companies lose their best workers mostly because they don’t truly care about them. The belief that developers can write, test and deploy software on some server using an FTP client and editing live production files got lost somewhere. If you haven’t condemned those old school habits, you better do it now.

Retaining employees is just one benefit; you can also develop better and bigger software at a quicker pace. Just think about it: writing reusable code, automated tests, and automated deployment on any server (among other things) can positively affect development time. We usually think we slow down a project because we have to learn how to use helpful tools, like Jenkins, GIT, SVN, Gerrit, Behat, etc. Frankly, we do, but we can then reuse those tools and concepts in future projects.


6 - Use Face to Face Communication

It’s the most efficient and effective method of conveying information to our clients and development team.

Who hasn’t gotten overwhelmed and/or angry by seeing 6,255,384 emails in your inbox, because your company demands all conversations be "on paper"? I’ve personally seen that a few times in my life, and I do not recommend working in a company with such habits. Face to face conversations make communication easier and smoother, and allow us to give more information. We can use verbal and nonverbal ways of communication to show our teammates what we are thinking. It’s obviously faster than emailing each other.

But above all, we need to trust each other; trust is easily gained in an environment that encourages face to face communication.


7 - Measure Progress with Working Software

This is one of my favorite rules; it lets us freely work according to our own processes. Software developers are different than other employees; so naturally, they should be treated as such. From my personal experience, I’ve learned not to judge anyone from the development team as long as the job is done. Developers don’t want to create bad software, and they are less likely to do so if we let them work according to their own preferences. After all, the customer is happy as long as the work they commissioned is done correctly; they don’t care how it was done.


8 - Maintain a Constant Pace

Agile processes promote sustainable development, allowing a constant pace to be maintained indefinitely.

Agile’s most well-known advantages (such as the acceptance of changing requirements, fast reaction to feedback, etc) are widely appreciated, but the best advantage, in my opinion, is the ability to precisely determine the amount of time a project or feature will consume. After a few deliveries, the dev team will produce the most valuable business number: capacity. Capacity is the amount of work the team can do in one iteration. The capacity number is stable after a few iterations, and we can avoid the ridiculous deadlines and time estimates that are "pulled out of a hat" while presenting our company’s offer to the customer.

Many people say it’s impossible and scheduling proves to be more accurate. I disagree; the schedule assumes that there will be no mistakes or unavoidable delays.

It’s a perfect plan for a perfect team, and that does not exist.


9 - Pay Attention to Industrial Progress

Continuous attention to our industry enhances agility.

We are expected to evolve and make progress. We must continue to learn each day, because the industry moves at such a fast pace. As both hardware and software get better, we must keep up-to-date; otherwise, we’ll find ourselves lost in the "sea of new" and it will be hard to get back on track.

Refactoring is the solution to most problems. By constantly refactoring (when needed), we can easily apply new techniques and better our software architecture.


10 - Simplicity is Essential

Bill Gates once said:

If I have some complicated work to do, I will give it to the laziest person I have, because they will find the simplest way to do it.

Simplicity is the golden rule. This does not mean that you have to be lazy, but it does means that developers complicate their own work the majority of the time. If you only do the job the client wants, without any additional functionalities and improvements, your work load will lighten, and you’ll achieve your goals. Ultimately, that is all the customer cares about.


11 - Self-Organize

The best architectures, requirements, and designs emerge from self-organizing teams.

We are only humans; we can’t predict everything.

Have you ever been in a situation where you developed a large and time consuming application, and after spending countless hours in front of the screen writing thousands of lines of code and reading articles, tutorials and books, you sat down looking at some bad (but working) code thought, “Now I know how to write it better”? I think we’ve all had these moments.

This is where the eleventh rule comes in. We have a team of developers who can follow the principles of Test Driven Development (TDD), where refactoring is a part of the process. In some magical way, our software is useful, beautiful, well written, tested, and created quickly. We are only humans; we can’t predict everything.

This all comes from the idea of a self-organizing team, where each member has a role – not given or forced – but one that has emerged after some amount of time working together. That’s the beauty of team work.


12 – Reflect and Adjust

At regular intervals, your dev team needs to reflect on how to become more effective, and adjust its behavior, accordingly.

This may require a few development cycles, but the team will work in perfect harmony. Even adding new people to this team would not be harmful. An Agile development team is all about getting the job done. If they work in a friendly environment, they will find the “melody of work” and you’ll see how fast software development can be.


A Few Agile Development Methodologies

There are a few methodologies derived from and built upon Agile principles. I won’t describe them all because each methodology can be covered in its own article. I will, however, outline some of the more well-known Agile approaches. One thing to remember is that there is no one methodology to rule them all. Choose one that fits your needs best, and even “configure” it to fit your specific requirements.

SCRUM

Created by Ken Schwaber and Jeff Sutherland, SCRUM is a business-oriented framework for managing software development processes. There are many different types of SCRUM; just remember that the main goal is to work effectively, and efficiently and not to stick to rules.

Extreme Programing (XP)

Created by Kent Back, XP is a list of best practices that developers should follow while creating software. It’s often called “the extension of SCRUM”. This methodology of development-oriented rules was born, due to SCRUM being rather business-oriented.

Lean Software Development

Two of Lean’s main principles are: DALAP (Decide As Late As Possible) and DAFAP (Deliver As Fast As Possible). I personally recommend reading more about this methodology, as it can be very useful.

There are more methodologies in the Agile family; I’ve simply referenced the most popular options. If you decide to use Agile in your development process, you need to know what these methodologies are, in order to choose the right one for you.


Final Thoughts

Do Agile techniques really work?

Do Agile techniques really work, and are the methodologies really as magical as everyone says? Not always.

The problem I encountered in companies, where Agile methods did not provide results (or even made things worse), was a badly chosen methodology and the lack of conviction among its users (business members, the development team, etc). That’s why, in this writer’s opinion, you need to be sure that everyone involved in the process understands the rules, and they know “what it’s all about.”

Thanks for reading!

Note: Want to add some source code? Type <pre><code> before it and </code></pre> after it. Find out more
  • http://www.theassociatedweb.com Vito

    Sometimes an organization will try to implement “Agile” techniques when there are really too many pre-existing layers of abstraction in the form of “departments” that get in the way.
    When a team isn’t intimately familiar with one another’s language, technique or general style, the agile methodology flat out fails.
    Several government agencies ran into this issue…
    “Agile” seemed like the cool way to go but the logistical nightmare surrounding the simple notion of “getting stuff done” made it impossible to adopt.

    That said, there’s really no other way to operate when you’ve got a solid team.

  • Nick Brown

    I like a lot of these points, but some of them, such as 2 & 3 really give the client a lot (too much, imo) of leeway to make sweeping changes and you simply have to throw out your original scope.

    I’m all for pleasing the client, but some people are going to take a mile for every inch. Yes, knowing sooner does help, but some parts of this sound like you’re allowing the client to change anything so long as they tell you quickly.

  • Boabramah Ernest

    Yes these principles do work. I have observe that client really enjoy seeing the project progress and are happy to see their contributions to the project.

    Somethings as developers we get caught up in wasting much of our time doing premature optimization. The client wants to be able to hold the mouse and start clicking buttons.

    • http://chintanparikh.me Chintan

      Definitely agreed. As Donald Knuth said: “premature optimization is the root of all evil”

    • Kerry

      Amen to that — premature optimization is the BIGGEST waste of time.

  • JohnG

    Agile development has been used for many years in software development and all its faults are well known. It’s a system designed to give the customer the impression of rapid development but what it really produces is bug ridden and incomplete code. The very principle of Agile development means those bugs and shortcomings are never addressed.

    Quite simply, it’s the very worst possible model to use if you place any value whatsoever on quality.

    • http://inkwell.dotink.org Matthew J. Sahagian

      JohnG,

      I’ve been generally under the impression that many who operate with the agile mindset are also heavily into Test Driven Development. Do you feel that TDD is somehow flawed in it’s own respect and doesn’t necessarily produce higher quality code or perhaps that agile principles simply aren’t compatible and thus it’s a fallacy do believe that they operate with both principles in mind?

      • http://digitale-avantgarde.com chp

        Ahead: I’d rather be unemployed then working on a non-agile project.

        Having said that, John has a valid point.

        Agile Evangelists have two ways of looking on failed software projects:

        1. It’s a non agile project, hence the process is guilty.
        2. It’s an agile project, hence the process was not done right.

        I think noone really argues for “waterfall” or “going dark” anymore. It’s more a question of how agile you’re going to be.

        There are more or less static processes like RUB (which is nonetheless an interative process) on the one side and the agile-avantgarde like SCRUM on the other (just examples as I know these ones the best).

        SCRUM for example needs SCRUM trained people (Scrum Master, Product Owner, even the devs need some agile experience). Same is true for traditional approaches. In most projects, you rarely go by the books.

        The right question to ask would be, what fits the project and the client.

        Are there axiomatic security standards and hardboiled requirements accompanied with a conservative client who is habitual about requesting written confirmations? RUB may be a good choice.

        Is it a hip startup who needs to get something live as fast as possible to satisfy investors and the latest hype? The only thing that’s for sure is that changes will occur? SCRUM is the way to go.

        Your client is none of both? Chances are you have to find a middleway.

        Btw: SCRUM has a no-bug-policy (bugs are treated as use cases and have to be solved within an iteration), but to do it right you need an armanda of

      • JohnG

        Mathew,

        TDD is also a flawed. It’s a system that runs only pre-defined tests. The problem with it is that such tests will always produce known results, while utterly failing to test adequately. The only testing worth doing, beyond the most basic functionality tests, is usage testing and that goes completely against the concept of Agile development, which is to get the code out fast.

        Fast, cheap or reliable. You can have any two at most. Agile development can deliver the first and sometimes the second but never the third.

      • Grzegorz Łukaszewicz

        JohnG I’ve never seen Agile driven project without automated tests…

        Lets say in SCRUM it’s the team that say how much can they do in one Sprint iteration. The Developer is responsible for the code he/she wrote, there’s no exception here. We assume that everyone involved in the process are professionals.

        As Scrum Guide says: Scrum is easy to understand and extremely hard to master

    • ScottB

      Completely disagree JohnG, I’ve been an Agile Tester for a number of years and find the number of bugs making it through to production is greatly reduced. Especially with regards to high severity/impact.

      With regards to the smaller bugs and shortcomings that are “never addressed”, why should they be fixed if they add no value. Are you trying to produce something that fits design/testing/best practise ideals or something that does the job. Are you trying to produce an application that can make your business money or produce and over engineered application that costs more to produce than it will ever earn back. If something is important – the Product Owner will priorities it and put it into a Spirit or bring it into the Implementation Stream (Kanban)

      —–

      Also with regards to the main piece, for me Lean is not a methodology. It is a group of techniques that can be used within any methodology; Agile or not.

    • http://www.brianscaturro.com Brian Scaturro

      I think it is always interesting to read what the founders have to say on the subject… Testing is so married to the development and build process that quality should not be an issue.

      I think it needs to be considered that the agile definition has been muddied by the dominant culture (kudos Leon Gersing). You hear people chanting “agile is dead” because you end up in corporate environments that follow pseudo agile methodologies. You end up doing waterfall, but it is labeled as scrum.

      • Grzegorz Łukaszewicz

        That’s true! I saw that it’s now popular to say: “We work in SCRUM” but even the most basic rules are not applied.. This kind of behaviour is leading to very bad consequence when people think they know the process but they’re wrong… they don’t know it at all…

  • Jess hardy

    Where to begin, Agile development has been built and misused by people who think producing a product is more important than creating a GOOD product.

    Point one – if there aren’t processes and tools in place for developers to follow, you end up with an application, web site, etc.. that is a mix of coding styles that end up being a maintenance nightmare.

    Point two – how many pieces of software do we have to read about that might work but have zero documentation or poor documentation. I have spent far to much time trying to figure out what was done, why it was done, or where things are because of poor documentation.

    Point three – responding to change is the base of Agile but it does not mean that you don’t follow a plan. If there is no plan, then what the hell are you doing, why the hell are you doing it, and how are you doing it for.

    Agile develop has its place, but there are a lot of components of Agile that have to be completed before any part of development is started that are never covered in articles like this.

    Unfortunately, if Agile is not understood by all parties involved, it is almost the worst system to try and dig out of.

    • Anthony

      I have personally experienced all three points you’ve listed while using Agile development. That being said, as my company progresses we’re getting better at requirements gathering, planning, and test driven development. There are great growing pains for companies that have no expert when starting this type of development shift.

  • http://www.pdinstore.com Douglas III

    I’ve been using Agile Development and Test Driven Development for over 12 years on MANY client projects. These have been the fastest developed, least buggy, most solid code I’ve seen.

    JohnG – ” The very principle of Agile development means those bugs and shortcomings are never addressed.” I would completely disagree. When a bug comes up, a Story is written, a test is created, and code is refactor and enhanced until the test past.

    I’ve found the closer you are to a customer, those who will actually be using the software, the faster ideas are given. Rather than spending 3 months developing something only to hear “That’s not what I expected”, we do a quick proof of a concept in a fews (or a day max) to see if we understand what we are developing.

  • Herman Taniwan

    Nice Reading !, could it be possible for nettuts to explain the project management for making an effective timeline. It seems every developers, freelancers, and project manager need to know what do and don’t. Sure it will be a hot topic :)

  • Roy

    I agree that Agile development has it’s place, but what happens when the client’s feedback of “tweaks” actually becomes extended features – or entirely new features – increasing the development time and as a result causing schedule changes and increased budget costings?

    It would suggest that Agile development is only best when an hourly development rate is applied as apposed to a set price which was quoted before development was taken on – something quite difficult for a potential client to say yes to (they of course want to know how much, and how long before saying yes to anything). Or do quotes add additional buffer to hours/costs allowing for “10% agile” scenarios.

    And that’s exactly what Agile means… it means the client can effectively call at “any time” and request changes, additions and removals.

    You can of course say that it’s then up to the developer/manager to push back on to the client, but at times that can cause unnecessary friction as every little thought and decision needs to be nutted out there and then.

    And as JohnG said, when you’re the developer, having the scope change can cause some serious bug issues, especially when you’ve got multiple developers. And Unit testing is obviously a must, but unit testing the same functionality over and over because of something seemingly minor can be troublesome, boring and incomplete.

  • http://www.szad.wordpress.com Syed Sumair Zafar

    I really like the way you define topic wise. I think newbies can learn alot about agile by reading this article.

    • Jaison Justus

      you are right!!!!

  • http://theusg.me Theus G

    Wonderful article! Simple and sweet. Keep it coming.

  • http://wearebrandnew.com Jayphen

    Those giant stock art icons seriously detract from the article.

  • Jonathan

    I think it’s great to see an Agile article here. For too many years I have stressed to get everything PERFECT before showing the client, or moving on to the next piece. There is huge risk in working this way.

    Not that we shouldn’t strive for bug-free software, we absolutely need to. It’s just the order that matters.

    Old way:

    1. Start developing component #1
    2. Optimize initial development of component #1
    3. Continue developing component #1
    4. Tweak SQL queries on component #1
    5. Improve design on component #1
    6. Refactor component #1
    7. Research totally new JavaScript library for component #1
    8. Consider switching PHP frameworks to better handle component #1
    9. Start getting stress about project budget over component #1
    10. Do not show client progress for fear of only being on component #1
    11. Reiterate all steps for component #2-5
    12. Show client weeks or months later
    13. Stress at every client suggestion because of the amount of refactoring required
    14. Start programming 20 hours a day to finish project
    15. Grow a beard
    16. Give up and flee the country
    17. Leave project for other web development company to pickup

    Agile way:

    1. Develop component #1
    2. Show client component #1
    3. Tweak and finish component #1
    4. Reiterate steps for component #2-5
    5. Finish project

  • http://najbjerg.com Morten Najbjerg

    Great seeing a post about the development process. More in-depth tutorials on this subject would be highly appreciated.

  • https://twitter.com/soh8 Chuck

    Great article. Thanks

  • https://twitter.com/nicolas_moreira Nicolás Moreira

    In our company we are using SCRUM intensively and it works very good.
    Congrats for the article, best regards from Uruguay.

  • http://alvijee.blogspot.com Tahir Alvi

    First of All – Thanks for sharing the informative article.

    Second – yes i am agree with author final work – “Not always” the Agile principal works.

  • Kirn

    GREAT ARTICLE. Really enlightens on the nuances of Agile Development!

  • http://sourceopensource.org/ Gerardo

    Hi I am currently working on Scrum and it seems fantastic, great results.
    Thanks for the article

  • http://www.bigtunainteractive.com Adam Hermsdorfer

    The last paragraph sums everything up perfectly. Everyone must be involved and committed to the process. For our agile development processes, the “release early, release often” mantra is crucial.

  • http://www.qaitdevlabs.com/AgilePractices.html Agile Software Development

    In my opinion, it’s agile software development. That coveys the sense properly.

  • http://www.epicwindesigns.com Antonio

    Some of the explanations look similar to the Coursera.org course made by University of California Berkeley. Very good information.

  • Tom

    Hello.

    I have a question. What about getting paid? I mean at first meeeting your client said you, he wants simple text in content management. You said, no problem, it will cost $200. After week client said you, that requirements has changed and he now needs form for sending email. So you are working, and after week, client said you, that requirements has changed again, and now he wants to manage this form. After 3 weeks of work you get paid only $200, client is satisfied. Or you get paid by itteration?

  • http://tirnovanu.ro Aurel Tirnovanu

    Been also writing about this and even more I’m using Agile with my clients. In the begging was annoying but now seems it counts a lot and i win a lot of hours of development when in beginning i used to loose.

    In my opinion, agile can be used with users who know very well what they want, their needs, their goals and have an idea what the scope they want to touch.

    Anyways, great article with useful things to know.

    @Tom – you should try using progressive prices for every development modification you have to do. Instead of telling client “no problem” you should tell him “no problem, but for $200 I can do you a basic CMS but all additions, changes, alteration from base will be the term of a new contract or annex to this one”. Even more, you can charge client hourly based.

  • Adrian
  • Adrian

    There is a new article:
    http://www.adrian-stolarski.pl/articles/agile-ethodologies-ntroduction.html
    What do you think about this article? Thank you all for your donations, and click on the ads.

  • Adrian

    Hi, I have something interesting for you:

    http://adrian-stolarski.pl/articles/the-ideal-method-of-team-buldings.html

    What do you think about this?

  • Chiragkumar Maisuriya

    @fedc20e078a2240ef187a5e5c45aebd2:disqus That means With fixed price projects Agile model doesn’t fit

  • Touseef

    Great article………………..i understood it very well………………..