diff --git a/images/solution-design.png b/images/solution-design.png index 4b7450b4a..c3e317398 100644 Binary files a/images/solution-design.png and b/images/solution-design.png differ diff --git a/project/solution-design-map.json b/project/solution-design-map.json index 6a11296bc..62026264e 100644 --- a/project/solution-design-map.json +++ b/project/solution-design-map.json @@ -1 +1 @@ -{"mockup":{"controls":{"control":[{"ID":"0","measuredH":"40","measuredW":"236","properties":{"bold":"true","size":"32","text":"Solution Design"},"typeID":"Label","x":"242","y":"170","zOrder":"17"},{"ID":"1","h":"71","measuredH":"70","measuredW":"12","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":6,"x":6,"y":0},"p1":{"length":0.533966429538699,"x":0.5214417744916817,"y":-0.11497227356746768},"p2":{"length":71.02112361825881,"x":12,"y":70},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"13","x":"307","y":"83","zOrder":"18"},{"ID":"2","h":"110","measuredH":"109","measuredW":"42","properties":{"color":"2848996","curvature":"-1","direction":"bottom","leftArrow":"false","p0":{"x":38,"y":0},"p1":{"x":0.4416543574593796,"y":0.1496799606105367},"p2":{"x":0,"y":109},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"43","x":"308","y":"220","zOrder":"8"},{"ID":"5","h":"71","measuredH":"140","measuredW":"200","properties":{"color":"16776960"},"typeID":"TextArea","w":"742","x":"94","y":"282","zOrder":"19"},{"ID":"6","measuredH":"25","measuredW":"255","properties":{"bold":"true","size":"17","text":"Learn how to state the problem"},"typeID":"Label","x":"142","y":"294","zOrder":"20"},{"ID":"7","measuredH":"24","measuredW":"24","properties":{"color":"10027263","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"108","y":"294","zOrder":"21"},{"ID":"8","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"1"},"typeID":"Label","x":"116","y":"296","zOrder":"22"},{"ID":"9","measuredH":"25","measuredW":"670","properties":{"size":"17","text":"Understanding the problem and the expectations is key for the success of your design"},"typeID":"Label","x":"141","y":"318","zOrder":"23"},{"ID":"28","h":"88","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"291","y":"496","zOrder":"24"},{"ID":"29","measuredH":"25","measuredW":"628","properties":{"bold":"true","size":"17","text":"Gather and prioritise functional requirements as well as envisioned evolutions"},"typeID":"Label","x":"339","y":"508","zOrder":"25"},{"ID":"30","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"305","y":"508","zOrder":"26"},{"ID":"31","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"b"},"typeID":"Label","x":"313","y":"510","zOrder":"27"},{"ID":"34","h":"45","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"* What are the features to deliver? Short-term? Mid-term? Long-term?\n* What's the priority of every feature compared to the others?"},"typeID":"Paragraph","w":"580","x":"319","y":"533","zOrder":"28"},{"ID":"39","h":"231","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"292","y":"600","zOrder":"29"},{"ID":"40","measuredH":"25","measuredW":"291","properties":{"bold":"true","size":"17","text":"Gather non-functional requirements"},"typeID":"Label","x":"340","y":"612","zOrder":"30"},{"ID":"41","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"306","y":"612","zOrder":"31"},{"ID":"42","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"c"},"typeID":"Label","x":"314","y":"614","zOrder":"32"},{"ID":"43","h":"200","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"* How accessible should it be?\n* How performant should it be?\n* How scalable should it be (vertical vs horizontal scalability)?\n* How secure should it be?\n* How mature should it be (documentation, ecosystem, community, etc.)?\n* Does it need to be integrated with existing assets?\n* Does it need to comply with a standard technology stack?\n* Are there any constraints regarding the licensing model?\n* Are there off-the-shelf solutions available at an acceptable price (build vs buy)?"},"typeID":"Paragraph","w":"655","x":"320","y":"637","zOrder":"33"},{"ID":"48","h":"112","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"291","y":"369","zOrder":"34"},{"ID":"49","measuredH":"25","measuredW":"521","properties":{"bold":"true","size":"17","text":"Learn the business domain by talking to subject-matter experts"},"typeID":"Label","w":"849","x":"340","y":"381","zOrder":"35"},{"ID":"50","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"305","y":"381","zOrder":"36"},{"ID":"51","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"a"},"typeID":"Label","w":"11","x":"314","y":"382","zOrder":"37"},{"ID":"53","h":"69","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"* Define a ubiquitous language that is shared by all the stakeholders.\n* This step is typically more relevant for business problems of a larger scale.\n* Skip this step if you need to solve a technical problem within a very clear scope."},"typeID":"Paragraph","w":"815","x":"329","y":"406","zOrder":"38"},{"ID":"54","measuredH":"32","measuredW":"253","properties":{"align":"center","color":"16776960","size":"18","text":"Domain-Driven Design (DDD)"},"typeID":"TextInput","w":"396","x":"1203","y":"369","zOrder":"39"},{"ID":"59","measuredH":"32","measuredW":"374","properties":{"align":"center","color":"16770457","size":"18","text":"Backlog definition & prioritisation techniques"},"typeID":"TextInput","w":"395","x":"1203","y":"464","zOrder":"40"},{"ID":"60","measuredH":"32","measuredW":"357","properties":{"align":"center","color":"16770457","size":"18","text":"Facilitation techniques for agile workshops"},"typeID":"TextInput","w":"397","x":"1203","y":"416","zOrder":"41"},{"ID":"62","h":"180","measuredH":"140","measuredW":"200","properties":{"color":"16770457"},"typeID":"TextArea","w":"677","x":"707","y":"89","zOrder":"42"},{"ID":"63","measuredH":"25","measuredW":"640","properties":{"bold":"true","size":"17","text":"*Software engineering is about solving problems of different scales and natures*"},"typeID":"Label","w":"651","x":"727","y":"101","zOrder":"43"},{"ID":"66","h":"137","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"* _As a Product Owner, I want you to plug a date picker in my app_\n* _As a Product Owner, I want you to translate my app in multiple languages_\n* _As a Product Owner, I want to have analytics about how my app is used_\n* _As a CTO, I want you to recommend a new frontend development framework_\n* _As a new customer, I want you to implement an app to boost my business_\n* _etc._"},"typeID":"Paragraph","w":"655","x":"707","y":"132","zOrder":"44"},{"ID":"67","h":"41","measuredH":"40","measuredW":"233","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"length":234.44615586526473,"x":233,"y":26},"p1":{"length":0.4167062781330246,"x":0.395558410571717,"y":-0.13106359548499588},"p2":{"length":40,"x":0,"y":40},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"234","x":"485","y":"151","zOrder":"16"},{"ID":"69","h":"71","measuredH":"140","measuredW":"200","properties":{"color":"16776960"},"typeID":"TextArea","w":"870","x":"46","y":"1143","zOrder":"45"},{"ID":"70","measuredH":"25","measuredW":"247","properties":{"bold":"true","size":"17","text":"Learn how to design a solution"},"typeID":"Label","x":"94","y":"1155","zOrder":"46"},{"ID":"71","measuredH":"24","measuredW":"24","properties":{"color":"10027263","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"60","y":"1155","zOrder":"47"},{"ID":"72","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"2"},"typeID":"Label","x":"68","y":"1157","zOrder":"48"},{"ID":"73","measuredH":"25","measuredW":"816","properties":{"size":"17","text":"Keep in mind that every solution has pros and cons, there is no silver bullet! Compare multiple alternatives."},"typeID":"Label","x":"93","y":"1179","zOrder":"49"},{"ID":"74","h":"527","measuredH":"526","measuredW":"245","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"x":245,"y":0},"p1":{"x":0.6912923752936063,"y":-0.3356793752134842},"p2":{"x":151,"y":526},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"246","x":"63","y":"328","zOrder":"9"},{"ID":"76","measuredH":"32","measuredW":"111","properties":{"align":"center","color":"16770457","size":"18","text":"UI Mockups"},"typeID":"TextInput","w":"227","x":"312","y":"1410","zOrder":"80"},{"ID":"77","measuredH":"32","measuredW":"89","properties":{"align":"center","color":"16770457","size":"18","text":"Balsamiq"},"typeID":"TextInput","w":"228","x":"312","y":"1458","zOrder":"50"},{"ID":"78","measuredH":"32","measuredW":"70","properties":{"align":"center","color":"16770457","size":"18","text":"Sketch"},"typeID":"TextInput","w":"228","x":"312","y":"1506","zOrder":"51"},{"ID":"79","measuredH":"32","measuredW":"107","properties":{"align":"center","color":"16770457","size":"18","text":"Marvel App"},"typeID":"TextInput","w":"228","x":"312","y":"1554","zOrder":"81"},{"ID":"83","h":"195","measuredH":"140","measuredW":"200","properties":{"color":"16776960"},"typeID":"TextArea","w":"680","x":"108","y":"847","zOrder":"52"},{"ID":"84","measuredH":"25","measuredW":"114","properties":{"bold":"true","size":"17","text":"Do it yourself!"},"typeID":"Label","x":"116","y":"859","zOrder":"53"},{"ID":"88","h":"158","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"List both the functional and the non-functional requirements for the following problem: \n\t\n\t_As a Product Owner, I want you to translate my app in multiple languages_\n \nIt may seem simple but you would be surprised how far such a simple requirement can bring you: think about string interpolation, about the format of dates and numbers, about the currency symbols, about right to left languages, etc."},"typeID":"Paragraph","w":"664","x":"116","y":"884","zOrder":"54"},{"ID":"89","h":"296","measuredH":"295","measuredW":"283","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":354.17650966714325,"x":196,"y":295},"p1":{"length":0.41989756409609025,"x":0.18774563340534592,"y":-0.37558692931338233},"p2":{"length":0,"x":0,"y":0},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"284","x":"214","y":"855","zOrder":"10"},{"ID":"93","h":"132","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"895","x":"292","y":"1805","zOrder":"55"},{"ID":"94","measuredH":"25","measuredW":"692","properties":{"bold":"true","size":"17","text":"Confront each alternative to both the functional and the non-functional requirements"},"typeID":"Label","w":"849","x":"341","y":"1817","zOrder":"56"},{"ID":"95","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"306","y":"1817","zOrder":"57"},{"ID":"96","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"b"},"typeID":"Label","w":"11","x":"315","y":"1818","zOrder":"58"},{"ID":"97","h":"83","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"A good way to summarise your analysis is to create a matrix whose lines are the requirements you identified and whose columns are the solutions you designed. Each cell can then be colored in green, orange or red, depending on whether the solutions fulfills the corresponding requirement fully, partially or not at all. "},"typeID":"Paragraph","w":"815","x":"330","y":"1842","zOrder":"59"},{"ID":"98","h":"73","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"292","y":"1951","zOrder":"60"},{"ID":"99","measuredH":"25","measuredW":"829","properties":{"bold":"true","size":"17","text":"Frequently ask multiple stakeholders to review and validate or invalidate your assumptions and choices"},"typeID":"Label","w":"849","x":"341","y":"1963","zOrder":"61"},{"ID":"100","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"306","y":"1963","zOrder":"62"},{"ID":"101","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"c"},"typeID":"Label","w":"11","x":"315","y":"1964","zOrder":"63"},{"ID":"102","h":"28","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"Use their feedback to refine your definition of the problem (step 1). Make it an iterative process!"},"typeID":"Paragraph","w":"815","x":"342","y":"1988","zOrder":"64"},{"ID":"104","h":"297","measuredH":"140","measuredW":"200","properties":{"color":"16776960","text":""},"typeID":"TextArea","w":"1484","x":"116","y":"2042","zOrder":"65"},{"ID":"105","measuredH":"25","measuredW":"114","properties":{"bold":"true","size":"17","text":"Do it yourself!"},"typeID":"Label","x":"124","y":"2054","zOrder":"66"},{"ID":"106","h":"250","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"Let's come back to the previous problem:\n\t\n\t_As a Product Owner, I want you to translate my app in multiple languages_\n \n* Find one or preferably multiple off-the-shelf internationalisation (i18n) libraries which are compatible with the technology that you use.\n* Create a matrix that confronts each of those libraries to the requirements that you have identified during the first exercise.\n* Recommend one of those libraries and motivate your choice.\n* Draw some UI mockups to explain how you envision the user experience. For example, draw how a user will be able to switch language. Do not re-invent the wheel: you can easily find inspiration in existing websites.\n* Draw a high-level diagram presenting the components involved in your solution and how they will interact with each other. Is everything happening at frontend-side? Do some backend components also play a role in your solution? Where do the translations come from? etc.\n* Draw a low-level diagram that zooms on the implementation details at frontend-side."},"typeID":"Paragraph","w":"1457","x":"124","y":"2079","zOrder":"67"},{"ID":"107","h":"908","measuredH":"907","measuredW":"365","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"length":365,"x":365,"y":0},"p1":{"length":0.5637729294944946,"x":0.4684419704456736,"y":-0.31369098864293044},"p2":{"length":930.0994570474708,"x":206,"y":907},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"366","x":"45","y":"1149","zOrder":"7"},{"ID":"109","h":"243","measuredH":"70","measuredW":"100","properties":{"color":"16777215"},"typeID":"Canvas","w":"267","x":"292","y":"1361","zOrder":"15"},{"ID":"111","measuredH":"25","measuredW":"136","properties":{"bold":"true","size":"17","text":"User Experience"},"typeID":"Label","x":"358","y":"1375","zOrder":"68"},{"ID":"112","h":"200","measuredH":"70","measuredW":"100","properties":{"color":"16777215"},"typeID":"Canvas","w":"266","x":"604","y":"1361","zOrder":"14"},{"ID":"113","measuredH":"25","measuredW":"104","properties":{"bold":"true","size":"17","text":"OO Modeling"},"typeID":"Label","x":"685","y":"1375","zOrder":"69"},{"ID":"114","measuredH":"32","measuredW":"52","properties":{"align":"center","color":"16776960","size":"18","text":"UML"},"typeID":"TextInput","w":"227","x":"624","y":"1410","zOrder":"70"},{"ID":"118","measuredH":"32","measuredW":"184","properties":{"align":"center","color":"16776960","size":"18","text":"Design Patterns GoF"},"typeID":"TextInput","w":"227","x":"624","y":"1458","zOrder":"71"},{"ID":"122","h":"392","measuredH":"70","measuredW":"100","properties":{"color":"16777215"},"typeID":"Canvas","w":"271","x":"916","y":"1361","zOrder":"72"},{"ID":"123","measuredH":"32","measuredW":"184","properties":{"align":"center","color":"16776960","size":"18","text":"Layered Architecture"},"typeID":"TextInput","w":"227","x":"936","y":"1410","zOrder":"73"},{"ID":"124","measuredH":"32","measuredW":"138","properties":{"align":"center","color":"16776960","size":"18","text":"Micro-Services"},"typeID":"TextInput","w":"228","x":"935","y":"1458","zOrder":"74"},{"ID":"125","measuredH":"32","measuredW":"107","properties":{"align":"center","color":"16776960","size":"18","text":"API Design"},"typeID":"TextInput","w":"228","x":"936","y":"1506","zOrder":"75"},{"ID":"127","measuredH":"25","measuredW":"168","properties":{"bold":"true","size":"17","text":"System Architecture"},"typeID":"Label","x":"965","y":"1375","zOrder":"76"},{"ID":"129","h":"47","measuredH":"46","measuredW":"39","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"length":39,"x":39,"y":0},"p1":{"length":0.9950836644721824,"x":0.6473610462400743,"y":-0.7557216254086839},"p2":{"length":57.20139858430037,"x":34,"y":46},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"40","x":"274","y":"1424","zOrder":"77"},{"ID":"130","h":"101","measuredH":"100","measuredW":"79","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":76,"x":76,"y":0},"p1":{"length":0.9122231437769828,"x":0.4970526526126485,"y":-0.7649115795783794},"p2":{"length":127.4401820463232,"x":79,"y":100},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"80","x":"236","y":"1419","zOrder":"78"},{"ID":"131","h":"153","measuredH":"152","measuredW":"131","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":116,"x":116,"y":0},"p1":{"length":0.921420271801447,"x":0.4528665207877464,"y":-0.8024507658643327},"p2":{"length":200.66140635408692,"x":131,"y":152},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"132","x":"190","y":"1418","zOrder":"79"},{"ID":"132","h":"95","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"292","y":"1230","zOrder":"82"},{"ID":"133","measuredH":"25","measuredW":"200","properties":{"bold":"true","size":"17","text":"Learn design techniques"},"typeID":"Label","w":"899","x":"341","y":"1242","zOrder":"83"},{"ID":"134","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"306","y":"1242","zOrder":"84"},{"ID":"135","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"a"},"typeID":"Label","w":"11","x":"315","y":"1243","zOrder":"85"},{"ID":"136","h":"50","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"There are multiple ways to look at a problem. Each of those perspectives typically requires a different technique to design a thourough solution."},"typeID":"Paragraph","w":"815","x":"342","y":"1267","zOrder":"86"},{"ID":"137","measuredH":"32","measuredW":"67","properties":{"align":"center","color":"16770457","size":"18","text":"CQRS"},"typeID":"TextInput","w":"228","x":"936","y":"1650","zOrder":"87"},{"ID":"138","measuredH":"32","measuredW":"140","properties":{"align":"center","color":"16770457","size":"18","text":"Event Sourcing"},"typeID":"TextInput","w":"228","x":"936","y":"1698","zOrder":"88"},{"ID":"139","measuredH":"32","measuredW":"179","properties":{"align":"center","color":"16770457","size":"18","text":"REST / Hypermedia"},"typeID":"TextInput","w":"228","x":"936","y":"1554","zOrder":"89"},{"ID":"140","measuredH":"32","measuredW":"87","properties":{"align":"center","color":"16770457","size":"18","text":"GraphQL"},"typeID":"TextInput","w":"228","x":"936","y":"1602","zOrder":"90"},{"ID":"150","h":"441","measuredH":"140","measuredW":"200","properties":{"color":"16770457"},"typeID":"TextArea","w":"1426","x":"174","y":"1341","zOrder":"13"},{"ID":"152","h":"434","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*Solution Design is also about coordinating expert profiles*\n \nDepending on the scale and on the nature of the problem that you are trying to solve, different design techniques and skillsets will be necessary. \n \nThis is basically the point where Solution Design overlaps with all the other domains of expertise: architecture, frontend development, backend development, devOps, data engineering, etc. \n \nAs an example, you might have to choose a storage technology when designing a new system. Unless you are a seasonned Data Engineer, ask for help.\n \nRemember that Solution Design delivers the best results when it is done collaboratively."},"typeID":"Paragraph","w":"378","x":"1203","y":"1355","zOrder":"91"},{"ID":"156","h":"255","measuredH":"140","measuredW":"200","properties":{"color":"16770457"},"typeID":"TextArea","w":"669","x":"931","y":"959","zOrder":"92"},{"ID":"157","measuredH":"25","measuredW":"140","properties":{"bold":"true","italic":"false","size":"17","text":"Recommendation"},"typeID":"Label","w":"447","x":"944","y":"968","zOrder":"93"},{"ID":"158","h":"214","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"The following techniques are very useful:\n* *UI mockups* are great when discussing with non-technical stakeholders.\n* *Domain models* (DDD) are great to define the business contexts and concepts.\n* *High-level architectural diagrams* help development team understand the big picture.\n* *Class diagrams* and *sequence diagrams* (UML) are great when zooming in a specific part of a system.\n* *Design patterns* are great when discussing implementation with developers and architects."},"typeID":"Paragraph","w":"647","x":"944","y":"1000","zOrder":"94"},{"ID":"160","h":"82","measuredH":"81","measuredW":"93","properties":{"color":"2848996","curvature":"-1","direction":"bottom","leftArrow":"false","p0":{"length":93,"x":93,"y":0},"p1":{"length":0.5259308930999683,"x":0.5137679872090958,"y":0.112453366494937},"p2":{"length":81,"x":0,"y":81},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"94","x":"1176","y":"1201","zOrder":"12"},{"ID":"161","measuredH":"32","measuredW":"185","properties":{"align":"center","color":"16776960","size":"18","text":"Domain Model (DDD)"},"typeID":"TextInput","w":"227","x":"624","y":"1506","zOrder":"95"},{"ID":"162","h":"226","measuredH":"140","measuredW":"200","properties":{"color":"16776960"},"typeID":"TextArea","w":"779","x":"46","y":"2393","zOrder":"96"},{"ID":"163","measuredH":"25","measuredW":"502","properties":{"bold":"true","size":"17","text":"Learn how to communicate about the solution you recommend"},"typeID":"Label","x":"94","y":"2405","zOrder":"97"},{"ID":"164","measuredH":"24","measuredW":"24","properties":{"color":"10027263","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"60","y":"2405","zOrder":"98"},{"ID":"165","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"3"},"typeID":"Label","x":"68","y":"2407","zOrder":"99"},{"ID":"167","h":"188","measuredH":"187","measuredW":"106","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":212.5323504786977,"x":101,"y":187},"p1":{"length":0.35601041244632375,"x":0.332853663936241,"y":-0.12630064201903912},"p2":{"length":0,"x":0,"y":0},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"107","x":"243","y":"2050","zOrder":"11"},{"ID":"168","h":"407","measuredH":"406","measuredW":"78","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"x":12,"y":406},"p1":{"x":0.42888358329810616,"y":-0.17640824734902388},"p2":{"x":0,"y":0},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"79","x":"247","y":"2051","zOrder":"0"},{"ID":"169","h":"174","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"- Present your solution to multiple people with different seniorities and skillsets.\n- Make sure to present them first the context, the problem and the requirements. Don't jump straight into the details. Pedagogy is important.\n- Let them challenge your solution.\n- Be open to suggestions and criticisms.\n- Motivate your choices, be assertive.\n- Make sure everybody understands what you are planning to do.\n- *Tip:* create some buy-in by involving other people from the start of the design process."},"typeID":"Paragraph","w":"710","x":"94","y":"2439","zOrder":"100"},{"ID":"175","h":"64","measuredH":"140","measuredW":"200","properties":{"color":"11982760"},"typeID":"TextArea","w":"669","x":"931","y":"289","zOrder":"101"},{"ID":"177","h":"48","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_Most of the trouble in life comes from misunderstanding_*\nMake sure that all the stakeholders share the same vocabulary and context."},"typeID":"Paragraph","w":"647","x":"944","y":"297","zOrder":"102"},{"ID":"178","h":"69","measuredH":"68","measuredW":"83","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"x":83,"y":0},"p1":{"x":0.4667766872231391,"y":-0.16555198471293325},"p2":{"x":0,"y":68},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"84","x":"865","y":"317","zOrder":"6"},{"ID":"179","h":"104","measuredH":"140","measuredW":"200","properties":{"color":"11982760"},"typeID":"TextArea","w":"669","x":"1240","y":"565","zOrder":"103"},{"ID":"180","h":"89","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_Challenge the requirements_*\nDon't take requirements as fixed, collaborate with e.g. your Product Owner to identify improvements or acceptable trade-offs. Position yourself as a strategic partner, not as an executor."},"typeID":"Paragraph","w":"647","x":"1253","y":"573","zOrder":"104"},{"ID":"181","h":"81","measuredH":"80","measuredW":"84","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"x":0,"y":0},"p1":{"x":0.5377501213141895,"y":-0.05811663288899038},"p2":{"x":84,"y":80},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"85","x":"1171","y":"535","zOrder":"5"},{"ID":"182","h":"87","measuredH":"140","measuredW":"200","properties":{"color":"11982760"},"typeID":"TextArea","w":"669","x":"1240","y":"710","zOrder":"105"},{"ID":"183","h":"72","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_Make it work, make it work right, make it work fast_*\nDon't try to tackle all the problems at the same time: focus on the integration first, then on the behaviour, then on the performance. Avoid premature optimisations."},"typeID":"Paragraph","w":"647","x":"1253","y":"718","zOrder":"106"},{"ID":"184","h":"81","measuredH":"80","measuredW":"84","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":0,"x":0,"y":0},"p1":{"length":0.54088144356391,"x":0.5377501213141894,"y":-0.05811663288899044},"p2":{"length":116,"x":84,"y":80},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"85","x":"1163","y":"678","zOrder":"4"},{"ID":"185","h":"62","measuredH":"140","measuredW":"200","properties":{"color":"11982760"},"typeID":"TextArea","w":"669","x":"909","y":"2465","zOrder":"107"},{"ID":"186","h":"47","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_A picture is worth a thousand words_*\nDraw and use diagrams to sustain discussions and presentations."},"typeID":"Paragraph","w":"647","x":"922","y":"2473","zOrder":"108"},{"ID":"187","h":"24","measuredH":"23","measuredW":"110","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"length":22,"x":0,"y":22},"p1":{"length":0.5672011306003087,"x":0.5599143385573835,"y":-0.09062591258639152},"p2":{"length":110,"x":110,"y":0},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"111","x":"804","y":"2491","zOrder":"3"},{"ID":"188","h":"141","measuredH":"140","measuredW":"200","properties":{"color":"11982760","text":""},"typeID":"TextArea","w":"669","x":"1240","y":"1843","zOrder":"109"},{"ID":"189","h":"126","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_KISS: Keep It Simple, Stupid_*\nThe best solution is often the simplest one. However, simple does not mean naive, nor quick to implement.\n \n*_Put yourself in the shoes of your users_*\nLook at the problem from a user perspective, not only from a technical perspective."},"typeID":"Paragraph","w":"647","x":"1253","y":"1851","zOrder":"110"},{"ID":"190","h":"94","measuredH":"93","measuredW":"92","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"x":0,"y":0},"p1":{"x":0.5377501213141894,"y":-0.05811663288899041},"p2":{"x":92,"y":93},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"93","x":"1256","y":"1776","zOrder":"2"},{"ID":"191","h":"214","measuredH":"213","measuredW":"80","properties":{"color":"2848996","curvature":"1","direction":"top","leftArrow":"false","p0":{"x":80,"y":213},"p1":{"x":0.6452314383348866,"y":0.19322771046908976},"p2":{"x":26,"y":0},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"81","x":"226","y":"2463","zOrder":"1"},{"ID":"192","measuredH":"40","measuredW":"1203","properties":{"bold":"true","italic":"true","size":"32","text":"You don't learn to walk by following rules. You learn by doing, and by falling over."},"typeID":"Label","x":"257","y":"2693","zOrder":"111"},{"ID":"193","measuredH":"32","measuredW":"176","properties":{"size":"24","text":"Richard Branson"},"typeID":"Label","x":"696","y":"2749","zOrder":"112"}]},"measuredH":"2781","measuredW":"1909","mockupH":"2698","mockupW":"1864","version":"1.0"}} \ No newline at end of file +{"mockup":{"controls":{"control":[{"ID":"0","h":"407","measuredH":"406","measuredW":"78","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"x":12,"y":406},"p1":{"x":0.42888358329810616,"y":-0.17640824734902388},"p2":{"x":0,"y":0},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"79","x":"247","y":"2051","zOrder":"1"},{"ID":"1","h":"214","measuredH":"213","measuredW":"80","properties":{"color":"2848996","curvature":"1","direction":"top","leftArrow":"false","p0":{"x":80,"y":213},"p1":{"x":0.6452314383348866,"y":0.19322771046908976},"p2":{"x":26,"y":0},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"81","x":"226","y":"2463","zOrder":"2"},{"ID":"2","h":"94","measuredH":"93","measuredW":"92","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"x":0,"y":0},"p1":{"x":0.5377501213141894,"y":-0.05811663288899041},"p2":{"x":92,"y":93},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"93","x":"1256","y":"1776","zOrder":"3"},{"ID":"3","h":"24","measuredH":"23","measuredW":"110","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"length":22,"x":0,"y":22},"p1":{"length":0.5672011306003087,"x":0.5599143385573835,"y":-0.09062591258639152},"p2":{"length":110,"x":110,"y":0},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"111","x":"804","y":"2491","zOrder":"4"},{"ID":"5","h":"48","measuredH":"80","measuredW":"84","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"x":0,"y":0},"p1":{"x":0.5377501213141895,"y":-0.05811663288899038},"p2":{"x":84,"y":47},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"85","x":"1171","y":"568","zOrder":"5"},{"ID":"6","h":"69","measuredH":"68","measuredW":"83","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"x":83,"y":0},"p1":{"x":0.4667766872231391,"y":-0.16555198471293325},"p2":{"x":0,"y":68},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"84","x":"865","y":"317","zOrder":"6"},{"ID":"7","h":"908","measuredH":"907","measuredW":"365","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"length":365,"x":365,"y":0},"p1":{"length":0.5637729294944946,"x":0.4684419704456736,"y":-0.31369098864293044},"p2":{"length":930.0994570474708,"x":206,"y":907},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"366","x":"45","y":"1149","zOrder":"7"},{"ID":"8","h":"110","measuredH":"109","measuredW":"42","properties":{"color":"2848996","curvature":"-1","direction":"bottom","leftArrow":"false","p0":{"x":38,"y":0},"p1":{"x":0.4416543574593796,"y":0.1496799606105367},"p2":{"x":0,"y":109},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"43","x":"308","y":"220","zOrder":"8"},{"ID":"9","h":"527","measuredH":"526","measuredW":"245","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"x":245,"y":0},"p1":{"x":0.6912923752936063,"y":-0.3356793752134842},"p2":{"x":151,"y":526},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"246","x":"63","y":"328","zOrder":"9"},{"ID":"10","h":"296","measuredH":"295","measuredW":"283","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":354.17650966714325,"x":196,"y":295},"p1":{"length":0.41989756409609025,"x":0.18774563340534592,"y":-0.37558692931338233},"p2":{"length":0,"x":0,"y":0},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"284","x":"214","y":"855","zOrder":"10"},{"ID":"11","h":"188","measuredH":"187","measuredW":"106","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":212.5323504786977,"x":101,"y":187},"p1":{"length":0.35601041244632375,"x":0.332853663936241,"y":-0.12630064201903912},"p2":{"length":0,"x":0,"y":0},"rightArrow":"false","shape":"bezier"},"typeID":"Arrow","w":"107","x":"243","y":"2050","zOrder":"11"},{"ID":"12","h":"82","measuredH":"81","measuredW":"93","properties":{"color":"2848996","curvature":"-1","direction":"bottom","leftArrow":"false","p0":{"length":93,"x":93,"y":0},"p1":{"length":0.5259308930999683,"x":0.5137679872090958,"y":0.112453366494937},"p2":{"length":81,"x":0,"y":81},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"94","x":"1176","y":"1201","zOrder":"12"},{"ID":"13","h":"441","measuredH":"140","measuredW":"200","properties":{"color":"16770457"},"typeID":"TextArea","w":"1426","x":"174","y":"1341","zOrder":"13"},{"ID":"14","h":"200","measuredH":"70","measuredW":"100","properties":{"color":"16777215"},"typeID":"Canvas","w":"266","x":"604","y":"1361","zOrder":"14"},{"ID":"15","h":"243","measuredH":"70","measuredW":"100","properties":{"color":"16777215"},"typeID":"Canvas","w":"267","x":"292","y":"1361","zOrder":"15"},{"ID":"16","h":"41","measuredH":"40","measuredW":"233","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"length":234.44615586526473,"x":233,"y":26},"p1":{"length":0.4167062781330246,"x":0.395558410571717,"y":-0.13106359548499588},"p2":{"length":40,"x":0,"y":40},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"234","x":"485","y":"151","zOrder":"16"},{"ID":"17","measuredH":"40","measuredW":"236","properties":{"bold":"true","size":"32","text":"Solution Design"},"typeID":"Label","x":"242","y":"170","zOrder":"17"},{"ID":"18","h":"71","measuredH":"70","measuredW":"12","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":6,"x":6,"y":0},"p1":{"length":0.533966429538699,"x":0.5214417744916817,"y":-0.11497227356746768},"p2":{"length":71.02112361825881,"x":12,"y":70},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"13","x":"307","y":"83","zOrder":"18"},{"ID":"19","h":"71","measuredH":"140","measuredW":"200","properties":{"color":"16776960"},"typeID":"TextArea","w":"742","x":"94","y":"282","zOrder":"19"},{"ID":"20","measuredH":"25","measuredW":"255","properties":{"bold":"true","size":"17","text":"Learn how to state the problem"},"typeID":"Label","x":"142","y":"294","zOrder":"20"},{"ID":"21","measuredH":"24","measuredW":"24","properties":{"color":"10027263","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"108","y":"294","zOrder":"21"},{"ID":"22","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"1"},"typeID":"Label","x":"116","y":"296","zOrder":"22"},{"ID":"23","measuredH":"25","measuredW":"670","properties":{"size":"17","text":"Understanding the problem and the expectations is key for the success of your design"},"typeID":"Label","x":"141","y":"318","zOrder":"23"},{"ID":"24","h":"88","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"291","y":"496","zOrder":"24"},{"ID":"25","measuredH":"25","measuredW":"628","properties":{"bold":"true","size":"17","text":"Gather and prioritise functional requirements as well as envisioned evolutions"},"typeID":"Label","x":"339","y":"508","zOrder":"25"},{"ID":"26","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"305","y":"508","zOrder":"26"},{"ID":"27","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"b"},"typeID":"Label","x":"313","y":"510","zOrder":"27"},{"ID":"28","h":"45","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"* What are the features to deliver? Short-term? Mid-term? Long-term?\n* What's the priority of every feature compared to the others?"},"typeID":"Paragraph","w":"580","x":"319","y":"533","zOrder":"28"},{"ID":"29","h":"231","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"292","y":"600","zOrder":"29"},{"ID":"30","measuredH":"25","measuredW":"291","properties":{"bold":"true","size":"17","text":"Gather non-functional requirements"},"typeID":"Label","x":"340","y":"612","zOrder":"30"},{"ID":"31","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"306","y":"612","zOrder":"31"},{"ID":"32","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"c"},"typeID":"Label","x":"314","y":"614","zOrder":"32"},{"ID":"33","h":"200","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"* How accessible should it be?\n* How performant should it be?\n* How scalable should it be (vertical vs horizontal scalability)?\n* How secure should it be?\n* How mature should it be (documentation, ecosystem, community, etc.)?\n* Does it need to be integrated with existing assets?\n* Does it need to comply with a standard technology stack?\n* Are there any constraints regarding the licensing model?\n* Are there off-the-shelf solutions available at an acceptable price (build vs buy)?"},"typeID":"Paragraph","w":"655","x":"320","y":"637","zOrder":"33"},{"ID":"34","h":"112","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"291","y":"369","zOrder":"34"},{"ID":"35","measuredH":"25","measuredW":"521","properties":{"bold":"true","size":"17","text":"Learn the business domain by talking to subject-matter experts"},"typeID":"Label","w":"849","x":"340","y":"381","zOrder":"35"},{"ID":"36","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"305","y":"381","zOrder":"36"},{"ID":"37","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"a"},"typeID":"Label","w":"11","x":"314","y":"382","zOrder":"37"},{"ID":"38","h":"69","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"* Define a ubiquitous language that is shared by all the stakeholders.\n* This step is typically more relevant for business problems of a larger scale.\n* Skip this step if you need to solve a technical problem within a very clear scope."},"typeID":"Paragraph","w":"815","x":"329","y":"406","zOrder":"38"},{"ID":"39","measuredH":"32","measuredW":"253","properties":{"align":"center","color":"16776960","size":"18","text":"Domain-Driven Design (DDD)"},"typeID":"TextInput","w":"396","x":"1203","y":"369","zOrder":"39"},{"ID":"40","measuredH":"32","measuredW":"374","properties":{"align":"center","color":"15658734","size":"18","text":"Backlog definition & prioritisation techniques"},"typeID":"TextInput","w":"395","x":"1203","y":"544","zOrder":"40"},{"ID":"41","measuredH":"32","measuredW":"357","properties":{"align":"center","color":"15658734","size":"18","text":"Facilitation techniques for agile workshops"},"typeID":"TextInput","w":"397","x":"1203","y":"496","zOrder":"41"},{"ID":"42","h":"180","measuredH":"140","measuredW":"200","properties":{"color":"16770457","size":"17"},"typeID":"TextArea","w":"677","x":"707","y":"89","zOrder":"42"},{"ID":"43","measuredH":"25","measuredW":"625","properties":{"bold":"true","size":"17","text":"*Software engineering is about solving problems of different types and scales*"},"typeID":"Label","w":"651","x":"727","y":"101","zOrder":"43"},{"ID":"44","h":"137","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"* _As a Product Owner, I want you to plug a date picker in my app_\n* _As a Product Owner, I want you to translate my app in multiple languages_\n* _As a Product Owner, I want to have analytics about how my app is used_\n* _As a CTO, I want you to recommend a new frontend development framework_\n* _As a new customer, I want you to implement an app to boost my business_\n* _etc._"},"typeID":"Paragraph","w":"655","x":"707","y":"132","zOrder":"44"},{"ID":"45","h":"71","measuredH":"140","measuredW":"200","properties":{"color":"16776960"},"typeID":"TextArea","w":"870","x":"46","y":"1143","zOrder":"45"},{"ID":"46","measuredH":"25","measuredW":"247","properties":{"bold":"true","size":"17","text":"Learn how to design a solution"},"typeID":"Label","x":"94","y":"1155","zOrder":"46"},{"ID":"47","measuredH":"24","measuredW":"24","properties":{"color":"10027263","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"60","y":"1155","zOrder":"47"},{"ID":"48","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"2"},"typeID":"Label","x":"68","y":"1157","zOrder":"48"},{"ID":"49","measuredH":"25","measuredW":"816","properties":{"size":"17","text":"Keep in mind that every solution has pros and cons, there is no silver bullet! Compare multiple alternatives."},"typeID":"Label","x":"93","y":"1179","zOrder":"49"},{"ID":"50","measuredH":"32","measuredW":"89","properties":{"align":"center","color":"16770457","size":"18","text":"Balsamiq"},"typeID":"TextInput","w":"228","x":"312","y":"1458","zOrder":"50"},{"ID":"51","measuredH":"32","measuredW":"70","properties":{"align":"center","color":"16770457","size":"18","text":"Sketch"},"typeID":"TextInput","w":"228","x":"312","y":"1506","zOrder":"51"},{"ID":"52","h":"195","measuredH":"140","measuredW":"200","properties":{"color":"16776960"},"typeID":"TextArea","w":"680","x":"108","y":"847","zOrder":"52"},{"ID":"53","measuredH":"25","measuredW":"114","properties":{"bold":"true","size":"17","text":"Do it yourself!"},"typeID":"Label","x":"116","y":"859","zOrder":"53"},{"ID":"54","h":"158","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"List both the functional and the non-functional requirements for the following problem: \n\t\n\t_As a Product Owner, I want you to translate my app in multiple languages_\n \nIt may seem simple but you would be surprised how far such a simple requirement can bring you: think about string interpolation, about the format of dates and numbers, about the currency symbols, about right to left languages, etc."},"typeID":"Paragraph","w":"664","x":"116","y":"884","zOrder":"54"},{"ID":"55","h":"132","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"895","x":"292","y":"1805","zOrder":"55"},{"ID":"56","measuredH":"25","measuredW":"692","properties":{"bold":"true","size":"17","text":"Confront each alternative to both the functional and the non-functional requirements"},"typeID":"Label","w":"849","x":"341","y":"1817","zOrder":"56"},{"ID":"57","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"306","y":"1817","zOrder":"57"},{"ID":"58","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"b"},"typeID":"Label","w":"11","x":"315","y":"1818","zOrder":"58"},{"ID":"59","h":"83","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"A good way to summarise your analysis is to create a matrix whose lines are the requirements you identified and whose columns are the solutions you designed. Each cell can then be colored in green, orange or red, depending on whether the solutions fulfills the corresponding requirement fully, partially or not at all. "},"typeID":"Paragraph","w":"815","x":"330","y":"1842","zOrder":"59"},{"ID":"60","h":"73","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"292","y":"1951","zOrder":"60"},{"ID":"61","measuredH":"25","measuredW":"829","properties":{"bold":"true","size":"17","text":"Frequently ask multiple stakeholders to review and validate or invalidate your assumptions and choices"},"typeID":"Label","w":"849","x":"341","y":"1963","zOrder":"61"},{"ID":"62","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"306","y":"1963","zOrder":"62"},{"ID":"63","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"c"},"typeID":"Label","w":"11","x":"315","y":"1964","zOrder":"63"},{"ID":"64","h":"28","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"Use their feedback to refine your definition of the problem (step 1). Make it an iterative process!"},"typeID":"Paragraph","w":"815","x":"342","y":"1988","zOrder":"64"},{"ID":"65","h":"297","measuredH":"140","measuredW":"200","properties":{"color":"16776960","text":""},"typeID":"TextArea","w":"1484","x":"116","y":"2042","zOrder":"65"},{"ID":"66","measuredH":"25","measuredW":"114","properties":{"bold":"true","size":"17","text":"Do it yourself!"},"typeID":"Label","x":"124","y":"2054","zOrder":"66"},{"ID":"67","h":"250","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"Let's come back to the previous problem:\n\t\n\t_As a Product Owner, I want you to translate my app in multiple languages_\n \n* Find one or preferably multiple off-the-shelf internationalisation (i18n) libraries which are compatible with the technology that you use.\n* Create a matrix that confronts each of those libraries to the requirements that you have identified during the first exercise.\n* Recommend one of those libraries and motivate your choice.\n* Draw some UI mockups to explain how you envision the user experience. For example, draw how a user will be able to switch language. Do not re-invent the wheel: you can easily find inspiration in existing websites.\n* Draw a high-level diagram presenting the components involved in your solution and how they will interact with each other. Is everything happening at frontend side? Do some backend components also play a role in your solution? Where do the translations come from? etc.\n* Draw a low-level diagram that zooms on the implementation details at frontend side."},"typeID":"Paragraph","w":"1457","x":"124","y":"2079","zOrder":"67"},{"ID":"68","measuredH":"25","measuredW":"136","properties":{"bold":"true","size":"17","text":"User Experience"},"typeID":"Label","x":"358","y":"1375","zOrder":"68"},{"ID":"69","measuredH":"25","measuredW":"104","properties":{"bold":"true","size":"17","text":"OO Modeling"},"typeID":"Label","x":"685","y":"1375","zOrder":"69"},{"ID":"70","measuredH":"32","measuredW":"52","properties":{"align":"center","color":"16776960","size":"18","text":"UML"},"typeID":"TextInput","w":"227","x":"624","y":"1410","zOrder":"70"},{"ID":"71","measuredH":"32","measuredW":"184","properties":{"align":"center","color":"16776960","size":"18","text":"Design Patterns GoF"},"typeID":"TextInput","w":"227","x":"624","y":"1458","zOrder":"71"},{"ID":"72","h":"392","measuredH":"70","measuredW":"100","properties":{"color":"16777215"},"typeID":"Canvas","w":"271","x":"916","y":"1361","zOrder":"72"},{"ID":"73","measuredH":"32","measuredW":"184","properties":{"align":"center","color":"16776960","size":"18","text":"Layered Architecture"},"typeID":"TextInput","w":"227","x":"936","y":"1410","zOrder":"73"},{"ID":"74","measuredH":"32","measuredW":"138","properties":{"align":"center","color":"16776960","size":"18","text":"Micro-Services"},"typeID":"TextInput","w":"228","x":"935","y":"1458","zOrder":"74"},{"ID":"75","measuredH":"32","measuredW":"107","properties":{"align":"center","color":"16776960","size":"18","text":"API Design"},"typeID":"TextInput","w":"228","x":"936","y":"1506","zOrder":"75"},{"ID":"76","measuredH":"25","measuredW":"168","properties":{"bold":"true","size":"17","text":"System Architecture"},"typeID":"Label","x":"965","y":"1375","zOrder":"76"},{"ID":"77","h":"47","measuredH":"46","measuredW":"39","properties":{"color":"2848996","curvature":"1","direction":"bottom","leftArrow":"false","p0":{"length":39,"x":39,"y":0},"p1":{"length":0.9950836644721824,"x":0.6473610462400743,"y":-0.7557216254086839},"p2":{"length":57.20139858430037,"x":34,"y":46},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"40","x":"274","y":"1424","zOrder":"77"},{"ID":"78","h":"101","measuredH":"100","measuredW":"79","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":76,"x":76,"y":0},"p1":{"length":0.9122231437769828,"x":0.4970526526126485,"y":-0.7649115795783794},"p2":{"length":127.4401820463232,"x":79,"y":100},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"80","x":"236","y":"1419","zOrder":"78"},{"ID":"79","h":"153","measuredH":"152","measuredW":"131","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"length":116,"x":116,"y":0},"p1":{"length":0.921420271801447,"x":0.4528665207877464,"y":-0.8024507658643327},"p2":{"length":200.66140635408692,"x":131,"y":152},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"132","x":"190","y":"1418","zOrder":"79"},{"ID":"80","measuredH":"32","measuredW":"111","properties":{"align":"center","color":"15658734","size":"18","text":"UI Mockups"},"typeID":"TextInput","w":"227","x":"312","y":"1410","zOrder":"80"},{"ID":"81","measuredH":"32","measuredW":"107","properties":{"align":"center","color":"16770457","size":"18","text":"Marvel App"},"typeID":"TextInput","w":"228","x":"312","y":"1554","zOrder":"81"},{"ID":"82","h":"95","measuredH":"140","measuredW":"200","properties":{"color":"16777215"},"typeID":"TextArea","w":"896","x":"292","y":"1230","zOrder":"82"},{"ID":"83","measuredH":"25","measuredW":"200","properties":{"bold":"true","size":"17","text":"Learn design techniques"},"typeID":"Label","w":"899","x":"341","y":"1242","zOrder":"83"},{"ID":"84","measuredH":"24","measuredW":"24","properties":{"color":"6989903","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"306","y":"1242","zOrder":"84"},{"ID":"85","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"a"},"typeID":"Label","w":"11","x":"315","y":"1243","zOrder":"85"},{"ID":"86","h":"50","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"There are multiple ways to look at a problem. Each of those perspectives typically requires a different technique to design a thourough solution."},"typeID":"Paragraph","w":"815","x":"342","y":"1267","zOrder":"86"},{"ID":"87","measuredH":"32","measuredW":"67","properties":{"align":"center","color":"15658734","size":"18","text":"CQRS"},"typeID":"TextInput","w":"228","x":"936","y":"1650","zOrder":"87"},{"ID":"88","measuredH":"32","measuredW":"140","properties":{"align":"center","color":"15658734","size":"18","text":"Event Sourcing"},"typeID":"TextInput","w":"228","x":"936","y":"1698","zOrder":"88"},{"ID":"89","measuredH":"32","measuredW":"179","properties":{"align":"center","color":"15658734","size":"18","text":"REST / Hypermedia"},"typeID":"TextInput","w":"228","x":"936","y":"1554","zOrder":"89"},{"ID":"90","measuredH":"32","measuredW":"87","properties":{"align":"center","color":"15658734","size":"18","text":"GraphQL"},"typeID":"TextInput","w":"228","x":"936","y":"1602","zOrder":"90"},{"ID":"91","h":"434","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*Solution Design is also about coordinating expert profiles*\n \nDepending on the scale and on the nature of the problem that you are trying to solve, different design techniques and skillsets will be necessary. \n \nThis is basically the point where Solution Design overlaps with all the other domains of expertise: architecture, frontend development, backend development, devOps, data engineering, etc. \n \nAs an example, you might have to choose a storage technology when designing a new system. Unless you are a seasonned Data Engineer, ask for help.\n \nRemember that Solution Design delivers the best results when it is done collaboratively."},"typeID":"Paragraph","w":"378","x":"1203","y":"1355","zOrder":"91"},{"ID":"92","h":"255","measuredH":"140","measuredW":"200","properties":{"color":"16770457"},"typeID":"TextArea","w":"669","x":"931","y":"959","zOrder":"92"},{"ID":"93","measuredH":"25","measuredW":"140","properties":{"bold":"true","italic":"false","size":"17","text":"Recommendation"},"typeID":"Label","w":"447","x":"944","y":"968","zOrder":"93"},{"ID":"94","h":"214","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"The following techniques are very useful:\n* *UI mockups* are great when discussing with non-technical stakeholders.\n* *Domain models* (DDD) are great to define the business contexts and concepts.\n* *High-level architectural diagrams* help development team understand the big picture.\n* *Class diagrams* and *sequence diagrams* (UML) are great when zooming in a specific part of a system.\n* *Design patterns* are great when discussing implementation with developers and architects."},"typeID":"Paragraph","w":"647","x":"944","y":"1000","zOrder":"94"},{"ID":"95","measuredH":"32","measuredW":"185","properties":{"align":"center","color":"16776960","size":"18","text":"Domain Model (DDD)"},"typeID":"TextInput","w":"227","x":"624","y":"1506","zOrder":"95"},{"ID":"96","h":"226","measuredH":"140","measuredW":"200","properties":{"color":"16776960"},"typeID":"TextArea","w":"779","x":"46","y":"2393","zOrder":"96"},{"ID":"97","measuredH":"25","measuredW":"502","properties":{"bold":"true","size":"17","text":"Learn how to communicate about the solution you recommend"},"typeID":"Label","x":"94","y":"2405","zOrder":"97"},{"ID":"98","measuredH":"24","measuredW":"24","properties":{"color":"10027263","icon":{"ID":"circle","size":"small"}},"typeID":"Icon","x":"60","y":"2405","zOrder":"98"},{"ID":"99","measuredH":"21","measuredW":"10","properties":{"bold":"true","color":"16777215","text":"3"},"typeID":"Label","x":"68","y":"2407","zOrder":"99"},{"ID":"100","h":"174","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"- Present your solution to multiple people with different seniorities and skillsets.\n- Make sure to present them first the context, the problem and the requirements. Don't jump straight into the details. Pedagogy is important.\n- Let them challenge your solution.\n- Be open to suggestions and criticisms.\n- Motivate your choices, be assertive.\n- Make sure everybody understands what you are planning to do.\n- *Tip:* create some buy-in by involving other people from the start of the design process."},"typeID":"Paragraph","w":"710","x":"94","y":"2439","zOrder":"100"},{"ID":"101","h":"64","measuredH":"140","measuredW":"200","properties":{"color":"11982760"},"typeID":"TextArea","w":"669","x":"931","y":"289","zOrder":"101"},{"ID":"102","h":"48","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_Most of the trouble in life comes from misunderstanding_*\nMake sure that all the stakeholders share the same vocabulary and context."},"typeID":"Paragraph","w":"647","x":"944","y":"297","zOrder":"102"},{"ID":"103","h":"104","measuredH":"140","measuredW":"200","properties":{"color":"11982760"},"typeID":"TextArea","w":"669","x":"1240","y":"605","zOrder":"103"},{"ID":"104","h":"89","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_Challenge the requirements_*\nDon't take requirements as fixed, collaborate with e.g. your Product Owner to identify improvements or acceptable trade-offs. Position yourself as a strategic partner, not as an executor."},"typeID":"Paragraph","w":"647","x":"1253","y":"613","zOrder":"104"},{"ID":"105","h":"87","measuredH":"140","measuredW":"200","properties":{"color":"11982760"},"typeID":"TextArea","w":"669","x":"1240","y":"750","zOrder":"105"},{"ID":"106","h":"72","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_Make it work, make it work right, make it work fast_*\nDon't try to tackle all the problems at the same time: focus on the integration first, then on the behaviour, then on the performance. Avoid premature optimisations."},"typeID":"Paragraph","w":"647","x":"1253","y":"758","zOrder":"106"},{"ID":"107","h":"62","measuredH":"140","measuredW":"200","properties":{"color":"11982760"},"typeID":"TextArea","w":"669","x":"909","y":"2465","zOrder":"107"},{"ID":"108","h":"47","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_A picture is worth a thousand words_*\nDraw and use diagrams to sustain discussions and presentations."},"typeID":"Paragraph","w":"647","x":"922","y":"2473","zOrder":"108"},{"ID":"109","h":"141","measuredH":"140","measuredW":"200","properties":{"color":"11982760","text":""},"typeID":"TextArea","w":"669","x":"1240","y":"1843","zOrder":"109"},{"ID":"110","h":"126","measuredH":"80","measuredW":"275","properties":{"size":"17","text":"*_KISS: Keep It Simple, Stupid_*\nThe best solution is often the simplest one. However, simple does not mean naive, nor quick to implement.\n \n*_Put yourself in the shoes of your users_*\nLook at the problem from a user perspective, not only from a technical perspective."},"typeID":"Paragraph","w":"647","x":"1253","y":"1851","zOrder":"110"},{"ID":"111","measuredH":"40","measuredW":"1203","properties":{"bold":"true","italic":"true","size":"32","text":"You don't learn to walk by following rules. You learn by doing, and by falling over."},"typeID":"Label","x":"257","y":"2693","zOrder":"111"},{"ID":"112","measuredH":"32","measuredW":"176","properties":{"size":"24","text":"Richard Branson"},"typeID":"Label","x":"696","y":"2749","zOrder":"112"},{"ID":"114","h":"48","measuredH":"47","measuredW":"84","properties":{"color":"2848996","curvature":"-1","direction":"top","leftArrow":"false","p0":{"x":0,"y":0,"length":0},"p1":{"x":0.5377501213141895,"y":-0.058116632888990376,"length":0.5408814435639101},"p2":{"x":84,"y":47,"length":96.25487000666512},"rightArrow":"false","shape":"bezier","stroke":"dotted"},"typeID":"Arrow","w":"85","x":"1171","y":"713","zOrder":"0"}]},"measuredH":"2781","measuredW":"1909","mockupH":"2698","mockupW":"1864","version":"1.0"}} \ No newline at end of file