As Atlassians, we've had the opportunity to interview thousands of customers about modern software development processes. This outreach has enabled us to uncover customer needs, pain points, and future plans in order to build our product roadmaps meaningfully.
What follows is an overarching summary and perspectives of the software development world, where it's heading, and best practices we've learned. To validate our findings, we surveyed software development leaders to understand which practices are at the heart of the highest performing teams.
Learn the fundamentals
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
How you can get started
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.
The immediate future of software development is directed by a few core values: automation, transparency, and democratization. Overall these trends are lowering the costs required to develop new projects and lowering the barrier to entry for non-technical team members to contribute to software development.
The following practices have been adopted by some of the most successful enterprise software companies. Understanding how your team can use these practices to increase the speed of development can lead to a competitive advantage. These are the trends and practices that are enabling software companies to execute next level vision and delivery of product.
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.
Computers gained extensive adoption in enterprise business. The first standard software methodologies emerge; Study Organization Plan from (IBM) and Accurately Defined Systems from (NCR) Both companies publish printed books and distribute them to employees.
NATO held two Software Engineering Conferences in 1968 and 1969. The conferences were attended by international experts who agreed on best practices for software engineering. The conferences produced two reports that defined how software should be developed.
In 1969 the U.S. Department of Justice filed an antitrust suit against IBM. This prompted IBM to decouple their software and service business from their hardware sales business. The “unbundling,” as its known, opened doors to independent software developers to compete in the space. This sparked a new era of software development patterns for both IBM and independent firms.
The first PC and PC software companies gain traction. A disruptive book, The Mythical Man-Month: Essays on Software Engineering, is published in 1975. The book is on software engineering and project management. Its central theme is that "adding manpower to a late software project makes it later.”
Structured programming, a precursor to Object Oriented Programming, rises in popularity. Structured programming aimed at improving the clarity, quality, and development time of a software project. Structured programming emphasized use of the structured control flow constructs of like (if/then/else) and repetition (while and for), functions, and subroutines instead of using goto statements and conditional tests.
Object oriented design takes foothold. “Monumental” methodologies like Waterfall and SDLC gain widespread usage. These methodologies are considered slow and ridged and appropriate for building monuments.
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.
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.
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.
联系客服