Many people think of software development generically as coding. But this is only the first part of the story. While the writing and manipulation of code is at the heart of developing software, there are a lot of related skills, technologies, and processes developers or software engineers need to master to achieve excellence in their field.
Types of Software
Before digging into what it is like to work as a software developer, it is helpful to understand a little about the types of software and systems that developers are usually tasked with creating. Software applications can include products like: complex business applications, mobile apps, embedded software (inside hardware or equipment), computer operating systems, or even interactive websites. Developers or software engineers typically use a variety of programming languages combined with related servers, technologies, databases, and systems to create a user experience that solves a particular individual or business need.
Sometimes developers specialize in the languages and tools for “front-end development” which is user-facing. Others specialize in “back-end development” which involves the servers, systems, and databases that support how the front end works. Developers skilled in working on both the front-end and back-end development are called Full Stack developers.
A lot of attention has been paid recently to the systems and processes developers use to create or maintain software. Most companies and organizations have moved or are moving away from a project management approach called “waterfalling.” This approach begins with a full articulation of business and technical requirements, and then moves to design, development, testing, and release over the span of weeks, months, or even years.
Agile approaches, on the other hand, are typically organized around collaborative teams that work together to design, prototype, develop and release bundles of features iteratively in short one to two week “sprints.” Features are captured in user stories, and product owners work directly with developers to understand the desired user experience and the technical approach needed to deliver the user experience.