Tag: agile

  • Agile – The buzzword for software development

    Agile – The buzzword for software development

    Everywhere you turn these days, people are touting the virtues of agile. Large corporations are adopting it in droves, and you won’t find a IT-related job spec that doesn’t ask for it. But what does agile really mean, and should you really care?

    When you want to get a website platform or mobile app built, your developers are most likely going to tell you that they use “agile”, as if it should be this massive selling point for you.

    It is and it isn’t. In this article, I’ll explain why and also explain what it means to you.

    What is agile?

    Agile is a software development methodology. It’s mainly an approach that developers use to build websites, apps and other complex technology systems. There are different types of agile too. You might hear words like Kanban or scrum. These are different ways that people implement agile.

    What does agile involve?

    Agile is about people working together collaboratively – all at the same time – to define, design, build and test software. In true agile, this means you, developers, designers and testers are working together on a daily basis to get your platform or app built.

    The idea is to build quickly and deliver often.  It’s meant to reducing your immediate upfront costs, so that you can get your product into the hands of real users as soon as possible. This allows you to get feedback on your product; which in turn, helps you to decide what features to add next.

    Sound good? What’s the catch?

    1. Only the development team is involved

    Generally, when developers and agencies talk about agile, they’re only talking about their team – not you. This means that you don’t end up being involved in the day-to-day, and as a result, you sometimes only end up seeing something at the end of each delivery – after it has been built. As a result, you lose the collaboration and synergies that come from working with someone on a daily basis.

    2. The potential for rework

    Unless you’re involved in the day-to-day development of your platform or app, or you receive a wireframe for each screen in it, there’s a good bet you’ll end up having to pay for some rework.

    This is because you won’t get a document that gives you a complete view of how your product will work. You’ll probably see bits and pieces as the project progresses, but you won’t get a whole end-to-end view until the project is done. This means that things might need to be re-visited, and re-worked as your project progresses.

    Also, when your developers don’t have a full view on what comes next, and they’re building under short timeframes and tight budgets, you can end up with something called “technical debt”. This means that the system has been designed to deliver what you want today, but it may not be the best way to do it, and it may leave you with a bunch of rework to do down the track.

    3. Inaccurate estimates

    The idea of agile is that you want to be flexible, and spend your time doing rather than documenting stuff. That’s not to say that there’s no documenting. It’s about being smart about it. You don’t spend writing a massive document with everything that you want the product to do, and there isn’t a massive document showing you how the developers have designed your product.

    Instead, you start with something high level and expand it as the project progresses. However, without these documents, it’s very difficult to get an accurate estimate for how much it will cost to build your whole platform or app.

    Developers and agencies get around this by having a bit of a discovery period.  Here, they try to understand as much about your business and your product as possible. This (hopefully) gives them an opportunity to give you a more accurate estimate. However, there will still be a lot of detail missing at this stage, so you should expect them to ask for more money down the track.

    Where does that leave you?

    All of the above gets in the way of developers being truly agile. However, the alternative approaches for development, such as waterfall, have their disadvantages too.

    I believe agile truly works best when you’re not paying by the hour for your developers, and when you’re working hand-in-hand with them to ensure that your vision is transferred to them.

    The overall message is to be informed and be prepared. You want to be able to understand how the methodology works and how your developer plans to use it. This will help you to know what to ask for, and to get the confirmation you need that they are building the product you envisage.

    Looking for a developer?
    Get my 10 essential tips for hiring the right developer for your project.
    Download it now for free!
  • Waterfall vs Agile: An intro to development methodologies

    Waterfall vs Agile: An intro to development methodologies

    Waterfall and Agile are the two most comment methodologies used to build software (e.g. the programs and components that make your platform or app work). In a previous post, I went through the activities involved in software development.  These include requirements, design, build, test and implement. A methodology is the way in which those activities are completed.  It’s the process that you follow to complete the work required to build a platform or app. When you start working with developers, the topic of methodology will most likely come up, so I thought I would review these with you in this article.  

    Today, software is usually developed following one of two methodologies – waterfall or agile. In both methodologies, all of the activities in the software development still need to be completed – the difference is in how they are completed. To recap, the activities in software development are outlined in the diagram below:

    Waterfall

    Waterfall is the traditional software development methodology. In waterfall, you complete one activity at a time before you go onto the next one:

    Here, you start with defining what you want in the requirements phase. Once your requirements have been fully-defined, you go onto the design phase. After your solution has been designed, you go to the build phase. When the build is completed, you test. Finally, once the solution has been tested, it’s implemented.

    Since you must finish one activity before going onto the next one, waterfall requires that you know exactly what you want to build up-front. This means that the requirements for your platform or app have to be quite detailed. The benefit of doing this is that when you know what you want to build, you can get a fairly accurate estimate of how much it will cost.

    The challenge with waterfall is if you come up with changes or additional requirements during the project. In extreme cases, you may have to go back to the design phase and re-think the solution. This often results in the project costing more and taking longer to complete. However, in most cases, if you’ve thought through your requirements, you can get a cost and time estimate for making the change that won’t have too much impact on your project. Alternatively, it becomes something you add shortly after launch.

    Agile

    Agile is a modern methodology that promotes flexibility. There are actually a few different methodologies that fall under the agile bannerd, but the most popular is called “scrum”. In agile, you still need to go through the processes of defining what you want, designing a solution, building it, testing it and implementing it. However, some of these activities are now done in parallel:

    You start with high-level requirements of what you want to build and this is broken down into parts that are completed over a series of “sprints”. A sprint is generally defined by a fixed period of time, so you determine the contents of a sprint based on what can be completed in that time.

    During a sprint, it’s a collaborative process to flush out the details of what you’re building. You and the development team work together (at the same time) to design, build and test each part. Implementation can occur at the end of each sprint or at the end of the project. An important distinction to make here is that an implementation, doesn’t mean that the functionality is made publicly available. It’s basically saying that the software is in a state that it’s finished. You may complete multiple sprints before you’re ready to actually launch the functionality to world.  

    The important part of agile is the element of collaboration. The idea is that everyone is working on a part together, so as you talk about what you want, the designers and developers are figuring out how it will work, coding it, and then getting you to test it out. Given the focus of flexibility, there may be multiple iterations to get it right. It requires a lot of commitment from you to make decisions quickly so that the team can keep going. Also, if you run out of time in a sprint, any things that aren’t finished need to be moved to the next sprint.

    The tricky thing with agile is that the quotes that you get will be based on high-level requirements. This means that as your project evolves, you may find more and more things that need to be included or the building of your platform or app may be more complicated than originally estimated. Your project will end up taking longer and cost more to complete. Contractually, it’s also harder to hold your developers accountable to what is delivered, because you don’t have detailed requirements to include in the contract.  

    So, which methodology should you use?

    If you’re just starting out in software development, the concepts of “requirements”, “design”, “build”, “test” and “implement” are all still new to you. You’re probably not sure what you have to do and you’ve got limited funds, so you want to know that your product will get built for the amount that you’ve allocated. If you have to spend time ironing out what you want to build with your developers, you’ll pay for that privilege. So, in this case, I would go suggest following a waterfall methodology.  

    This is probably going to be pretty controversial with some of the developers and agencies that you come across. However, I believe that agile works best with a trusted team (like a co-founder or full-time employee scenario), where you’re not counting the hours to get something done. Everyone on the team (including you) needs to know what to do to make each sprint count. You don’t want to run out of money before you finish building your product! You’re also dealing with a very small team – probably 3 or 4 at the most. Agile has more benefit with larger teams where people are working on different, but related things, at the same time. If you’re dead set on agile, I suggest switching after your initial launch. You and your developers will be more comfortable working together and it’ll be a lot easier to work in an agile way.

     I do have a caveat on this. I also advocate starting with the smallest possible project that you can. It’s much easier to start small and build on something that already exists. Compare that to starting with a massive project, which will carry with it a lot more risk. Remember that you can always implement without launching, so the waterfall approach can become pseudo-agile with lots of small projects. This will allow you obtain some of the benefits of agile, while allowing you to gain experience on how software development works and to get a more accurate estimate of the costs.      

    So there you have it – an introduction to waterfall and agile.  A basic understanding of these methodologies will give you some context into how developers and agencies build platforms and apps.  If you have any questions about this, please pop them in the comments below.

    Looking for a developer?
    Get my 10 essential tips for hiring the right developer for your project.
    Download it now for free!