Design Sessions
Tags: codenewbie, design, webdev
Published: 2023-11-23 07:27:37

Hi everyone! Welcome to my blog! Today I am going to talk about how I learned to do design sessions for a project. Design sessions are very important for planning and developing a software project, but they can also be challenging and intimidating. I used to be a passive participant in design sessions, letting others take the lead. But then I had to step up and lead a design session myself. In this blog post, I will share with you some of the stages of a design session, what you need to prepare, and why it's beneficial to have one.


## What is a design session?

A design session is a collaborative meeting where you and your team discuss the requirements, goals, technologies, architecture, and design of a software project. It's a way to align your vision, brainstorm ideas, identify risks and challenges, and create a roadmap for development. Through these sessions, teams can gain a deeper understanding of the problem at hand, the needs of the end-users, and the scope and features of the project. 



**A design session can help you:**

- Understand the problem and the user's needs
- Choose the best technologies and tools for your project
- Define the scope and features of your project
- Design the user interface and user experience
- Create a high-level architecture and data model
- Estimate the time and resources needed for your project
- Communicate and document your decisions and plans


## Steps of a design session

There is no one-size-fits-all approach to doing a design session, but here are some common steps that you can follow:

**1. Technologies:**

As a team, you need to list down the technologies and their versions that you are going to use for your project. Choosing a technology can be tricky because you have to balance different factors and opinions. Before deciding on which technologies to use make sure you have an understanding of the problem, and what you are trying to achieve. Whatever technology you are going to choose 
do research and see that the different technologies are compatible with each other and have an understanding of how you are going to add security and performance optimization.

_Example: As a frontend developer you might opt to use Angular and NgZorro as a framework. For a backend developer they might decide to use Java, SpringBoot and maybe Kafka if they is need for it._

**2. Databases and servers:**

You need to decide what types of databases and servers you are going to use for your project, and how they will interact with each other. Choosing the right database and servers in a project helps in terms of performance, scalability, functionality, and scalability. This decision should be made carefully based on a thorough understanding of the project requirements and the strengths and weaknesses of available technologies.

_Example: You might use MongoDB as a database, Node.js as a server, and Express as a web framework. MongoDB could align with your goal for a scalable and flexible data storage solution._


**3. Environments:** 
You need to define the different environments that you will use for your project, such as **Development, Testing, Staging, and Production**. You also need to specify how you will deploy and manage your code in each environment, using tools like Git, Docker, and Kubernetes.

_Example: Implement a Git branching strategy to manage code across different environments, fostering collaboration and version control._

**4. Architecture:**
Another thing is the need to design the overall structure and components of your project, using diagrams and models. A tool one can use to design architecture diagrams is [Draw.io](https://app.diagrams.net/). You need to consider how your project will scale, perform, secure, and maintain. You also need to follow best practices and principles, such as modularity, separation of concerns, and SOLID.

_Example: Consider a microservices architecture for modularity, emphasizing separation of concerns and adherence to SOLID principles._

**5. BRD Review:** 
You need to go through the Business Requirements Document (BRD) to get a better understanding of the use cases and scenarios that your project needs to support. You need to validate the assumptions and expectations of your stakeholders and clarify any ambiguities or gaps in the requirements.

_Example: Use scenarios and use cases to map out how your project aligns with the business requirements, ensuring a clear path forward._

**6. Services:**
After going through the BRD, you need to draft out the services that will provide the core functionality of your project. You need to define the inputs, outputs, logic, and dependencies of each service, in the project production you can use tools like Swagger or Postman.

_Example: Use Postman to simulate interactions with your services, ensuring they align with expected behaviors and outputs._

**7. Entities:**

Create entities that encapsulate the essence of your project's data and state. Define attributes, relationships, and validations through tools like ERD or UML. It’s crucial to define entities early on, as it allows front-end developers to begin their work using these agreed-upon entities. Once they receive the endpoints from the backend, integration becomes a straightforward process.

_Example: Leverage UML diagrams to illustrate the relationships between entities, providing a visual guide for developers and stakeholders._

### Challenges Faced:

Design sessions can sometimes be challenging and may encounter obstacles that can hinder the progress of the project. Some potential challenges include:

**1. Conflicting ideas:** When team members have different opinions or ideas, it can be challenging to reach an agreement. This can lead to delays in decision-making and may require additional discussion or compromise.

**2. Lack of clarity:** If the requirements or goals of the project are not clearly defined, it can be difficult to make informed decisions during the design session. This may require additional research or communication with stakeholders to clarify expectations.

**3. Time constraints:** Design sessions require dedicated time and focus from team members. If there are time constraints or competing priorities, it can be challenging to allocate sufficient time for a productive design session.

By being aware of these potential challenges, teams can proactively address them and ensure a smoother design session process.

## Conclusion

These are some of the steps that I followed when I did my first design session. It was not easy, but it was very rewarding. I learned a lot from my teammates, who gave me feedback and suggestions along the way. I also gained more confidence and skills in leading a design session.

I hope you enjoyed this blog post and found it useful. If you have any questions or comments, please feel free to leave them below. Thanks for reading!