{"id":33,"date":"2019-03-16T20:52:47","date_gmt":"2019-03-16T20:52:47","guid":{"rendered":"http:\/\/barry.phease.nz\/blog\/?p=33"},"modified":"2019-03-16T20:52:47","modified_gmt":"2019-03-16T20:52:47","slug":"how-much-design-is-enough","status":"publish","type":"post","link":"http:\/\/barry.phease.nz\/blog\/?p=33","title":{"rendered":"How much design is enough?"},"content":{"rendered":"\n<p>Our clients have different requirements\n with regard to design. &nbsp;Some want signed-off design documents before \nstarting development others are satisfied with as-built documents and \nsome think even that is overkill. &nbsp;Who is right? &nbsp;Or does it depend on \ncircumstances?<\/p>\n\n\n\n<p>Why design?<\/p>\n\n\n\n<p>Everything needs to be designed even if it is just made up on the fly by the developer(s). &nbsp;Do we want to document the design?<\/p>\n\n\n\n<p>Design is a conversation between the \nvarious stakeholders in the project \u2013 present and future. &nbsp;It may take \nthe form of a formal design document, or it may be 3 people standing \naround a whiteboard. &nbsp;The important point is that all finish with a \nshared understanding of what is to be built and why. &nbsp;The needs of \ncurrent participants are easily satisfied, but what about future needs? \n&nbsp;Does the design collateral help the people that need to maintain\/extend\n the software? &nbsp;What happens if someone leaves and takes their design \nunderstanding with them?&nbsp;<\/p>\n\n\n\n<p>Advantages of Formal Design Documents<\/p>\n\n\n\n<p>In formal engagements a signed-off design\n document forms the basis of a contract between the project sponsor and \nthe developers. &nbsp;The delivered software is tested against the \nrequirements, but code-reviews are matched to the design. &nbsp;The design \ncan be reviewed in advance to see that the planned approach meets the \nneeds of the project and fits the infrastructure before the expense of \nbuilding is incurred, and this can avoid costly rework.<\/p>\n\n\n\n<p>Where a large number of different parties\n are involved (business, infrastructure, networks, application \ndevelopers, testers etc) a formal design document gives everyone a clear\n picture of what their tasks are and how they are matched to the needs \nof the other parties. &nbsp;it allows a project manager to allocate work and \ncheck progress.<\/p>\n\n\n\n<p>For enterprise requirements (e.g. \nsecurity, performance, non-interference with other projects etc) a \ndesign document gives peripheral actors a chance to have their input. \n&nbsp;This is important where strong governance processes are in play. \n&nbsp;Everyone can have confidence that their needs have been considered \nbefore signing off.<\/p>\n\n\n\n<p>The design document provides a place to \ndocument the design decisions that were made. &nbsp;It is important for \npeople who come later to understand the reasons for choosing various \noptions. &nbsp;This avoids relitigating decisions but also allows a \nre-examination of the options when conditions change.<\/p>\n\n\n\n<p>Advantages of Informal Design<\/p>\n\n\n\n<p>in smaller projects a design document may\n not be needed. &nbsp;A daily standup can provide a forum to discuss any \ndesign decisions required. &nbsp;The outcome should be recorded in the \nproject backlog. &nbsp;Comments in the code and\/or scripts should be used \nliberally to allow future participants (or current ones with \nnon-exceptional memories) to understand why things are done. &nbsp;This can \nprovide the needs of documented design without the overheads. &nbsp;<\/p>\n\n\n\n<p>A decision can be made in the morning and\n incorporated in code, checked in, built and tested all the same day. \n&nbsp;This way the documentation is always up to date. &nbsp;The documentation is \nalways available as it is saved in the CMDB with the source. &nbsp;Depending \non the tooling used the documentation can often be extracted (e.g. \njavadoc) and made available at the end of a project without the expense \nof developing as-built documents.<\/p>\n\n\n\n<p>Where should design be stored?<\/p>\n\n\n\n<p>Often organisations have formal document \nmanagement or record keeping systems for design documents. &nbsp;It is often \ndifficult to find the most up-to-date version and often even the most \nup-to-date version is not updated during the project so doesn\u2019t reflect \nwhat was actually built. &nbsp;This can be a problem for later projects as \nthey have to undertake an expensive discovery phase to find out what the\n real state is. &nbsp;Mature organisations can handle this, and it may be \ncorrect for them.<\/p>\n\n\n\n<p>In general the documentation should be \nstored in the CMDB along with the code. &nbsp;The same \nversioning\/branching\/tagging processes that make source code management \neasy, ensure that the documentation matches the deployed artefacts. \n&nbsp;However, they don\u2019t ensure that it is up-to-date. &nbsp;A design document \nshould always be supplemented by access to code and deployed artefacts. &nbsp;<\/p>\n\n\n\n<p>A good project-close-out process will \nhave a supplementary document describing what was actually built. &nbsp;This \ncan be an appendix to the design document describing variations and \nreasons for them. &nbsp;This can also be a separate as-built document. &nbsp;At \nthe least it should be release notes with a manifest of deployed \nartefacts along with where to find the (commented &amp; versioned) \ncode\/configuration items.<\/p>\n\n\n\n<p>Design for Integration<\/p>\n\n\n\n<p>Integration projects have particular \nneeds. &nbsp;There are always several different products involved. &nbsp;A clearly\n defined interface is almost always required up-front.<\/p>\n\n\n\n<p>If new integration applications are \nrequired then the project looks like any software project with \ninfrastructure, software, networking requirements. &nbsp;The organisation\u2019s \nnormal design processes are used.<\/p>\n\n\n\n<p>For service development, the design needs\n to articulate the different parties involved in the service and how \nthey interact. &nbsp;Parts of the design (e.g orchestration, mediation) are \noften dependent on the product set used as they will normally have \ngraphical design tools that match design to implementation. &nbsp;The \ninterface and data design will usually use some sort of entity design \ntool like Sparx EA.<\/p>\n\n\n\n<p>It is useful to have a catalogue of \nservices in use and how they interact. &nbsp;This can be a spreadsheet, but \noften the linkages are more involved and a 2 dimensional table cannot \neasily represent them. &nbsp;A graph database may be an option to capture all\n the dependencies.<\/p>\n\n\n\n<p>Conclusion<\/p>\n\n\n\n<p>There is no right answer for how to \ndocument design. &nbsp;That is no excuse for assuming that no design is \nnecessary. &nbsp;Sometimes it is only after the project is finished (and the \nnext one underway) that you know whether your design strategy has been \nsuccessful.<\/p>\n\n\n\n<p>One thing is always true. &nbsp;Design is \nnever \u201cfinished\u201d. &nbsp;Even in a waterfall process with signed-off designs \nbefore coding starts there will always be further design decisions to be\n made as the project proceeds. &nbsp;the design process should recognise this\n and make sure that whatever is produced is still of value at the end of\n the project.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Our clients have different requirements with regard to design. &nbsp;Some want signed-off design documents before starting development others are satisfied with as-built documents and some think even that is overkill. &nbsp;Who is right? &nbsp;Or does it depend on circumstances? Why design? Everything needs to be designed even if it is just made up on the &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/barry.phease.nz\/blog\/?p=33\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;How much design is enough?&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[2],"_links":{"self":[{"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=\/wp\/v2\/posts\/33"}],"collection":[{"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=33"}],"version-history":[{"count":1,"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=\/wp\/v2\/posts\/33\/revisions"}],"predecessor-version":[{"id":34,"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=\/wp\/v2\/posts\/33\/revisions\/34"}],"wp:attachment":[{"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=33"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=33"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/barry.phease.nz\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=33"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}