static void Main(string[] args)
        {
            Workspace workspace = new Workspace("Financial Risk System", "This is a simple (incomplete) example C4 model based upon the financial risk system architecture kata, which can be found at http://bit.ly/sa4d-risksystem");

            Model.Model model = workspace.Model;

            // create the basic model
            SoftwareSystem financialRiskSystem = model.AddSoftwareSystem(Location.Internal, "Financial Risk System", "Calculates the bank's exposure to risk for product X");

            Person businessUser = model.AddPerson(Location.Internal, "Business User", "A regular business user");

            businessUser.Uses(financialRiskSystem, "Views reports using");

            Person configurationUser = model.AddPerson(Location.Internal, "Configuration User", "A regular business user who can also configure the parameters used in the risk calculations");

            configurationUser.Uses(financialRiskSystem, "Configures parameters using");

            SoftwareSystem tradeDataSystem = model.AddSoftwareSystem(Location.Internal, "Trade Data System", "The system of record for trades of type X");

            financialRiskSystem.Uses(tradeDataSystem, "Gets trade data from");

            SoftwareSystem referenceDataSystem = model.AddSoftwareSystem(Location.Internal, "Reference Data System", "Manages reference data for all counterparties the bank interacts with");

            financialRiskSystem.Uses(referenceDataSystem, "Gets counterparty data from");

            SoftwareSystem emailSystem = model.AddSoftwareSystem(Location.Internal, "E-mail system", "Microsoft Exchange");

            financialRiskSystem.Uses(emailSystem, "Sends a notification that a report is ready to");
            emailSystem.Delivers(businessUser, "Sends a notification that a report is ready to", "E-mail message", InteractionStyle.Asynchronous);

            SoftwareSystem centralMonitoringService = model.AddSoftwareSystem(Location.Internal, "Central Monitoring Service", "The bank-wide monitoring and alerting dashboard");

            financialRiskSystem.Uses(centralMonitoringService, "Sends critical failure alerts to", "SNMP", InteractionStyle.Asynchronous).addTags(AlertTag);

            SoftwareSystem activeDirectory = model.AddSoftwareSystem(Location.Internal, "Active Directory", "Manages users and security roles across the bank");

            financialRiskSystem.Uses(activeDirectory, "Uses for authentication and authorisation");

            /*
             * // create some views
             * ViewSet viewSet = workspace.getViews();
             * SystemContextView contextView = viewSet.createContextView(financialRiskSystem);
             * contextView.addAllSoftwareSystems();
             * contextView.addAllPeople();
             *
             * // tag and style some elements
             * Styles styles = viewSet.getConfiguration().getStyles();
             * financialRiskSystem.addTags("Risk System");
             *
             * styles.addElementStyle(Tags.ELEMENT).color("#ffffff").fontSize(34);
             * styles.addElementStyle("Risk System").background("#550000").color("#ffffff");
             * styles.addElementStyle(Tags.SOFTWARE_SYSTEM).width(650).height(400).background("#801515").shape(Shape.RoundedBox);
             * styles.addElementStyle(Tags.PERSON).width(550).background("#d46a6a").shape(Shape.Person);
             *
             * styles.addRelationshipStyle(Tags.RELATIONSHIP).thickness(4).dashed(false).fontSize(32).width(400);
             * styles.addRelationshipStyle(Tags.SYNCHRONOUS).dashed(false);
             * styles.addRelationshipStyle(Tags.ASYNCHRONOUS).dashed(true);
             * styles.addRelationshipStyle(TAG_ALERT).color("#ff0000");
             *
             * // and upload the model to structurizr.com
             * StructurizrClient structurizrClient = new StructurizrClient("key", "secret");
             * structurizrClient.mergeWorkspace(31, workspace);
             */

            foreach (SoftwareSystem softwareSystem in model.SoftwareSystems)
            {
                System.Console.WriteLine(softwareSystem.ToString());
            }

            foreach (Person person in model.People)
            {
                System.Console.WriteLine(person.ToString());
            }

            foreach (Relationship relationship in model.Relationships)
            {
                System.Console.WriteLine(relationship.ToString());
            }

            System.Console.ReadKey();
        }