Skip to main content

Extend Your Design Through Conversation

๐ŸŽฏLet's extend the design!

In this hands-on trial, you will use the Design Assistant to explore an existing design model, identify what's missing for a new requirement, and extend it โ€” all in plain language, without leaving Workbench.


Before you startโ€‹

Estimated time: 15-20 minutes
What you need: Access to our trial environment.

About your trial environment

Your trial environment includes everything you need to get started: a dedicated, isolated tenant in the IBM DevOps Solution Workbench, and a GitLab instance with repositories for all your projects - including our reference application Roboflow ready for you to explore.

You bring your own IDE and coding assistant โ€” whatever you normally use. In our screenshots throughout these trials we use Visual Studio Code with GitHub Copilot.

Solution Designer
The Solution Designer is your main workspace in Workbench. This is where architecture is modelled, design decisions are captured, and structured context is created for your coding assistant. Your trial comes with a dedicated, isolated tenant. Log in using the credentials from your trial onboarding email.

GitLab
Every project in the Solution Designer is backed by a Git repository in your trial's dedicated GitLab group. Throughout the trial, you usually access GitLab repositories through the Solution Designer since URLs are specific to your tenant.

To find the Repository URL for any project:

  1. Open the project in the Solution Designer
  2. On the Overview page that opens, you'll find "General Information" on the right hand side.
  3. The link under "Acronym" takes you directly to the GitLab repository for that project.
  4. Log into GitLab using the "Keycloak" button.

Cloning a project to work in your own IDE requires a Personal Access Token (PAT). To create one:

  1. Log into your Trial GitLab (using the Keycloak button)
  2. Click your profile icon in the upper right corner and select Preferences
  3. Go to Access โ†’ Personal Access Tokens
  4. Create a token with read_repository, write_repository and api scope

Cloning a project

To clone a project, you can either use the "Code" button in the GitLab UI and copy the "Clone with HTTPS" URL or you can copy the URL directly from the Solution Designer project page. To do this:

  1. Open the project in the Solution Designer
  2. Expand the footer bar that says "Git"
  3. Copy the URL

In both cases, use a terminal and run git clone <URL> -b <optional-branch-name> and use your username and the created PAT as the password when prompted.

Cloning via SSH is disabled in the trial environment for security reasons.

RoboFlow
Your trial environment comes preloaded with RoboFlow โ€” a fictional B2B webshop for robotics parts that serves as the reference application across all trial experiences. Its services are already designed and documented in the Solution Designer, ready for you to explore and build on.


Step 1 โ€” Orient yourselfโ€‹

You are working with the Payment Service of RoboFlow โ€” a fictional B2B webshop for robotics parts that serves as the reference application across all trial experiences. If you are new to the scenario or want a quick overview of the system and its services, expand the section below.

About the RoboFlow reference application

The RoboFlow reference application

The trials in this section are built around RoboFlow โ€” a fictional B2B webshop for robotics parts that serves as the reference application across all trial experiences. If you want to find out about RoboFlow's ambitions and requirements, you can head to the RoboFlow overview page for a quick introduction.

RoboFlow's system is composed of multiple microservices, each designed and documented in the Workbench. The starting point is an architecture project โ€” a high-level view of the system that shows which services exist, how they relate, and what responsibilities they carry. RoboFlow's architecture is modelled using C4 notation, one of the modelling languages IBM DevOps Solution Workbench supports out of the box.

The diagram below is the Container Diagram (Level 2) of the RoboFlow system in the RoboFlow architecture project โ€” one level below the overall system context (L1), showing the individual services and their relationships. You can also open it directly in the Workbench.

RoboFlow Container Diagram

The system includes a WebShop Frontend, a Basket Service, a Checkout Service, a Payment Service, and others. Three services are central to the trials:

  • Checkout Service โ€” orchestrates the checkout flow, applies discounts, and initiates payment
  • Payment Service โ€” handles all payment processing and integrates with external payment providers
  • Gift Card Service โ€” manages gift card balances, validates voucher codes, and tracks redemptions

Each service usually has its own service project in the Workbench โ€” a separate, more detailed specification that defines the service's boundaries, domain model, interfaces, and the architectural decisions that apply to it. This is where the real design work happens.

Explore a serviceโ€‹

As an example, let's look at the Checkout Service.

Open the Payment Service in the Workbench and have a look at the Payment Domain diagram.

โš Important

Make sure you are in the design-assistant branch of the Payment Service. This branch reflects the status of the service after it was reverse engineered from the existing codebase.

The model open in front of you was built from the Payment Service codebase through Workbench's Reverse Engineering feature. Reverse Engineering extracted the model elements and their relationships from the code. The diagram is how an architect arranged and visualized them.



๐Ÿ’กCurious how this model came to be?

