Commit 548d71bd authored by Alexander Hirsch's avatar Alexander Hirsch
Browse files

Add techniques

parent 09820e91
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="8cm" height="9cm" viewBox="-2 -2 153 166" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<rect style="fill: #d84747" x="0" y="0" width="60" height="50"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="0" y="0" width="60" height="50"/>
</g>
<g>
<rect style="fill: #a1ce5f" x="100" y="0" width="50" height="50"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="100" y="0" width="50" height="50"/>
</g>
<g>
<rect style="fill: #4275e1" x="0" y="70" width="60" height="30"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="0" y="70" width="60" height="30"/>
</g>
<g>
<rect style="fill: #add8e6" x="100" y="97.2059" width="49" height="43.2353"/>
<ellipse style="fill: #add8e6" cx="124.5" cy="140.441" rx="24.5" ry="7.20588"/>
<ellipse style="fill: #add8e6" cx="124.5" cy="97.2059" rx="24.5" ry="7.20588"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="124.5" cy="97.2059" rx="24.5" ry="7.20588"/>
<path style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" d="M 149 97.2059 L 149,140.441 C 149,144.421 138.031,147.647 124.5,147.647 C 110.969,147.647 100,144.421 100,140.441 L 100,97.2059"/>
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="124.5" y="159.647">
<tspan x="124.5" y="159.647"></tspan>
</text>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="65.9449" y1="97.3026" x2="94.0428" y2="106.919"/>
<polygon style="fill: #000000" points="63.1065,96.3311 67.5386,95.7341 65.9449,97.3026 66.2433,99.5186 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="63.1065,96.3311 67.5386,95.7341 65.9449,97.3026 66.2433,99.5186 "/>
<polygon style="fill: #000000" points="96.8811,107.891 92.449,108.488 94.0428,106.919 93.7443,104.703 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="96.8811,107.891 92.449,108.488 94.0428,106.919 93.7443,104.703 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="61.1873" y1="54.6093" x2="98.3601" y2="89.9014"/>
<polygon style="fill: #000000" points="59.0116,52.5438 63.2895,53.8474 61.1873,54.6093 60.5354,56.7483 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="59.0116,52.5438 63.2895,53.8474 61.1873,54.6093 60.5354,56.7483 "/>
<polygon style="fill: #000000" points="100.536,91.9669 96.2578,90.6633 98.3601,89.9014 99.0119,87.7624 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="100.536,91.9669 96.2578,90.6633 98.3601,89.9014 99.0119,87.7624 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="126.273" y1="56.2359" x2="127.399" y2="83.8768"/>
<polygon style="fill: #000000" points="126.151,53.2384 128.312,57.1536 126.273,56.2359 124.315,57.3165 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="126.151,53.2384 128.312,57.1536 126.273,56.2359 124.315,57.3165 "/>
<polygon style="fill: #000000" points="127.522,86.8743 125.36,82.9591 127.399,83.8768 129.357,82.7962 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="127.522,86.8743 125.36,82.9591 127.399,83.8768 129.357,82.7962 "/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="11cm" height="13cm" viewBox="-2 -2 203 246" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<rect style="fill: #d84747" x="80" y="0" width="60" height="50"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="80" y="0" width="60" height="50"/>
</g>
<g>
<rect style="fill: #a1ce5f" x="150" y="0" width="50" height="50"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="150" y="0" width="50" height="50"/>
</g>
<g>
<rect style="fill: #4275e1" x="0" y="20" width="60" height="30"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="0" y="20" width="60" height="30"/>
</g>
<g>
<rect style="fill: #add8e6" x="80" y="177.206" width="49" height="43.2353"/>
<ellipse style="fill: #add8e6" cx="104.5" cy="220.441" rx="24.5" ry="7.20588"/>
<ellipse style="fill: #add8e6" cx="104.5" cy="177.206" rx="24.5" ry="7.20588"/>
<ellipse style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" cx="104.5" cy="177.206" rx="24.5" ry="7.20588"/>
<path style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" d="M 129 177.206 L 129,220.441 C 129,224.421 118.031,227.647 104.5,227.647 C 90.969,227.647 80,224.421 80,220.441 L 80,177.206"/>
<text font-size="12.7998" style="fill: #000000;text-anchor:middle;font-family:sans-serif;font-style:normal;font-weight:normal" x="104.5" y="239.647">
<tspan x="104.5" y="239.647"></tspan>
</text>
</g>
<g>
<rect style="fill: #add8e6" x="80" y="100" width="60" height="30"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="80" y="100" width="60" height="30"/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="49.679" y1="54.679" x2="90.321" y2="95.321"/>
<polygon style="fill: #000000" points="47.5577,52.5577 51.8003,53.9719 49.679,54.679 48.9719,56.8003 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="47.5577,52.5577 51.8003,53.9719 49.679,54.679 48.9719,56.8003 "/>
<polygon style="fill: #000000" points="92.4423,97.4423 88.1997,96.0281 90.321,95.321 91.0281,93.1997 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="92.4423,97.4423 88.1997,96.0281 90.321,95.321 91.0281,93.1997 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="110" y1="55.9001" x2="110" y2="93.7569"/>
<polygon style="fill: #000000" points="110,52.9001 112,56.9001 110,55.9001 108,56.9001 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="110,52.9001 112,56.9001 110,55.9001 108,56.9001 "/>
<polygon style="fill: #000000" points="110,96.7569 108,92.7569 110,93.7569 112,92.7569 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="110,96.7569 108,92.7569 110,93.7569 112,92.7569 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="153.399" y1="54.9088" x2="124.626" y2="94.7481"/>
<polygon style="fill: #000000" points="155.156,52.4768 154.435,56.8905 153.399,54.9088 151.192,54.5485 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="155.156,52.4768 154.435,56.8905 153.399,54.9088 151.192,54.5485 "/>
<polygon style="fill: #000000" points="122.87,97.1802 123.59,92.7665 124.626,94.7481 126.833,95.1085 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="122.87,97.1802 123.59,92.7665 124.626,94.7481 126.833,95.1085 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="109.702" y1="136.219" x2="109.312" y2="164.016"/>
<polygon style="fill: #000000" points="109.744,133.219 111.688,137.246 109.702,136.219 107.688,137.19 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="109.744,133.219 111.688,137.246 109.702,136.219 107.688,137.19 "/>
<polygon style="fill: #000000" points="109.27,167.016 107.326,162.988 109.312,164.016 111.326,163.045 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="109.27,167.016 107.326,162.988 109.312,164.016 111.326,163.045 "/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="16cm" height="8cm" viewBox="-2 -2 313 143" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #bfbfbf" x="0" y="0" width="90" height="140"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #bfbfbf" x="110" y="0" width="90" height="140"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #bfbfbf" x="220" y="50" width="90" height="90"/>
<g>
<rect style="fill: #4275e1" x="10" y="10" width="70" height="20"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="10" y="10" width="70" height="20"/>
</g>
<g>
<rect style="fill: #4275e1" x="10" y="60" width="70" height="20"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="10" y="60" width="70" height="20"/>
</g>
<g>
<rect style="fill: #4275e1" x="10" y="110" width="70" height="20"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="10" y="110" width="70" height="20"/>
</g>
<g>
<rect style="fill: #d84747" x="120" y="10" width="70" height="20"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="120" y="10" width="70" height="20"/>
</g>
<g>
<rect style="fill: #d84747" x="120" y="60" width="70" height="20"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="120" y="60" width="70" height="20"/>
</g>
<g>
<rect style="fill: #d84747" x="120" y="110" width="70" height="20"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="120" y="110" width="70" height="20"/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="45" y1="86.2346" x2="45" y2="103.765"/>
<polygon style="fill: #000000" points="45,83.2346 47,87.2346 45,86.2346 43,87.2346 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="45,83.2346 47,87.2346 45,86.2346 43,87.2346 "/>
<polygon style="fill: #000000" points="45,106.765 43,102.765 45,103.765 47,102.765 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="45,106.765 43,102.765 45,103.765 47,102.765 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="45" y1="36.2346" x2="45" y2="53.7654"/>
<polygon style="fill: #000000" points="45,33.2346 47,37.2346 45,36.2346 43,37.2346 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="45,33.2346 47,37.2346 45,36.2346 43,37.2346 "/>
<polygon style="fill: #000000" points="45,56.7654 43,52.7654 45,53.7654 47,52.7654 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="45,56.7654 43,52.7654 45,53.7654 47,52.7654 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="86.2358" y1="20" x2="113.764" y2="20"/>
<polygon style="fill: #000000" points="83.2358,20 87.2358,18 86.2358,20 87.2358,22 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="83.2358,20 87.2358,18 86.2358,20 87.2358,22 "/>
<polygon style="fill: #000000" points="116.764,20 112.764,22 113.764,20 112.764,18 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="116.764,20 112.764,22 113.764,20 112.764,18 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="155" y1="36.2346" x2="155" y2="53.7654"/>
<polygon style="fill: #000000" points="155,33.2346 157,37.2346 155,36.2346 153,37.2346 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="155,33.2346 157,37.2346 155,36.2346 153,37.2346 "/>
<polygon style="fill: #000000" points="155,56.7654 153,52.7654 155,53.7654 157,52.7654 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="155,56.7654 153,52.7654 155,53.7654 157,52.7654 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="155" y1="86.2346" x2="155" y2="103.765"/>
<polygon style="fill: #000000" points="155,83.2346 157,87.2346 155,86.2346 153,87.2346 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="155,83.2346 157,87.2346 155,86.2346 153,87.2346 "/>
<polygon style="fill: #000000" points="155,106.765 153,102.765 155,103.765 157,102.765 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="155,106.765 153,102.765 155,103.765 157,102.765 "/>
</g>
<g>
<rect style="fill: #a1ce5f" x="230" y="60" width="70" height="20"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="230" y="60" width="70" height="20"/>
</g>
<g>
<rect style="fill: #a1ce5f" x="230" y="110" width="70" height="20"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="230" y="110" width="70" height="20"/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="265" y1="86.2346" x2="265" y2="103.765"/>
<polygon style="fill: #000000" points="265,83.2346 267,87.2346 265,86.2346 263,87.2346 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="265,83.2346 267,87.2346 265,86.2346 263,87.2346 "/>
<polygon style="fill: #000000" points="265,106.765 263,102.765 265,103.765 267,102.765 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="265,106.765 263,102.765 265,103.765 267,102.765 "/>
</g>
<g>
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="196.236" y1="70" x2="223.764" y2="70"/>
<polygon style="fill: #000000" points="193.236,70 197.236,68 196.236,70 197.236,72 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="193.236,70 197.236,68 196.236,70 197.236,72 "/>
<polygon style="fill: #000000" points="226.764,70 222.764,72 223.764,70 222.764,68 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="226.764,70 222.764,72 223.764,70 222.764,68 "/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="11cm" height="11cm" viewBox="-2 -2 203 203" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g>
<rect style="fill: #d84747" x="0" y="0" width="200" height="200"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="0" y="0" width="200" height="200"/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="12cm" height="12cm" viewBox="-2 -2 223 233" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="30" y1="150" x2="80" y2="230"/>
<g>
<polygon style="fill: #d84747" points="0,80 0,0 140,0 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="0,80 0,0 140,0 "/>
</g>
<g>
<polygon style="fill: #d84747" points="160,0 220,0 220,80 20,80 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="160,0 220,0 220,80 20,80 "/>
</g>
<g>
<rect style="fill: #d84747" x="0" y="100" width="100" height="40"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="0" y="100" width="100" height="40"/>
</g>
<g>
<rect style="fill: #d84747" x="120" y="100" width="100" height="40"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="120" y="100" width="100" height="40"/>
</g>
<g>
<polygon style="fill: #d84747" points="0,150 30,150 80,230 0,230 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="0,150 30,150 80,230 0,230 "/>
</g>
<g>
<polygon style="fill: #d84747" points="50,150 220,150 220,230 100,230 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="50,150 220,150 220,230 100,230 "/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/PR-SVG-20010719/DTD/svg10.dtd">
<svg width="12cm" height="12cm" viewBox="-2 -2 223 233" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<line style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x1="30" y1="150" x2="80" y2="230"/>
<g>
<polygon style="fill: #d84747" points="0,80 0,0 140,0 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="0,80 0,0 140,0 "/>
</g>
<g>
<polygon style="fill: #a1ce5f" points="160,0 220,0 220,80 20,80 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="160,0 220,0 220,80 20,80 "/>
</g>
<g>
<rect style="fill: #4275e1" x="0" y="100" width="100" height="40"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="0" y="100" width="100" height="40"/>
</g>
<g>
<rect style="fill: #4275e1" x="120" y="100" width="100" height="40"/>
<rect style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" x="120" y="100" width="100" height="40"/>
</g>
<g>
<polygon style="fill: #a1ce5f" points="0,150 30,150 80,230 0,230 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="0,150 30,150 80,230 0,230 "/>
</g>
<g>
<polygon style="fill: #a1ce5f" points="50,150 220,150 220,230 100,230 "/>
<polygon style="fill: none; fill-opacity:0; stroke-width: 2; stroke: #000000" points="50,150 220,150 220,230 100,230 "/>
</g>
</svg>
% Techniques
% Alex Hirsch
# Planning
## Meet the Problem
![](images/problem-1.svg)
## Analysis
- Understand the problem
- Relation to similar problems
- Existing solutions
## Dissecting
- Break a big problem into smaller problems
- Often pieces share similarities
- `goto Analysis`
---
![](images/problem-2.svg)
---
![](images/problem-3.svg)
## Problem Description
- Document fully describing the problem
- Mentions every detail discovered
- Result of your analysis process
## Solution
- Start with the big picture
- Block diagrams
- UML
- Define modules
- Purpose
- What to cover
- Define module interaction
- Interfaces between modules
---
- Go through each module
- Critically think about its tasks
- How can it be realised?
- What problems could emerge?
- How does data flow through this module?
## Solution Specification
- Document fully describing the solution
- May contain lots of details
- Needs to communicate the big picture
- Consider it a guide for implementing
## Manging Time
- Split the implementation work into small, manageable tasks
- Critically think about relation ships between tasks
- Does feature A depend on feature B?
- Consider which resources are needed for each task
- Do we need special equipment?
- Who will work on this?
- *Maybe* add time estimates to tasks
## Gantt Chart
![Src: teamgantt.com](images/gantt_chart.png)
## Iterating
- Problem changes over time
- Solution has shortcomings
- Resource situation changes
---
- Update problem description
- Make changes to your solution specification
- Update your management plane accordingly
- Flexibility is paramount
This commonly decides between success and failure.
# Software Architecture
## Modules
- Each module should fulfil a specific purpose
- *Separation of Concerns*
- Modules interact with each other to achieve greater tasks
- Interface of a module
- Module dependencies
- Level of abstraction (high-level vs. low-level)
## Interfaces
- Multiple components need to work together
- Smaller interfaces provide more flexibility
- *Loose coupling*
- Need to be clearly defined
- Should be free from implementation details
## Abstractions
If things get to complicated, adding another layer may help.
---
![](images/abstraction-1.svg)
---
![](images/abstraction-2.svg)
---
- Sometimes introduces more code
- Ensure trade-off is worth it
- Details become less obvious
- The devil is in the detail
- Think in layers
- How far am I from the lowest level
> You aren't gonna need it
## Cross Layer Interaction
![](images/cross_layer_interaction.svg)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment