1118 words
6 minutes
Software Development Process in Enterprise - Key Concepts and Skills You Need to Become a Professional Developer

Cover image source: Source

Introduction#

Hi, hello everyone. In this first blog post, I would like to share some “professional skills” that I believe are essential to help you work more effectively in an enterprise environment. These are skills that I have accumulated over more than 5 years of working at two product companies, as well as through several personal projects (including freelance work). Okay, without further ado, let’s see what these concepts are.

Software Development Life Cycle - SDLC#

The first concept I want to mention is the Software Development Life Cycle, commonly abbreviated as SDLC. Why do I bring this up first? Because all software companies, from product-based to outsourcing, have one or more software development processes. Each company or team may apply these processes differently, modifying them to suit their organization. However, at the core, a software development process consists of 7 main phases as shown in the image below.

image

1. Analysis & Planning#

Objective of this phase#

This phase is the starting point for any project. The goal is to clearly understand customer requirements, define the project scope, assess feasibility, and plan for the next steps.

You should not just stop at “recording requirements,” but need to dig deeper to identify problems that the customer may not yet be aware of. This is an opportunity for you to act as a consultant rather than just a software engineer.

Challenges in practice#

  • Vague requirements: Customers do not always know exactly what they need, or cannot express it clearly.
  • Constantly changing scope: Especially with large projects, requirements are often added or modified.
  • Resource constraints: Budget, manpower, and time must be considered to ensure feasibility.

Specific tasks you need to do#

  • Gather requirements: Organize meetings with customers and stakeholders. Ask many “why” questions to understand the true motivations.
  • Analyze: Draw data flow diagrams, current processes, and identify bottlenecks.
  • Plan: Break the project into specific phases with clear milestones.

Supporting tools#

  • Jira, Trello: Manage backlog and requirements.
  • Lucidchart, Miro: Draw data flow diagrams or business process diagrams.
  • Confluence: Take notes and share documents among team members.

2. Design & Prototyping#

Objective of this phase#

Design is when you transform business requirements into system architecture and detailed blueprints. This is the “blueprint” that ensures the development team has a clear and consistent direction.

Challenges in practice#

  • Too many technical constraints: Choosing the wrong technology or architecture will lead to difficulties in scaling and maintenance.
  • Lack of consensus: Stakeholders (business, IT) may not agree with the design.

Specific tasks you need to do#

  • System design: Determine the architecture (monolithic, microservices) suitable for the project.
  • Create prototypes: For projects involving user interface elements (UI/UX).
  • Database schema design: Design tables, relationships, and optimal indexes.

Supporting tools#

  • Figma, Adobe XD: UI/UX design.
  • Draw.io, Lucidchart: Draw architecture diagrams or data design.
  • ER/Studio: Database planning.

3. Software Development#

Objective of this phase#

This phase focuses on turning ideas into reality through source code. However, it is not just about writing code, but also ensuring that everything is built with a clear structure, efficiency, and maintainability.

Challenges in practice#

  • System compatibility: Modules must connect and work harmoniously.
  • Maintainability: Code must not only work but also be clean and clear so that others can easily understand it.

Specific tasks you need to do#

  • Follow coding standards: Write readable, maintainable code.
  • Write unit tests: Ensure the stability of each function.
  • Module integration: Work closely with other team members to integrate components together.

Supporting tools#

  • Visual Studio, VS Code: Popular IDEs for .NET development.
  • Git (GitHub, GitLab): Version control.
  • SonarQube: Code quality analysis.

4. Testing#

Objective of this phase#

Testing is not simply about finding bugs. The goal of testing is to ensure the software works as expected, fully meets customer requirements, and operates stably in all situations, even under abnormal conditions.

This phase is not solely the responsibility of testers or QA; all members of the development team must participate to ensure product quality.

Challenges in practice#

  • Insufficient test coverage: Many bugs go undetected due to missing scenarios or incomplete testing.
  • Inconsistent environments: The system works well on the development machine but encounters issues in the actual environment.
  • Unoptimized automation testing: The time and resources needed to write automated test scripts can be greater than expected.

Specific tasks you need to do#

  • Write test cases: Include functional, non-functional test scenarios and edge cases.
  • Unit Testing: Ensure each function or module works correctly.
  • Integration Testing: Ensure system components connect and exchange data accurately.
  • Automation Testing: Speed up testing with frameworks like Selenium, NUnit, or xUnit.
  • Load Testing: Measure the system’s capacity to handle heavy traffic from multiple users.

Supporting tools#

  • Postman, Swagger: API testing.
  • Selenium, Puppeteer: Automated UI testing.
  • xUnit, NUnit: Writing Unit Tests for .NET projects.
  • JMeter: Performance testing.

5. Deployment#

Objective of this phase#

The goal of deployment is to move the software from the development environment to the production environment, where it will be used by actual customers. A good deployment process must be fast, safe, and minimize disruptions to the existing system.

Challenges in practice#

  • Minimizing downtime: Especially with live systems, updates must ensure no disruption to users.
  • Rollback capability: If there is an issue with the update, there must be a plan to quickly revert to the previous version.
  • Environment synchronization: Ensure the deployment environment is identical to the testing environment.

Specific tasks you need to do#

  • Prepare environments: Create staging and production environments with similar configurations.
  • Automate deployment: Use CI/CD tools to minimize manual errors.
  • Post-deployment monitoring: Ensure the system operates stably and quickly address any issues that arise.
  • Rollback plans: Create detailed plans to revert to the previous version if errors occur.

Supporting tools#

  • Azure DevOps, GitHub Actions: CI/CD pipeline support.
  • Docker, Kubernetes: Container deployment and management.
  • Terraform: Infrastructure management automation.
  • Datadog, ELK Stack: Post-deployment monitoring and log analysis.

6. Operations & Maintenance#

Objective of this phase#

Software does not end at the point of deployment. The goal of the operations and maintenance phase is to maintain stability, handle emerging bugs, and continuously improve the product based on user feedback.

Challenges in practice#

  • Unexpected bugs: Some bugs only appear when the system runs at large scale or encounters real-world data.
  • Change requests: Customers often request additional features or modifications to meet new business needs.
  • Ensuring security: Security vulnerabilities need to be detected and addressed promptly to avoid risks.

Specific tasks you need to do#

  • System monitoring: Track performance, logs, and errors during operation.
  • Security updates: Patch vulnerabilities or upgrade technology to enhance safety.
  • User support: Respond to technical support requests from customers or the operations team.
  • Optimization: Improve performance or fix bugs based on real-world feedback.

Supporting tools#

  • Grafana, Kibana: System performance and log monitoring.
  • Azure Monitor, New Relic: Application performance tracking.
  • Jira Service Desk: Support request management.
  • Dependabot: Automatic dependency updates in the project.

Conclusion#

The software development process is not just a series of steps, but an entire tightly interconnected work ecosystem that requires collaboration among all roles within the team. Whether you are a developer, QA, or software architect, understanding each phase of the SDLC will help you work more effectively, and most importantly, create sustainable value for the product and organization. I hope this article has provided you with useful information. If you have any questions or contributions, feel free to leave a comment!

Software Development Process in Enterprise - Key Concepts and Skills You Need to Become a Professional Developer
https://www.devwithshawn.com/en/posts/softwaredeveloper-en/
Author
PDXuan(Shawn)
Published at
2024-11-11
Share: