In the last three decades, software development has undergone a drastic change. Computer science started out as a mix of discrete mathematics and electrical engineering. As more people bought personal computers, most businesses sold their software for fixed prices. Nowadays, businesses are more user-oriented than product-oriented, and most of them depend on a steady flow of income, such as a subscription fees, rather than a fixed price. Throughout the process, offices transitioned from cubicles to open spaces, programmers from hobbyists to professionals, and products from executable programs to web applications. Two major changes fostered this transformation: Improved Connectivity and Easier Access to Data.
The Waterfall Method
Before the days of the World-Wide Web, software was shipped in the form of floppy disks. Since companies could not easily send updates to their users, the Waterfall Method emerged. The Waterfall Method divides the software engineering process into the following stages:
- Requirements Specification: Gather information from clients and understand the problem.
- Design: Propose a solution and develop a model for construction.
- Implementation: Develop the full application.
- Verification: Customer uses the application and confirms that it works as expected.
- Testing: Heavily test application.
- Shipping: Customer uses or publishes his application.
When I first saw the photo above, I immediately thought that this comic was nonsense. In the couple of internships that I had, everyone on the team had a say on the project and met with the customers to define the products. I only understood the meaning of this comic when I had an interview at a company that showed me the cubicle that I will work in. It was dark and quiet, definitely not my kind.
The main reason companies were managed that way was the low level of connectivity people had back in the day. When a company spots a bug after it delivered its product, it will need to send floppy disks with the patches to all the consumers who bought the original application. Releasing a newer version of an application was a process that took several months and had enormous costs.
As the Internet became widespread and connection speeds escalated, it became easier, faster, and cheaper for companies to release updates for their software. Programmers need no longer worry about all the edge cases and every single security loophole before releasing the application. As more bugs are discovered, the programmers fix them and publish the updates.
Easier Access to Data
Big Data is a controversial topic nowadays. Data is the premise of some of the booming information industries, such as business intelligence, marketing automation, and targeted advertising. What once required going to libraries and searching stacks of dusty books can now be done with a Google search.
One branch of data is feedback. Let's take mobile apps as an example scenario. When software companies release an app and publish it to the Google Play store or Apple App Store, they get instant feedback from the users. They know the user's demographics, ratings, and all other usage statistics. Back in the day, getting feedback took so much effort, and it did not provide data as valuable as what we can get nowadays. Interviewing a person for feedback or sending him a message is not the same as the user writing the feedback right after the user runs the app. During interviews, people are usually affected by the environment and the interviewer's personality.
If one user has a problem, then there are other users who have the same problem. Therefore, user suggestions help companies build software that appeals to the majority.
The Agile Methodology Emerges
Soon enough, the world realized that the Waterfall Methodology no longer fits our era. The goal of the waterfall method was to get the application right the first time. That was a need because shipping or deploying software was a costly process. Now that deployments can be done in a matter of minutes or hours, the concept of continuous refinement started appearing. Not only can developers deploy apps quickly, but developers can also get instant feedback from their customers. Fast deployments and instant feedback are the foundation of the Agile Methodology. The general stages of the Agile software development stages are:
- Design and implement a small set of features.
- Publish the app.
- Listen to user feedback.
- Select new features based on user feedback and go back to step 1.
Unlike the Waterfall Method, the Agile Method is against writing a full-blown plan. Plans are based on estimations and hypotheses, which are incorrect most of the time. A customer may want an app for arranging parties at first, but then he realizes that he really wants a social network. To increase customer satisfaction, software developers do not ask for everything and then build the product. Instead, software developers work with the customer to build the product. At the same time, the customer is frequently presented with demos and is in track with the internal tasks for managing the project.
Although "stop planning and start coding," works for some projects, the better solution is "plan only for what you need at the moment."
The Workplace Shift
The history of software engineering is completely changing the way we view computer science. When I meet new people and tell them that I am studying computer science, they think that I will spend the rest of my life in a dark cubicle typing an endless stream of zeroes and ones. Most people, excuse me for generalizing, view computer programming as the job for people who do not like to engage with society. Although this notion may apply to the programmers of the 80's, I forcefully refute that this is the case nowadays. Agile is transforming the software development workplace. Programmers are becoming engineers, and open offices are replacing cubicle.
To get a better idea of what programmers or software developers do and how their workplace looks like, check out BrainJocks, the company where I currently intern.