Software Solutions Foundations with Agile Development
Today's software engineering world has changed significantly since a decade ago.
Software product development is accelerating, and expectations for releasing products quickly are getting stronger every day.
All this time-to-market creeping is causing real stress on the time that is left for developing code.
And because of these changes, writing code alone just isn't going to cut it anymore.
In this article, we’ll look at what direction software development is taking and what has triggered this change.
Furthermore, we’ll look at what the changing landscape means for the definition of a software developer.
In this context, Agile development is proving to be a valuable tool for developers.
Agile development has the potential to make you a more effective programmer. When the processes are implemented along with the right tools, it can save you a lot of time and help you become more flexible in a market that is raising its expectations fast.
Knowing Thy End Users
Creating software-based solutions has become relatively simple. People convert ideas into usable apps and services during two-day hackathons. Open Source and all those free libraries make it easier than ever to put something together.
This makes the developing waters a little restless since there are a lot of people who are building solutions for common issues.
Besides that, people are just expecting more and more features, and they don’t want to wait a year for them to arrive. They just don’t need to, because, in a year’s time, another company will have provided a solution with the feature that you’re missing.
Because of these changing conditions, it is becoming more and more important for developers to expand their horizon from pure development to understanding their users and the market that the solution is going to operate in.
Within the corporate world (my working space for the last 5 years), this is labeled as “being where the business is at.”
To be the most effective developer, you need to really understand the users of your solution, whether they are corporate employees and/or managers in a Business to Business (B2B) setting, or other end users for your product.
Agility to the Rescue
Software development has shifted from building large applications towards creating small and focused products and services with maximum added value and expanding them over time.
Nowadays, software development is about maximizing customer market fit. Wikipedia defines market fit as the following:
“Product/market fit means being in a good market with a product that can satisfy that market.”
When Agile software methods were first introduced, they showed developers a new way to build products in recognition that the market, and its needs, are constantly changing.
Agile development involves working together in teams, each of which is capable of building the most important features of a product in a couple of weeks’ time (usually this period is two to four weeks long). During this period, called an iteration, the features will be clarified, verified, built, and tested.
By building the most important things first in smaller iterations and providing increasing value that fits the current market’s needs, Agile development has proved itself to be more robust in dealing with market changes, compared to more traditional working methods.
Agile methods also help developers to create a Minimum Viable Product (MVP) by letting them create the most important features and aspects in the first sprints.
In layman’s terms, MVP is a best practice approach that aims to define the least functional product that will deliver maximum value to the user.
After the first sprints of your project, you end up with a solution that is both functionally working and provides value for the user. Tweaking the MVP to improve it (technically or functionally) and adding secondary features are often done in the following iterations.
This way, your core product improves and can get expansions in a very short amount of time, resulting in a smaller time to market and thus lowering the chances that your product will lose base with the market.
By integrating early and frequent feedback loops, Agile processes like SCRUM help us to keep an eye on the goals and verify if the result is matching up to expectations.
This is true even before a single line of code has been written. It is a good idea to validate your product against possible end users.
User Feedback: Mightier Than the Sword
Gone are the days of creating massive software products bulking with a lot of features that take up to two years before they can launch.
With today’s tools, like wireframe editors; interactive prototype creators; and analytics solutions that track your website, video, or social media performance; gaining feedback has never been easier.
By performing user interviews to check a mockup, market fit can be measured even before you code the solution, so you can verify that you’re going to focus on the best implementation choices.
What you THINK is the best solution for your user and what your USER WANTS are often two separate things. Just like how we need to test a mobile project on an actual mobile device, there is no substitute for interacting with the users that you are targeting.
You need to check your ideas first, launch them, and react to user feedback at regular short intervals.
Agile development supports this by letting you focus on smaller parts, and using the user feedback that you gain as input for your next iterations.
Perhaps some functionality that 90% of the users need to use regularly got a lot of critique and was a little off. Or perhaps you get feedback on a feature that everyone is missing when you expected that nobody would use that feature.
An Agile process like SCRUM enables you to take these matters on by letting you plan changes in the next iteration. This way, you can polish the functionality and get on with other features in a relatively short amount of time.
It's a matter of survival, really. It’s the difference between becoming the next hit on Product Hunt or ending up as an old-news solution that’s surpassed before it even hits the internet shelves.
Going Agile Will Cost Ya Dearly
The pressure to deliver fast and the ever-shrinking time-to-market cycles are taking a toll on the amount of time left for writing code.
Although Agile processes enable us to deliver value in a shorter period, releasing every three weeks or so also means a lot more deployment moments.
More frequently testing your code.
More preparing your production infrastructure.
More frequently informing customers of the updates.
And… You get the picture.
There’s a lot involved in going from a functional program on your development machine to actually launching in production and updating it from then onward.
This increased frequency of going through the entire development, testing, and deployment cycles has an impact on the time that us developers have left to write optimal code that is robust and maintainable.
Luckily for us, a lot of weaponry has been added to the arsenal for developers in the last decade:
- There is Google, the search engine that has become more of a default research tool than a search tool. You can use it to find tutorials, free videos, and content that helps you to master a development language, all those libraries and tools, and more.
- GitHub provides massive numbers of example projects and accessible instructions on how to integrate complete solutions and services into your project.
- A lot of common services have been published and/or made available online by big software companies and provide easy building blocks (looking at you, Microsoft Azure, Google Cloud, and Amazon Web Services).
But even with all these tools, the effective amount of time that one has to actually build code has decreased.
A survey by IT World, taken in 2013 amongst 443 developers, showed that developers spend an average of just below half their working time (avg. 19.1 hours of their 40 hours/week) on actual coding.
According to the survey results, twelve hours go into brainstorming and collaborating, meeting, and handling emails. When you need to find out what the user wants, it just takes time. Just under ten hours go into keeping environments alive and running tests, on average.
The decreasing amount of time and additional tasks that accompany Agile development make it almost inevitable that you integrate available building blocks like services and existing libraries.
They are useful because, with all those available resources, you don’t have to reinvent the wheel.
Because of all these changes in the development landscape, the foundation for your product has become increasingly important.
Although Agile development involves more frequent administering of tools and processes, it is worth the step towards an optimal market fit and faster development cycles. That is, if you can manage to look further than just the coding part.
Handling your Agile Development Foundation Sword Supersedes Coding
It is no longer “just” about coding when it comes to creating a solid foundation for your product.
Choosing the right stack; using the best development tools; and setting up an optimal built, integration, and release flow is where today's game is being played.
As explained, Agile development processes like SCRUM are helping teams to deliver value in a short period of time by letting them implement the features that matter most first.
In addition, SCRUM states that you need to be able to deliver a functional version of the scope that you’ve set for the iteration. In order to be able to do so, you need to automate as much of the traditional development cycle steps as possible.
By automating kicking off unit tests and reporting the results as soon as code gets checked in, you don’t need to spend time waiting on those results.
If you setup a configuration that updates the testing environment as soon as all tests are green, and deploy test versions of your mobile app via TestTlight into the hands of stakeholders and testers so you can get feedback on the same day without having to manually do all those actions, you’ll spend less time and effort on these tasks— precious time that you can put to good use on developing and coding.
The examples that I mentioned are both examples of Continuous Integration (CI).
You can find more information about SCRUM and Agile development on the websites of Scrum.org, Scrumguides.org, and Scrum Alliance. There are also official courses that you can take. For developers, the most interesting are the Scrum Master and Professional Scrum Developer certification paths.
Scrum Master focuses on helping people take on the role of guiding a SCRUM team (this can also be a developer on the same team); the Professional Scrum Developer certification focuses on teaching developers how to optimize the development cycle for SCRUM from the developer’s perspective.
Tools Beyond the Realm of Agile
DevOps is another framework—best practice, if you will—that shows the power of creating a development environment that does the work for you instead of taking up your time.
By making important variables configurable and making things manageable by other people rather than the developers themselves, you’re freeing development resources from having to update stuff that really isn’t influencing the actual business rules and/or mechanics of your software product.
You can regain control of your time and minimize the effect of having to repeat tedious tasks, like having to deploy a new version to production just because a backend IP is changing.
Cloud computing has already been around for some time. With cloud platforms, you basically throw all your server hardware out of the window and host your solutions in an online platform.
By replacing hardware servers with virtual servers that you can duplicate (even automatically!) when your solution is becoming so popular that you need to upscale, your solution can literally serve an entire planet.
Many solutions could not have been realized without advantages like the scalability and manageability that are gained when you don’t have to worry about maintaining your own infrastructure for your solutions.
Popular cloud platforms include Microsoft Azure, Amazon Web Services, and Google Cloud. Which one is best for your solution depends on what type of project you are building.
Obviously, if you’re building your products with Visual Studio and use C#, Xamarin, or other Microsoft products, Azure is a good fit. Android / JAVA developers tend to use AWS more.
Be sure to check out the type of building blocks that the online platforms provide and how much they cost.
As you can see, SCRUM and DevOps are clean indicators that a solid foundation for your project depends on more than software alone.
If you want your development project to be as agile and flexible as possible and you want to optimize the time that you can code in, you need to think beyond the software layer alone.
If you are going to implement a SCRUM process, automate your development flow with CI, and can choose a cloud platform that suits your needs and lets your solution support the DevOps best practices, then you know that you’re on your way to implementing one badass solid foundation.
In other words, it is worth investing effort and time into creating an automated development workflow and a product that can scale fast and easily by choosing the right development tools and cloud solution. Only then will you be able to get your product out there without breaking a sweat.
Free Up Time
What all these online resources (libraries, stacks and tools) and all the Agile workflow techniques and automated processes really do is free up your time.
The time that you gain by implementing all those Agile methods and tools is a resource that you can spend on the few specific parts that actually still need to be coded. Mostly, those are the actual business logic parts that are very specific to the problem that you’re trying to fix with your solution.
This might be considered the core of your product, as it is this business logic—and the accompanying logic—that differentiates your solution from the competitor’s.
It helps you to free up time to increase customer market fit for your products. By aligning your product more with the end user, you can lower the rate at which people stop using it after a while (the churn rate), and take on some extra customer feedback to decide if and how the product angle can be improved.
When you spend more time on improving your solution and keeping your users satisfied, you will be more able to grow in that aspect.
And that will help you become that developer who can do more than just code — A developer who can understand the user and knows how to improve his or her product.
You Can Only Spend Your Time Once
This article isn’t implying that there is no more room for craftsmanship and spending time on writing beautiful code.
Au contraire. Even for the slightest piece of custom-written code, it remains important that it runs smoothly and performs in a stable way. In the context of Agile development teams, clean and understandable code is still very important.
Writing tests that describe your functionality towards other team members and that check the quality and functioning of your code still matters.
What this article DOES imply, is that focussing on writing code alone just isn't going to cut it anymore.
Come to think of it, it never did, really.
The fast lane that software development is cruising in these days is making it significantly more clear that you need to be able to change gears fast.
And being able to redirect the focus of your product, code, build, and deployment of a new version of your product? Well, that’s exactly the kind of meat that Agile software development, together with DevOps, likes to eat raw.
Build your software smart and automate every process surrounding it as much as you possibly can. Then you will reach a flow that enables you to iterate through ideas, implement user feedback within a short timeframe, and deliver product.
When To Dive Into The Agile Trenches?
Well, we are talking about a foundation. And the best time to define and implement a good foundation is right at the beginning.
I’ve started working as the Tech Lead for a healthcare startup called Proteges since July 2017.
In the beginning, there was little code written, and the focus was mostly on defining the company's vision and strategy.
That’s the time that I’ve found to be best for defining the foundation for your development process.
Because there is still little hard-written commitment towards users and other parties, you have time to do your research and define the kind of development processes you want and look at the most future-proof tools and services that will be most suitable for the kind of developers that you need.
Do you want to implement features using SCRUM or KANBAN? Do you want to use the Microsoft cloud structure, or Amazon’s? Is your main language C#, or JAVA?
All these decisions will lead you to a stack of tools and frameworks that you’re going to use, and this will be the landscape in which you set up your foundation.
Even when you’re developing in a big company where there are all sorts of organizational structures, processes, and tooling selections being made, you can start defining the most optimal foundation for your organization.
Look at the current situation within your company—this will help you to define the best practices to achieve your desired outcomes.
What development tools work best, and why?
What frameworks and development language are mostly being used, and what tools are the best fit with those?
Whenever a new project is forthcoming, you can examine it and discuss with your manager(s) how implementing it with the foundation you’ve defined will make the project achieve results that are closer towards the expectations of the end users, and how using your foundation will result in a better marketing fit.
It may take more effort and some persuading, but if your managers can comprehend the long-term advantages, it will be worthwhile.
In this article, I’ve given you an overview of how the world of the modern-day developer has changed.
Where the focus previously was on simply coding software, it now lies with understanding the users of your product.
You’ve read about how a short time-to-market means that you are more flexible and can increase the marketing fit.
Last but not least, we’ve seen how Agile development and other modern tools and best practices (like Continuous Integration, DevOps, and cloud computing) need to be taken into account when you’re laying out a foundation that you and your Agile team members can (literally) build on.
No matter what product you're developing, the market wants a working solution for the pain that they're experiencing.
And by laying out a solid foundation for both your software and the processes that surround and follow the development process, you will increase the chance that your solution will hit the bullseye.