What's every manager's dream, after finding buried pirate gold, starting a unicorn ranch, and marrying a beautiful globetrotting supermodel? Why, to improve web application development productivity, of course!
Unlike the gold, mythical creatures, and supermodel, this goal can be achieved. You can do it in small steps and realize slight improvements in team productivity. But if you're aiming at order of magnitude improvements, some deeper changes need to be made (it's still not as hard as starting a unicorn ranch).
When starting this process, it's important to consider the fact that both building new web applications and maintaining existing apps must be optimized. After all, the lion's share of a web application's cost comes after the first move to production!
With this in mind, I have pulled together seven tips to help improve web application development:
1. Automate deployment
Moving a web app to production needs to be as simple and as fast as possible. To be truly Agile and keep up with the business, deploying to production must occur frequently, or delays will stack up across the development cycle. If it takes two days to place new versions in production, your productivity will suffer.
2. Reduce complexity
The more complex an application grows, the harder it is to change and adapt. The solution? Split the system into smaller parts when it starts getting too big. To do this, however, requires a technology that helps make sense of complex systems, as well as helping the development team split the system into more manageable components.
3. Aim for production from day one
It's tempting to hack out a quick solution for an immediate business problem, and later clean the application up to make it production-ready. This may seem like Agile, but in reality, it's vital to not neglect things like monitoring, scalability, logging, user management and so on. The ideal solution is to build on top of a platform that let's you take these requirements for granted.
4. Impact analysis
To change quickly, the team needs to be certain that the changes will not break what's already working. This problem can be greatly minimized through three stages: First, use impact analysis tools during the development process: if a change to the database breaks the business logic, it needs to be immediately obvious. Second, use regression testing. Finally, make sure that the impact of changes can be measured, especially when placed in the production server with production data.
5. Invest on Knowledge Transfer
Employee turn-around, different teams for development and maintenance, or the need to reallocate teams to different projects are all good reasons to invest in knowledge transfer. But don't put the burden of knowledge transfer on the developers. The documentation will never meet requirements and walking through code is slow and difficult. Use Domain Specific Languages or visual languages and relegate this work to the tools.
6. Flexible Control
The advantages of having a 10 second deploy process are lost in the face of a two day bureaucratic process to approve a move to production. To have true flexibility, two things are needed: full accountability - to know who to ask for help if trouble occurs, and; most importantly, the ability to rollback a not-so-successful move to production.
7. Collaboration with stakeholders
The sooner feedback pours in from stakeholders, the sooner web app development will start moving in the right direction. There's no point in developing quickly if it's going the wrong way. With this in mind, it's highly important that stakeholders can easily provide feedback on what they would like to see improved.
Looks like a lot of work...
Correct - these aren't quick and easy steps (but it's still easier than that unicorn ranch)! But in following these tips, development teams can dramatically improve productivity.
As a case study for this, consider the OutSystems platform. It was designed and implemented with all these factors in mind, and a recent study, based on function points, proved that teams using OutSystems are 10.9x more productive than using standard technologies.
What other tips would you add to this list? How would you make your team more productive by an order of magnitude?