Atlassian's guide to modern software development


Emerging trends such as feature flagging, continuous delivery, and others

Software development’s evolution throughout the 20th century

Applying the popular management framework

Extreme programming, lean development, and the waterfall model

Software is everywhere these days: phones, TVs, cars, vending machines, coffee makers, and pet toys all offer some software driven features. All of these products have been created by groups of people that have organized with the goal of making electronic signals behave in a desirable pattern. In short, software development is the overall process involved when taking a software project from conception to production delivery.

This process encompases the design, documentation, programming, testing and ongoing maintenance of a software deliverable. These various aspects are used to create a workflow pipeline, a sequence of steps that when followed produce high quality software deliverables. This pipeline is known as the Software Development Lifecycle.

The art of software development has many deep schools of thought. The following discussion is not a comprehensive guide, but a overview of the most recognized techniques. Software development today is generally executed with a complementary agile project management process. This process is in-effect during steps 3 and 4 from the Software Development Lifecycle.

A regular planning period is conducted in which expectations are set, dependencies are addressed and tasks defined. The tasks are executed and adjusted during a sprint period. During the sprint period these tasks are updated as they progress to completion. Specialized organizational software for task tracking, like Jira, is used to monitor the state of individual task within a holistic sprint view.

1. Concept
Projects are envisioned, designed, and prioritized. Confluence is a great tool to develop product research documents and share design files during this stage.

2. Planning/Roadmap
Stakeholders are identified, budgets set, and infrastructure requisitioned. Design documents from the concept phase are broken down into actionable tasks. Jira and Trello manage, track, and organize these task lists.

3. Code/Review/Test
Development teams work to build production ready software that meets requirements and feedback. CI/CD pipelines ensure efficient developer experience. Bitbucket offers collaborative code review tools and CI/CD pipelines which plugin to the code review process.

4. Deploy/Release and Hosting
With code approved and merged, it’s time to ship it. Bitbuckets CI/CD pipelines makes deployments as easy as clicking a button. The live production code will need a place to live. Consider using cloud hosting provided by Amazon AWS, Google Cloud Platform, or Microsoft Azure.

5. IT Support
Support and maintenance is required of active software projects. Jira Service Desk provides powerful tools to capture, triage, and resolve customer support requests.

6. Incident Management
Deprecation and end-of-life activities, including customer notification and migration are software development best practices.

1. Concept
Projects are envisioned, designed, and prioritized. Confluence is a great tool to develop Product research documents and share design files during this stage.

2. Planning/Roadmap
Stakeholders are identified, budgets are set, and infrastructure is requisitioned. Design documents from the Concept phase are reviewed and broken down into actionable tasks. Jira and Trello are used to manage track and organize these task lists.

3. Code/Review/Test
The development team works to produce production ready software that meets requirements and feedback. CI/CD pipelines are utilized to ensure efficient developer experience. Bitbucket offers code review tools which encourage iterative quality improvement through team discussion. Additionally, Bitbucket has CI/CD pipelines which plugin to the code review process.

4. Deploy/Release and Hosting
Once code has been approved and merged it’s time to ship it. Bitbuckets CI/CD pipelines can make deployments as easy as clicking a button. The live production code will need a place to live. Modern applications use cloud hosting provided by Amazon AWS, Google Cloud Platform, or Microsoft Azure.

5. IT Support
Ongoing support and maintenance is required of active software projects. Jira Service Desk provides powerful tools to capture and triage support requests.

6. Incident Management
Deprecation and End-of-life activities, including customer notification and migration. 

Software development has a surprisingly rich history.  The next section is a brief timeline showcasing the evolution of software development methods through the ages.

In 1936 Alan Turing invented the Turing Machine. A device which has two primary components: a strip of tape divided into cells and a head which points to the tape cells. The device can read or write to the tape cells and move the head to the next or previous cell. Turing later published a paper: “On Computable Numbers, with an application to the, which became the foundation of computer science. In the paper Turing presented that a Turing machine could solve any problem that could be described by simple instructions encoded on a paper tape. One Turing Machine could calculate square roots, whilst another might solve Sudoku puzzles.

The 1990s saw rise in management quality initiatives. Continuous Improvement methodologies like Six Sigma encouraged strict guidelines for quality assurance. TQM (Total Quality Management) and Capability Maturity Model are methods under the Six Sigma management.