In the Turn Existing Code into a Design Model trial, you run Reverse Engineering yourself on the Payment Service's existing codebase โ€” watching model elements appear in Workbench as the MCP agent analyzes the code.


Step 2 โ€” Meet your new requirementโ€‹

Now that you have a sense of the Payment Service's current design, it's time to handle a new requirement. The product owner has asked for a new payment option: RoboFlow shall allow customers to pay with gift card vouchers at checkout.

โ„น๏ธNew Requirement

"Add gift card as a supported payment option."


Before jumping to its implementation, you take the role of the architect and use the Design Assistant to explore what's already in the design, find what's missing, and add it.
Afterwards, the model not only reflects how the service works today, but describes how it should work tomorrow โ€” capturing the new requirement and the decisions and constraints that guide how to extend the service.


Step 3 โ€” Ask the Design Assistant what's already thereโ€‹

Open the Design Assistant in Workbench by clicking the chat icon in the top right.

โ„น๏ธnote

You may notice that the product owner's requirement isn't in the model โ€” there is currently no element type for it in this baseline. The Make Workbench Speak Your Language trial shows how your team can extend the vocabulary so that a product owner can capture their requirements alongside the technical model elements.

In the chat window, ask the Design Assistant a question about the current design:

"How does the Payment Service currently handle different payment methods?"

The assistant answers from what's actually in the model: a single domain service, ExecutePaymentService, with one method per provider โ€” Stripe, PayPal, Invoice โ€” and nothing else attached. No interface, no shared type, no decision record. Just what reverse engineering found in the code.


Step 4 โ€” Find the gapโ€‹

Now ask the Design Assistant about the new requirement:

"If I add gift cards as a new payment method, is there a pattern or interface I should follow?"


The model is consistent with the code: Payments are implemented in Execute Payment. Adding another branch for the new payment method works, but you as the architect know from the running service that this pattern doesn't scale, e.g., rolling back a failed transaction doesn't have a consistent path and leads to duplicated logic across payment providers. So let's document this gap in the model so that future developers and their coding assistants don't have to rediscover it.


Step 5 โ€” Flag it as Tech Debtโ€‹

Tell the Design Assistant:

"Add a Tech Debt note to Execute Payment: 'Payment flow still contains legacy logic โ€” no shared adapter interface.'"


๐ŸŒŸresult

A gap that existed only in the architect's head is now a structured model element, added by surfacing a gap through a conversation with the Design Assistant.


Step 6 โ€” Turn debt into a decisionโ€‹

Workbench lets you attach Design Recipes to model element types โ€” predefined actions that assemble the relevant model context into a ready-made prompt for the Design Assistant. They work the same way the generation skills in other trials work for your coding assistant, except these run inside Workbench, directly on the model rather than on code.

The Tech Debt element type has one attached: Create ADR.

Select the Tech Debt note you just created and open its recipes by clicking the chat icon in the toolbar.


๐ŸŒŸresult

The tech debt note and the architectural decision it led to are now linked in the model โ€” not a note in someone's head, not a Confluence page nobody reads on the next project. The design recipe carried the context forward from the element it was triggered on.

๐Ÿ’กtip

Before moving on, set the ADR status to Accepted in the details panel. The coding assistant picks up ADRs with this status when generating code โ€” so the adapter pattern decision you just made will be followed automatically when someone implements gift card support.


Step 7 โ€” Model the gift card integrationโ€‹

The decision is captured. Now add the integration point that implements it: a RedeemGiftcard REST operation connected to Execute Payment, following the same pattern as the existing provider integrations.

Ask the Design Assistant:

"Add a REST operation called RedeemGiftcard to Execute Payment, following the same pattern as the existing Create PaymentIntent and Process invoice payment operations. It should represent the integration point with the Gift Card Service for redeeming a gift card as part of payment execution."


โ„น๏ธnote

It is not strictly necessary to add the created model elements to the canvas - they exist in the model regardless and can be understood by a Coding Assistant. However, adding them to the diagram makes it easier for a human reader to understand the design and the new requirement.


๐ŸŒŸresult

The requirement is in the design. Not as a ticket in another tool, but as a model element โ€” attached to the service it affects, consistent with how existing integrations are structured, and ready for a coding assistant to work from.


What just happenedโ€‹

You started with a model that reflected what the current code contained, explored the existing design and found what was missing for a new requirement. All through a conversation with the Design Assistant โ€” without leaving Workbench or touching a design file directly.

The model now not only reflects how the Payment Service works today, but describes how it should work tomorrow: the gap is documented, the decision is captured, and the integration point is in place โ€” everything a developer and their coding assistant need before writing a line of code.

You didn't have to write a design document. You asked the model a question, asked a follow-up, and let the answers tell you where the gap was. Then you documented a technical debt, turned that note into a decision, and the decision into structure โ€” three model elements, each generated from the context of the last, without retyping any of it.


Go deeperโ€‹