A quick guide to understand the common problems and solutions of a modern software development team
Introduction
Hosting a website 10 years ago usually goes like this. The webmaster would shop for a hosting service package that provides a bundle for website hosting, domain registration and an email client. Developers would then access it via cPanel and using FTP to upload the source code directly onto the web server. This setup works well for it offers great values at an affordable price.
But as modern website becomes more demanding, the traditional solution presents many problems such as balancing between introducing changes and preserving website’s overall stability.
Now customers expect a website to be always available, fast, user-friendly, secured, integrable with other services, and always up-to-date. All of these requirements can be difficult to achieve as traditional hosting service strategy were not designed to expect frequent iterations, though very affordable.
Adhering to the Modern Standard
Now building a website requires a diversity of skillsets and collaboration. Fortunately, most of the problems we face as a website manager/team have already proven and tested solution readily available. Here are some of the common problems and solutions:
Collaboration
Websites have become a fairly complex piece of software — from designing across device user interface, to constantly evolving its feature sets, having to serve external customers and internal employees, making it integrable to other softwares and social media, optimizing for search engines, and designing software architecture for reliability and scalability, it can no longer be a one person project.
Therefore, in modern web development, it is fundamental to have efficient collaboration to react, adapt, and implement changes as business needs evolve.
Project management tools (Atlassian, Trello, Asana), team communication (Slack), source code management (Github, Bitbucket), customer feedback (canny.io, zendesk)
Iteration — Introducing Changes
With constant changes in the source code, it is bound to be messy quickly not to mention the added layer of complexity with more and more team members joining a software project as it scales. When introducing changes to a piece of software, it is prone to introducing mistakes to an already functioning production live site. Without a proper way to keep track of each developer’s effort, in case of a problem occurring, it can be difficult to find out what caused a problem in the first place. And when development team tries to fix a problem in the quick, it is prone to creating even less quality code in the pressure of the moment which can introduce even more bugs in the future.
The modern wisdom is to take advantage of code versioning, you can think of it as a database of source code that tags, and store history of each file so it can be reverted back and separated quickly to inspect in case of a problem.
Furthermore, many organization begins to write tests for their code base so all developers can know immediately after they committed their changes, whether it has broken any previous features. This can make discovering a mistake earlier and much less costly.
Software architecture as code
Often even when development teams follow the convention of versioning their code. During deployment, they continue to encounter the problems they faced before that is, the incompatibilities among various server settings and problems that occur when testing in different databases. Deployment can then become a source of problems, ultimately still jepordizes the production service which affects the end customers. Software architecture as code (docker) is a concept to script a reproducible deployment sequence and dependancies that can replicate an entire instance in matter of seconds and serve as a template for future use. And since it is code, it can then be versioned as well. This has now become a discipline of its own called the devops. Check out AWS Cloudformation if you are interested in the topic.
Automation When Possible
Automation can drastically improve productivity and accuracy. Though the concept had been around for ages, it is not until recently when most major services have created their API (Application Programming Interface). Now development team are empowered to create features that take advantage of other services and craft its own software according to its organizational need. Zapier and IFTTT being a platform which allows non-programmers to also automate mundane tasks.
As a software development team, this can mean the ability to inform the right people when a task is being performed and collect feedback instantly to keep the process efficient. It also makes complicated tasks such as deploying development servers settings across 20 different instances a task of a matter of seconds and minutes.