Before we begin looking at frameworks and tools for software development, we need to first understand SD methodologies/philosophies or the software development lifecycle. This describes the process your project will take to get from conception to production, including the way in which design changes/updates to your software will be released to the users.
There are many methodologies, designed for different situations, but all of them in some way break-down a software development project into smaller pieces of work, and then determine how these will be performed to develop and/or maintain an application. Below are some examples of these pieces of work or steps in the process:
- Requirements/analysis
- Design/build
- Debugging/testing
- Deployment/release/updates
- Maintenance.
There are many factors which may influence your decision, including but not limited to the nature of the software, the organisation and organisational culture, the team creating/maintaining the application, the users, budget, time constraints.
The most common methodologies are:
- Agile - In short, agile represents these four values: individual & interaction, working software, customer collaboration, responding to change. Agility not rigidity.
- Scrum, Extreme Programming (XP) - Iterative development strategies meaning there are frequent incremental improvements
- DevOps - Continuous improvement
- Waterfall - Structured, rigorous, ordered, step by step approach
- Rapid application - Developer and user work closely to test and redesign and test and redesign until perfect and then cutover (release)
In saying that, most developers use a hybrid approach, combining parts of different methodologies to make something that suits each individual project. You may need to discuss this with stakeholders as your decision is likely to affect more than just yourself.
Eban Escott, CEO of Codebots explains more on this in his article and video combo What is the best software development methodology?
Waterfall
Waterfall is a traditional and linear approach to software development. It consists of sequential phases, with each phase dependent on the deliverables of the previous one. The key phases of the Waterfall model are:
- Requirements Gathering: The project requirements are gathered and documented extensively in this phase.
- System Design: Based on the requirements, the system architecture and design are planned. This includes defining the software's overall structure and functionality.
- Implementation: The actual coding or programming of the software is done in this phase. Developers write code based on the specifications outlined in the design phase.
- Testing: Once the implementation is complete, the software undergoes testing to identify and fix any defects or issues. This includes unit testing, integration testing, and system testing.
- Deployment: After successful testing, the software is deployed or released to the end-users for their use.
- Maintenance: The software enters the maintenance phase after deployment, where updates, enhancements, and bug fixes are made as needed throughout its lifecycle.
Advantages
- Clear and well-defined phases make it easy to understand and manage the development process.
- Suitable for projects with stable requirements and a fixed scope.
- Documentation is thorough, providing a record of each phase for future reference.
Disadvantages
- Limited flexibility and adaptability to changes in requirements or customer feedback.
- Testing is often conducted at the end of the development cycle, increasing the risk of discovering defects late in the process.
- Long delivery times, as the entire software is developed before it is tested or delivered to the customer.
Agile
Agile is an iterative and incremental approach to software development. It focuses on delivering small, incremental releases of software in short iterations, typically lasting from one to four weeks.
The key principles of Agile include:
- Iterative Development: Agile projects are divided into small iterations, called sprints, where a cross-functional team works collaboratively to develop, test, and deliver working software.
- Continuous Feedback: Agile teams regularly seek feedback from stakeholders, including customers, to ensure that the software meets their needs and expectations. This feedback is used to make adjustments and improvements to the product.
- Adaptability: Agile teams are adaptive and responsive to changes in requirements, priorities, or market conditions. They prioritize delivering the highest value features first and can quickly adjust their plans based on feedback.
- Cross-Functional Teams: Agile teams are composed of cross-functional members, including developers, testers, designers, and business analysts, who work together collaboratively to deliver software.
- Emphasis on Individuals and Interactions: Agile values face-to-face communication and collaboration among team members, as well as with customers and stakeholders, over strict processes and tools.
Advantages
- Flexibility to adapt to changing requirements and priorities.
- ontinuous delivery of working software, providing value to customers early and often.
- Increased collaboration and communication among team members, leading to higher quality products.
Disadvantages
- Requires active involvement and commitment from all team members, which can be challenging to maintain.
- May be less suitable for large, complex projects with fixed requirements and long-term planning needs.
- Requires a shift in mindset and culture for organizations accustomed to traditional methods of development.
Software delivery process, reduce lead time, and improve the quality and reliability of software releases. Key principles of DevOps include:
- Automation: DevOps advocates for the automation of repetitive tasks, such as building, testing, and deployment, to increase efficiency and reduce errors in the software delivery pipeline.
- Collaboration: DevOps promotes collaboration and communication between development, operations, and other stakeholders involved in the software delivery process. This collaboration helps break down silos and ensures that everyone is working towards common goals.
- Continuous Integration (CI): CI is a practice in DevOps where developers regularly integrate their code changes into a shared repository, often several times a day. Each integration is verified by automated build and test processes to detect and fix integration errors early.
- Continuous Deployment (CD): CD is an extension of CI where code changes are automatically deployed to production environments after passing automated tests. This allows for faster and more frequent releases of software.
- Infrastructure as Code (IaC): IaC is a practice in DevOps where infrastructure configuration and management are automated using code. This allows for consistent and reproducible infrastructure deployments, reducing manual errors and improving reliability.
Advantages
- Faster delivery of software updates and releases.
- Improved collaboration and communication between development and operations teams.
- Increased efficiency and reliability through automation of repetitive tasks.
Disadvantages
- Requires cultural and organizational changes to be implemented effectively.
- Can be challenging to implement in organizations with existing silos or resistance to change.
- requires significant investment in automation tools and infrastructure.
Scrum and Extreme Programming (XP)
Scrum
Scrum is an Agile framework for managing and delivering complex projects. It emphasizes iterative development, collaboration, and flexibility. In Scrum, work is organised into time-boxed iterations called sprints, typically lasting two to four weeks. The key roles in Scrum include Product Owner, Scrum Master, and Development Team. Scrum ceremonies include Sprint Planning, Daily Standups, Sprint Review, and Sprint Retrospective.
Extreme Programming (XP)
Extreme Programming (XP) is an Agile software development methodology that focuses on delivering high-quality software quickly and continuously. It emphasises practices such as Test-Driven Development (TDD), Continuous Integration (CI), Pair Programming, and Small Releases. XP advocates for a customer-centric approach, with a strong emphasis on communication, simplicity, and feedback.
Rapid Application Development (RAD)
Rapid Application Development (RAD) is a software development methodology that prioritises rapid prototyping and iterative development. It focuses on delivering working software quickly by using iterative development cycles, prototyping, and feedback. RAD emphasises user involvement, collaboration, and flexibility. The key phases of RAD include Requirements Planning, User Design, Construction, and Cutover. RAD is particularly well-suited for projects with rapidly changing requirements or where time-to-market is critical.
Methodologies: Which is the best fit for purpose?
Select the most appropriate methodology to the given scenarios.
Development frameworks are platforms for developing applications. They have existing quality code to perform low-level/common tasks in your application, so that you don’t have to reinvent the wheel. They also have methodology built in.
It’s a bit like buying the framework for a house, where a lot is already done for you (and it’s fixed), but you can add on to that what you need or want, to make it your own.
Keep in mind that many frameworks will have been worked on and perfected over time to suit most
situations, so using frameworks will save you time and make you more productive. Frameworks are linked to languages, for example Django uses Python and Meteor uses JavaScript.
Take the time to find the right framework for your application. You don’t want to weigh down your application with unnecessary code (this is typically called code bloating).
Essentially, using frameworks streamlines the process of software development and saves valuable time.
Read Top 100 development frameworks (Butler, R., 2020) to find out more about frameworks, and to see a list of frameworks for web applications as well as mobile applications.
Which of these are frameworks?
Do your own research and then return here and select which 5 of these items are frameworks.
Software Development Frameworks
Angular as a frontend framework
Angular is a popular open-source JavaScript framework maintained by Google. It is used for building dynamic and single-page web applications. Angular follows the Model-View-Controller (MVC) architectural pattern and provides developers with a structured way to build client-side applications.
Key features of Angular include two-way data binding, dependency injection, directives, and reusable components. It simplifies the development process by providing a robust set of tools and libraries for building interactive user interfaces. Angular is widely used in large-scale enterprise applications due to its scalability, performance, and maintainability.
Django as a backend framework
Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. It follows the Model-View-Template (MVT) architectural pattern, which is similar to the MVC pattern. Django provides a set of built-in features for building web applications, including an ORM (Object-Relational Mapper) for interacting with databases, a built-in admin interface, authentication and authorization mechanisms, and URL routing.
Django's "batteries-included" philosophy means that it comes with many features out of the box, allowing developers to focus on building their applications rather than reinventing the wheel. It is known for its simplicity, scalability, and security, making it a popular choice for building web applications of all sizes.
MEAN stack as a full-stack framework
MEAN stack is a full-stack JavaScript framework used for building dynamic web applications. It stands for MongoDB, Express.js, Angular, and Node.js. Each component of the MEAN stack serves a specific purpose:
- MongoDB: A NoSQL database that stores data in a flexible, JSON-like format.
- Express.js: A web application framework for Node.js that simplifies the process of building web servers and handling HTTP requests.
- Angular: A frontend JavaScript framework for building dynamic and single-page web applications.
- Node.js: A server-side JavaScript runtime that allows developers to build scalable and high-performance web applications.
The MEAN stack offers a seamless end-to-end development experience, as developers can use JavaScript for both frontend and backend development. It promotes code reusability, maintainability, and productivity.
Ruby on Rails for web application framework
Ruby on Rails (often referred to as Rails) is a web application framework written in the Ruby programming language. It follows the Model-View-Controller (MVC) architectural pattern and provides developers with a convention-over-configuration approach to building web applications.
Rails is known for its simplicity, productivity, and developer-friendly features. It comes with built-in tools and conventions for handling tasks such as database interactions, routing, and view rendering. Rails emphasizes principles such as DRY (Don't Repeat Yourself) and convention over configuration, which helps developers write clean and maintainable code.
Overall, Ruby on Rails is widely used for building web applications due to its elegance, ease of use, and thriving ecosystem of libraries and community support.
A SD tool is an application you will use to design, build, test, debug, edit, and maintain an app you are developing. Tools often also provide forums so you can look for solutions to problems as you go, all in one place.
There are many software development tools you can use to make your work easier, more productive, and more efficient. You will find that they all specialise in different things. So, you may need different tools for different projects.
When you’re looking at which tool to choose for a project, you’ll need to think about what language you’d like to use, whether you need the ability to share, or integrate, and what devices and operating system/s you’re building for.
Software Development Tools
GitHub as a version control system
GitHub is a web-based platform and a cloud-based service that provides version control using Git. It allows developers to collaborate on projects, track changes, and manage code repositories. GitHub offers features such as pull requests, branching, issue tracking, and code review, making it a popular choice for software development teams.
Key features of GitHub include:
- Version Control: GitHub allows developers to track changes to their code over time, enabling them to revert to previous versions if needed.
- Collaboration: Developers can work together on projects by creating branches, making changes, and merging their code seamlessly.
- Code Review: GitHub facilitates code reviews by providing tools for commenting on specific lines of code, suggesting changes, and discussing proposed changes with team members.
- Project Management: GitHub offers project boards, milestones, and labels to help teams organize and prioritize their work.
- Integration: GitHub integrates with various development tools and services, such as continuous integration/delivery (CI/CD) pipelines, issue trackers, and project management tools.
- Overall, GitHub simplifies the process of collaborating on software development projects, improving productivity and code quality.
Trello as a project management tool
Trello is a web-based project management tool that uses a visual board-and-card metaphor to help teams organize and prioritize their work. It is based on the Kanban methodology and provides a flexible and intuitive way to manage tasks and workflows.
Key features of Trello include:
- Boards: Trello boards represent projects or workflows and can contain multiple lists.
- Lists: Lists represent stages or categories within a project, such as "To Do," "In Progress," and "Done."
- Cards: Cards represent individual tasks or items within a project and can be moved between lists to track progress.
- Labels and Tags: Trello allows users to add labels, tags, or color-coded categories to cards for easy identification and organization.
- Due Dates: Users can set due dates and reminders for individual cards to ensure tasks are completed on time.
- Comments and Attachments: Trello enables collaboration by allowing users to add comments, attachments, checklists, and other information to cards.
- Integrations: Trello integrates with various tools and services, such as Google Drive, Slack, and GitHub, to streamline workflows and enhance productivity.
Overall, Trello provides a simple yet powerful way for teams to manage projects, track progress, and collaborate effectively.
Visual Studio as an IDE
Visual Studio is an integrated development environment (IDE) developed by Microsoft for building software applications. It supports multiple programming languages, including C#, C++, JavaScript, Python, and more, making it a versatile tool for various types of development projects.
Key features of Visual Studio include:
- Code Editor: Visual Studio provides a feature-rich code editor with syntax highlighting, IntelliSense (code completion), and code navigation features to help developers write and edit code efficiently.
- Debugging Tools: Visual Studio offers powerful debugging tools for identifying and fixing errors in code, including breakpoints, watch windows, call stacks, and variable inspection.
- Project Management: Visual Studio allows developers to organize their code into projects and solutions, making it easy to manage dependencies, build configurations, and deployment options.
- Version Control Integration: Visual Studio integrates with version control systems such as Git and Team Foundation Version Control (TFVC), enabling developers to manage code repositories, track changes, and collaborate with team members directly within the IDE.
- Extensibility: Visual Studio supports a rich ecosystem of extensions and add-ons, allowing developers to customize their development environment with additional features, tools, and integrations.
- Cross-platform Development: Visual Studio supports cross-platform development for Windows, macOS, and Linux, enabling developers to build applications for a wide range of platforms and devices.
Overall, Visual Studio provides a comprehensive and feature-rich development environment for building software applications efficiently and effectively.
Watch - 5 Tools/technologies every software engineer needs to know (11:10 minutes)
In this video, Tim discusses the five most important tools for software development. Have you used all 5 tools? Do you agree with his top 5 selection?