Category: publication

  • Bridging Non-Technical and Technical Teams with Custom Modeling Languages: An E-Commerce Case Study

    FromProductToSolution_DallE_20240922

    In today’s fast-paced business environment, the synergy between non-technical (product) and technical teams is more crucial than ever. Yet, these teams often find themselves speaking different languages, leading to misunderstandings and project delays. How can organizations bridge this gap to foster better communication and collaboration?

    One effective approach is the use of custom modeling languages that incorporate concepts understood by both parties. By focusing on shared language elements and tracing ideas from rough concepts to detailed designs, teams can work more cohesively. This article explores how custom modeling languages centered around system objects, structure, and behavior can unite product and technical teams, using an e-commerce system as an example.

    The Power of Custom Modeling Languages

    Custom modeling languages serve as a common platform where both non-technical and technical teams can articulate and visualize system requirements and designs. These languages use intersecting concepts that are familiar to all stakeholders, facilitating clearer communication and reducing the risk of misunderstandings.

    Key Concepts:

    • System Objects: Fundamental elements that represent real-world entities within the system.
    • Structure: How system objects are organized, represented by product and solution blocks.
    • Behavior: How system objects act and interact, depicted through product and solution use cases.

    Intersecting Language Concepts

    System Objects with Structure and Behavior

    At the core of any system are the system objects, which possess both structure and behavior. By defining these objects, teams create a foundation that both sides understand.

    • Structure: Represents the static aspects—how components are organized.
    • Behavior: Represents the dynamic aspects—how components interact over time.

    Structure: Product and Solution Blocks

    • Product Blocks: High-level components that define what the system should do from a business perspective. For example, in an e-commerce system, this could be the “Shopping Cart” or “Product Catalog.”
    • Solution Blocks: Technical components that detail how the system will achieve the product requirements. This includes databases, servers, and application layers.

    Behavior: Product and Solution Use Cases

    • Product Use Cases: Scenarios that describe user interactions with the system, such as “Place an Order” or “Search for a Product.”
    • Solution Use Cases: Technical workflows that support product use cases, like “Process Payment Transaction” or “Update Inventory Database.”

    Product Level Modeling in an E-Commerce System

    At the product level, modeling focuses on capturing the business requirements and user interactions.

    Example: Customer Journey

    1. Browse Products: The customer explores the product catalog.
    2. Add to Cart: The customer selects items to purchase.
    3. Checkout: The customer provides payment and shipping information.
    4. Order Confirmation: The system confirms the order and provides tracking details.

    By mapping out these product use cases, non-technical teams can convey their needs clearly to technical teams.

    Solution Level Modeling

    At the solution level, the modeling becomes more detailed, incorporating components, classes, and methods that technical teams use to build the system.

    Example: Processing an Order

    1. Order Component: Manages order data and interactions.
      • ClassesOrderOrderItemPaymentDetails
      • MethodsvalidateOrder()processPayment()updateInventory()
    2. User Component: Handles user authentication and profiles.
      • ClassesUserAddressAuthentication
      • Methodslogin()logout()updateProfile()

    By aligning these solution blocks with the product blocks, technical teams can ensure they are meeting the business requirements.

    Tracing Ideas from Concept to Design

    The intersecting concepts allow for seamless tracing of requirements from initial ideas to detailed technical designs.

    • From Product Use Cases to Solution Use Cases: Each product scenario is linked to technical workflows.
    • From Product Blocks to Solution Components: Business components are mapped to their technical counterparts.
    • From System Objects to Classes and Methods: Objects defined at the product level are translated into classes and methods in the codebase.

    This traceability ensures that both teams are aligned throughout the project lifecycle.

    Applying the Toolkit Strategies

    To further enhance collaboration, organizations can implement several strategies:

    Bridge Gaps

    Use the shared modeling language to facilitate communication. Regular meetings to discuss models can help both teams stay aligned.

    Discussion with business stakeholders should be done based on the product modeling language while discussion with technical stakeholders should be done based on the solution modeling language. Intersecting discussions may focus on the transition from product to solution modeling to ensure that the business requirements are translated into technical requirements.

    Empathize More

    Encourage team members to understand each other’s perspectives. Non-technical staff can attend technical walkthroughs, while technical staff can participate in business requirement sessions.

    Define Roles

    Clearly outline who is responsible for each part of the modeling and solution process. This clarity prevents overlaps and confusion.

    E. g. a product owner is responsible for the product aspects of the system, while a solution owner is responsible for the solution modeling. That means that the former is also responsible for product use cases and product blocks, while the latter is also responsible for solution use cases and solution blocks.

    Foster Respect

    Acknowledge the expertise each team brings. Celebrate successes jointly to build mutual respect.

    Create Liaisons

    Appoint team members who are fluent in both product and technical aspects. These liaisons can translate and mediate between teams.

    Continuous Learning

    Promote ongoing education. Workshops and cross-training sessions can help team members appreciate the challenges and workflows of their counterparts.

    Conclusion

    Bridging the gap between non-technical and technical teams is not just about better communication — it’s about creating a cohesive environment where ideas flow seamlessly from concept to implementation. Custom modeling languages that use shared concepts like system objects, structure, and behavior can play a pivotal role in this process.

    By applying these principles and fostering a culture of empathy and continuous learning, organizations can enhance collaboration, drive innovation, and adapt more quickly to market demands. The e-commerce example illustrates how these concepts can be practically applied, but the approach is versatile enough to benefit projects across various industries.

    Future Enhancements and Sophistication

    While the toolkit provides a solid foundation for bridging product and technical teams, there’s room for further sophistication.

    At the product level, more detailed requirements modeling could be introduced, incorporating user stories, acceptance criteria, and business rules. Similarly, at the solution level, technical modeling could be expanded to include architectural patterns, data models, and API specifications.

    Underneath the solution level, additional layers of abstraction could be added, such as infrastructure modeling for cloud deployments or performance modeling for optimization.

    Moreover, extending the language concepts to include roles and interactions would provide a richer context for system behavior. Roles could represent different user types or system actors, while interactions could model the complex relationships between system components.

    These enhancements would create an even more comprehensive toolkit, enabling teams to model and communicate increasingly complex systems with greater precision and clarity.

    Final Annotations on how to use AI to Answer Questions

    My personal goal for this article was to answer a call for a LinkedIn advice question (https://www.linkedin.com/advice/0/what-do-you-technical-non-technical-teams-clash-obaif) in no time by involving AI. It turned out not to be that easy this time. Most of the time was spent checking the result and tweaking the prompt half a dozen times to improve it. The reason seems to be in the complexity of the request and the need to adapt to the limitations of the AI by playing with two abstraction levels and also taking into account my personal experience in various projects. The situation should improve with increasing personal knowledge base accessible by the AI.

    Used approach

    • Copy LinkedIn article into Cursor AI (https://www.cursor.com/) as separate markdown file (can be improved avoiding copying every single section)
    • Create a prompt in Cursor AI in yet another file
    • Use chat in Cursor AI (well, half a dozen iterations) and save result in yet another markdown file
    • Manually improve the result with selective changes directly in Cursor AI (select text, Ctrl-K, command).

    A beautiful side effect is that the sections are answered in a connected way and not separated from each other. I hope this can be helpful for you as well. Thank you for reading and forgive me not having spent more time on a perfectly generated image.

  • Staying Afloat in Software Development: A Comprehensive Toolkit for Managing Deadlines and Tasks

    ToolkitSoftwareDevelopment-eye-catcher_chatgpt4o_20240921
    ToolkitSoftwareDevelopment-eye-catcher_chatgpt4o_20240921

    In the fast-paced world of Software Development, it’s easy to feel overwhelmed by looming deadlines, complex projects, and the constant need to learn new technologies. The good news is that there are tools and techniques designed to help you navigate these challenges efficiently. By integrating time management strategies like time boxing with Clockodo, leveraging task and issue management in Confluence and Jira, utilizing code management with GitHub, enhancing communication through Microsoft Teams and email, expanding knowledge via online learning platforms, and automating workflows with tool integrations and Jenkins, you can transform chaos into productivity.


    Time Management with Time Boxing and Clockodo

    Effective time management is the cornerstone of productivity. One proven technique is time boxing, where you allocate fixed time periods to tasks, helping you maintain focus and prevent scope creep. Clockodo complements this approach by providing a time-tracking solution that allows you to monitor how you spend each time box. With Clockodo, you can:

    • Set Time Blocks: Define specific periods for tasks and track the actual time spent.
    • Analyze Productivity: Generate reports to identify patterns and optimize your schedule.
    • Do Accounting: Use report to list your billable time boxes.

    By combining time boxing with Clockodo, you create a disciplined environment that enhances focus and productivity.


    Project and Task Management with Confluence and Jira

    Managing complex projects requires robust tools that provide clarity and collaboration. Confluence serves as a centralized platform for documentation and knowledge sharing, while Jira excels in issue and task management.

    In Confluence:

    • Document Everything: Create project pages, meeting notes, and technical documentation.
    • Collaborate Seamlessly: Share insights with team members and gather feedback in real-time.
    • Organize Knowledge: Use hierarchical structures to keep information accessible and organized.

    In Jira:

    • Track Issues: Log bugs, feature requests, and tasks with detailed descriptions.
    • Visualize Progress: Use Kanban boards and dashboards to monitor the status of tasks.
    • Document per Scope: Use links to Confluence pages for extensive temporary as well as sustainable documentation being relevant in the context of the issue.

    Integrating Confluence and Jira ensures that your project management is both comprehensive and cohesive, facilitating better team coordination and project visibility.


    Code Management with GitHub

    In Software Development, code is your craft, and managing it efficiently is vital. GitHub offers a powerful platform for version control and collaboration.

    • Version Control: Keep track of code changes over time, enabling you to revert to previous states if needed.
    • Collaboration: Work with others through branches and pull requests, streamlining code reviews and integrations.
    • Issue-oriented Progress: Link Jira issues to dedicated branches, focusing on code changes relevant for such issues.

    By leveraging GitHub, you maintain code integrity, encourage collaborative development, and align coding efforts with project objectives.

    Confluence does only support history of pages, though, but not branches. If you need to branch your documentation you might look for alternatives like markdown in GitHub or publication of content from a modeling tool like MagicDraw to Confluence.


    Communication with Microsoft Teams and Email

    Clear and timely communication is essential, especially when collaborating remotely or across different teams. Microsoft Teams and traditional email remain indispensable tools.

    With Microsoft Teams:

    • Real-Time Communication: Chat with team members, initiate video calls, and conduct meetings.
    • File Sharing: Share documents and collaborate on files within the platform.
    • Integration: Connect with other tools like Jira and Confluence for streamlined workflows.

    With Email:

    • Formal Communication: Send detailed updates, reports, and official correspondence.
    • Documentation: Maintain records of communications for future reference.

    Utilizing both Teams and email ensures that you can communicate effectively in various contexts, keeping everyone informed and engaged.


    Automation with Tool Integration and Jenkins

    Automation is a game-changer in managing repetitive tasks and ensuring consistency. Jenkins, a leading automation server, enables continuous integration and continuous delivery (CI/CD) pipelines.

    • Automate Builds: Compile and test code automatically upon changes.
    • Integrate Tools: Connect Jenkins with GitHub, Jira, and other tools to create seamless workflows.
    • Monitor Processes: Receive notifications on build statuses and deployments.

    By automating tasks with Jenkins and integrating your toolset, you free up time to focus on more complex problem-solving and innovation.

    The more integration functions you have, the more powerful automation will become. E. g. you could imagine to have an implementation that not only integrates Jira into a modeling tool like MagicDraw, but also publishes model content to Confluence establishing a journey from issue via modeling to documentation. And then imagine what you could do with extending this to generate tests from model content to Jira tests or even execute these tests.


    Continuous Learning with Online Platforms and Sharpening your Knifes

    The field of Software Development is ever-evolving. Staying current requires continuous learning, which is facilitated by online platforms like Coursera, Udemy, and LinkedIn Learning.

    • Flexible Learning: Access courses that fit your schedule and learning pace.
    • Diverse Topics: Explore subjects ranging from programming languages to project management.
    • Community Support: Engage with peers and instructors to enhance understanding.

    By dedicating time to learning, you not only keep your skills sharp but also open doors to innovative solutions and ideas.

    You should also keep your knifes sharp meaning that you should regularly improve your tool set including those typically many little productivity helpers and integration snippets between tools. Over time you will get a powerful integrated toolkit.


    Conclusion

    The synergy of these tools and techniques creates a powerful ecosystem for managing your Software Development projects:

    1. Plan and Track Time: Use time boxing and Clockodo to allocate and monitor your time effectively.
    2. Manage Projects and Tasks: Leverage Confluence and Jira for comprehensive project oversight.
    3. Control and Collaborate on Code: Utilize GitHub for robust version control and collaborative coding.
    4. Communicate Effectively: Keep everyone aligned through Microsoft Teams and email.
    5. Automate Workflows: Implement Jenkins to automate processes and integrate tools.
    6. Continue Learning: Expand your knowledge and skills via online learning platforms.

    By adopting this integrated approach, you transform overwhelming workloads into manageable, efficient processes. Not only do you stay afloat amid deadlines and tasks, but you also set the stage for excellence and innovation in your work not to mention the boost in quality of your deliverables.

    Navigating the complexities of Software Development doesn’t have to be a solitary struggle against time and tasks. By harnessing the power of these specialized tools and strategies, you equip yourself with a robust framework that promotes productivity, collaboration, and continuous improvement. Embrace this comprehensive toolkit, and you’ll find yourself not just staying afloat, but confidently steering towards success.

    Finally, I would like to add that my personal goal for this article was to answer a call for a LinkeIn advice question in no time (https://www.linkedin.com/advice/3/youre-drowning-deadlines-tasks-computer-science-mfa1f). It typically contains half a dozen sections with bullet points. I found that it is much easier for me to write an article like this using ChatGPT-o1 and manually improving the result with selective changes using Cursor AI (https://www.cursor.com/). A beautiful side effect is that the sections are answered in a connected way and not separated from each other. I hope this can be helpful for you as well. Thank you for reading and forgive me not having spent more time on a perfectly generated image.

  • Will MBSE Benefit from Textual Notation?

    Model-Based Systems Engineering (MBSE) is evolving, and a key question arises: Will MBSE benefit from textual notation? The answer is a resounding yes, but it is not the whole story. Graphical representations and much more are still needed. Here’s why.

    Textual Notation as a Complementary Tool

    Textual notation is already a fundamental aspect of many basic modeling tools. Languages like PlantUML and Mermaid derive graphical representations from textual descriptions, making it easier for engineers to visualize their models. Similarly, domain-specific languages (DSLs) like Franca IDL being integrated into modeling tools like MagicDraw have proven effective. These tools allow users to either code or draw, integrating seamlessly with other model content, providing flexibility and ease of use.

    The Emergence of Two-Way Solutions

    Advanced tools are taking this integration further. For instance, sophisticated tools like MagicDraw now offer two-way translations between SysML v2 textual notation and graphical representations. This functionality allows for editing on both sides, akin to how markdown plugins work in VSCode. Such advancements are critical as they cater to both textual and graphical preferences, ensuring broader acceptance and usability.

    Bridging the Gap Between Coders and Modelers

    Textual notations are particularly appealing to those who are closer to coding. For coders, the familiarity of textual input can significantly lower the barrier to entry into the modeling world. Integrating textual notations into Integrated Development Environments (IDEs) where coding happens can streamline workflows and enhance productivity.

    However, for managers, architects, designers, and analysts, graphical representations, output management, and comprehensive lists consistent with models are crucial. Therefore, to effectively engage both technical and non-technical stakeholders, providing a combination of textual notations and corresponding graphical representations is essential.

    Addressing Broader Needs

    Reflecting on over a decade of experience in automotive projects, it is clear that MBSE must address a range of needs to be truly successful and widely accepted. Models must encompass various aspects such as cross-product, cross-solution, product solutions, functional modeling, system architecture, software architecture, and boardnet modeling.

    Additionally, the existing model content in UML and SysML v1 predominantly features graphical representations. Transitioning to textual notations won’t happen overnight. The need for tool integration is paramount. The enterprise environment is a complex network of tools for planning, requirements, system modeling, simulation, test management, and implementation. Tool content is often replicated between neighboring tools or linked, necessitating seamless integration.

    Machine-Readable Models and Analytics

    Models that are not machine-readable are essentially ineffective, serving only as “marketing” diagrams. Ensuring that models are machine-readable and providing model analytics, such as making model content available to tools like Tableau, is highly valued by business users.

    Conclusion

    In conclusion, textual representation like SysML v2 is foundational and will significantly benefit MBSE. However, it must complement diagramming and address other critical needs to be truly effective. The standards are in place, and now it’s time for the tool business to catch up. By embracing both textual and graphical representations, and addressing the diverse needs of stakeholders, MBSE can achieve greater acceptance and success.

  • Umsetzung von Lean Quality Management

    #modeling #testing #generation #integration

    (Quelle: Drei Stossrichtungen für die Umsetzung von Lean Quality Management, Stefan Jobst, German Testing Magazin, Ausgabe 02/2020)

    In einer Zeit, in der die Beschleunigung der Entwicklungs- und Release-Zyklen für viele Bereiche des Business zu einem entscheidenden Wettbewerbsfaktor geworden ist, wird das altbekannte Dilemma zwischen Geschwindigkeit und Qualität weiter auf die Spitze getrieben. Mit ganzheitlichen Herangehensweisen zur Umsetzung von Continuous Delivery hat sich hier im Softwareentwicklungsprozess im vergangenen Jahrzehnt mit der Nutzung von DevOps-Ansätzen bereits einiges getan.

    Automatisierte Erstellung von Testfällen

    Ein Teil des Artikels beschäftigt sich mit der automatisierten Erstellung von Testfällen und verweist auf meinen Artikel Model-Driven Test Generation with VelociRator.

    Nachfolgende Abbildung veranschaulicht die Rundreise mit ihren Phasen rund um involvierte Tools zu den Disziplinen Requirement Management, Requirement Engineering, Output Management und Test Management.

    Rundreise von Epic zu Test

    Weiter zur detaillierten Beschreibung.

  • Model-Driven Test Generation with VelociRator

    #modeling #testing #generation #integration

    (excerpt in German available as part of article on Lean Quality Management in German Testing Magazin)

    Abstract

    Concept, code, and tests tend to drift apart in larger or longer running projects. A lot of time and money is wasted to keep them aligned and yet to a bad degree. With agile working models and higher frequency of deployment cycles this gets even worse.

    Two main reasons are identified:

    1. hands-on working style with insufficiently connected tools
    2. missing refactoring capability for concepts and tests (compared to code where we have learned to love powerful IDEs)

    In order to keep concept and code aligned I have presented model-driven system documentation in 2018, see Ni2018 in Publications.

    Today I will present model-driven test generation extending that successful alignment even further.

    After having motivated model-driven test generation, I will present a little journey that many of us work with, probably on a daily basis. I will start with an epic, manually created by some Product Owner in a well known tracking tool named Jira. Via interface this epic is pushed to a system model in MagicDraw. There, a business analyst describes the impact of the epic on already existing use cases. Then, VelociRator, the model-driven test generator, produces tests from modeled behavior. These tests are finally pushed back to Jira and linked to the initial epic closing the loop with a neat test coverage on the epic. 

    An outlook on model-driven test generation for automation will give a hint on how to combine test generation and test automation. Finally, I will conclude with why model-driven test generation saved our back during COVID-19.

    How does it work?

    The following figure shows the journey in phases around involved tools in the middle.

    Now, let’s repeat the quick journey taken above with a more detail.

    Define

    As PO I create a new issue like an epic in Jira. Let’s name it “Improve CDM and Lead Management”.

    Example epic

    Initially, the test coverage is empty. After assigning the issue to the team or some analyst of a team, the epic is pulled into a model.

    Analyse

    The model is our digital twin of the system under design. It contains system use cases describing the logical interaction of users with the system for a set of scenarios.

    Impact analysis, minimal version

    The analyst identifies which of our use cases are impacted by the new requirement by drawing dependencies from the use cases to the issue.

    Optionally, it is also possible to use change elements documenting what has to be changed and why.

    Design

    Next step is to dive into impacted use cases and change these accordingly.

    Example for a workflow given by an activity diagram

    The designer checks the steps in the workflow with associated rules, documentation, and expected results. Since testers, designers, and developers do their work based on those workflows, all relevant information is documented here. To the upper left we have highlighted a few steps so that we can easily find them in generated tests lateron.

    In addition, but not technically necessary, it is also possible to document the external view as some kind of micro architecture per use case.

    Example for external view – use case architecture

    Configure Tests

    Next, the tester configures the tests inside the model by providing values to test parameters of selected test paths.

    Example test configurations

    Each row is a test configuration and has name and documentation. All other columns represent test parameters like Account, CustomerType, and so on. When the test generator is switched on, it picks each selected test path and generates a test for each row.

    Test

    Back in Jira, the tester selects a generated test like the following.

    Example for test in Jira, extract, details omitted

    The name of the test is constructed from the name of the use case, the chosen alternative (ALT no fit), and the selected test configuration (person1). As part of its description you get a compact use case scenario. You also get full test details including test data and expected results per step.

    Closing the Loop

    Since the generated tests can be automatically linked to the originating epic, you also get a predefined test coverage.

    Example for test coverage

    If the tester now chooses to execute one or all of the tests, their results will be immediately reflected in the test coverage. Therefore, the PO can easily follow progress, too.

    Presentation

    See presentation below