The 90s saw the dawn of open source software. The GNU/Linux project brought about completely disruptive distributed team workflows and methodologies. Git was created to help manage these new distributed projects. Asynchronous communication over email and IRC.

Software development today primarily builds off the workflows established in the 90s open source world. Third party repository hosting services like Bitbucket have become central hubs for teams to use distributed asynchronous communication patterns around. Agile management methods are applied on top of these technologies to help coordinate and manage integration and release.

Software development today primarily builds off the workflows established in the 90s open source world. Third party repository hosting services like Bitbucket have become central hubs for teams to use distributed asynchronous communication patterns around. Agile management methods are applied on top of these technologies to help coordinate and manage integration and release.

In 2001 a group of software developers frustrated with the existing cumbersome management system, gathered and published the the agile manifesto. The ‘Agile’ method is a largely popular modern software development paradigm.  Agile arose out of frustration for the ‘monumental’ methodologies of the past. Methodologies like Waterfall and TQM were born in the slower moving, less forgiving industries of physical goods manufacturing. 

Software is a much more forgiving and fluid end product than manufacturing. Agile takes advantages of these properties and provides a complementary management methodology.  Agile has been the driving force for development of the previously discussed features like CI/CD, Feature flags, and Microservices.

Adoption of Agile development practices has given rise to new disciplines of software development. DevOps is a modern field of software development which focuses on support and automation for supplementary software development tasks. DevOps teams are primarily tasked to support and improve software developer efficiency. DevOps teams build tools to automate and maintain mundane software development chores like infrastructure maintenance. 

Agile has been fantastic at optimising the development process. It has been so successful that Agile ideas and culture are continuing to expand to other areas of business like design and product development.

Extreme programming is a derivative of the Agile process. Extreme programing stresses customer satisfaction as the guiding force for development iteration cycles. Extreme programing follows a five step iteration cycle. The rules are Planning, Managing, Designing, Coding, and Testing. Learn more about extreme programing rules on the official extreme programming site.

LSD or Lean Software Development is an evolution of lean manufacturing principles and practices. LSD is adapted from the Toyota Production System. it is emerging with the support of a pro-lean subculture within the Agile community. Lean offers a solid conceptual framework, values and principles, as well as good practices, derived from experience, that support agile organizations.

The waterfall model is a development process that originated in the manufacturing and construction industries. It is a highly structured process that strictly restrains movement from one phase to the next. The motivation of this restriction comes from the prohibitively expensive phases of execution in physical environments. When applied to software these restrictions can feel draconian and counterproductive.   

Extreme programming is a derivative of the Agile process. Extreme programing stresses customer satisfaction as the guiding force for development iteration cycles. Extreme programing follows a five step iteration cycle. The rules are Planning, Managing, Designing, Coding, and Testing. Learn more about extreme programing rules on the official extreme programming site.

LSD or Lean Software Development is an evolution of lean manufacturing principles and practices. LSD is adapted from the Toyota Production System. it is emerging with the support of a pro-lean subculture within the Agile community. Lean offers a solid conceptual framework, values and principles, as well as good practices, derived from experience, that support agile organizations.

The waterfall model is a development process that originated in the manufacturing and construction industries. It is a highly structured process that strictly restrains movement from one phase to the next. The motivation of this restriction comes from the prohibitively expensive phases of execution in physical environments. When applied to software these restrictions can feel draconian and counterproductive.   

Learning software development can be a great exercise to open up new avenues for career growth. Being able to identify and discuss technical software development topics can improve your toolset in a software development organization.

A basic knowledge of software development is becoming more and more valuable. Understanding the design and implementation of how software works can help an individual operate more efficiently in personal and work life. Most modern business operations have some level of human-computer interaction. 

One of the best exercises for getting started is to observe, or participate in, a successful open source project, such as Git. These projects maybe identified from software you already use and enjoy. They will have guidelines to contributing and have open message forums to follow along with discussion and execution. Additionally, reading this document is already indication that you are ready to take the first steps and get started!

Software development is a technical craft with a steep learning curve and deep history. It can be intimidating for outsiders and newcomers to approach. Don’t let this deter you from learning either the basics and/or higher level topics—there are many resources online that offer guides on learning Agile development.