Daniel Kahneman and Amos Tversky in 1979. They defined this phenomenon as “the tendency to underestimate the amount of time needed to complete a future task, due in part to the reliance on overly optimistic performance scenarios.” entrepreneur.com/article/350045
this initialization lap something happened which apparently caused the steering control signal to go to NaN and subsequently the steering locked to the maximum value to the right.
answers three questions: ▪ What are the structural elements of the system? ▪ How are they related to each other? ▪ What are the underlying principles and rationale that guide the answers to the previous two questions?
of a project is the motivation behind certain decisions. A new person coming on to a project may be perplexed, baffled, delighted, or infuriated by some past decision. Michael Nygard cognitect.com/blog/2011/11/15/documenting-architecture-decisions
two choices: 1. Blindly accept the decision. 2. Blindly change it. It’s better to avoid either blind acceptance or blind reversal. Michael Nygard cognitect.com/blog/2011/11/15/documenting-architecture-decisions
decisions: those that affect the structure, non-functional characteristics, dependencies, interfaces, or construction techniques. Michael Nygard cognitect.com/blog/2011/11/15/documenting-architecture-decisions
a format similar to an Alexandrian pattern. Each record describes a set of forces and a single decision in response to those forces. Note that the decision is the central piece here, so specific forces may appear in multiple ADRs. Michael Nygard cognitect.com/blog/2011/11/15/documenting-architecture-decisions
to 10 books at a time ▪ A member cannot borrow any more books if they have any overdue loans ▪ A book loan lasts for 4 weeks before becoming overdue ▪ When an overdue book is returned, the member is fined an amount based on the number of days overdue ▪ Members can pay off all or part of their balance of fines ▪ A loan can be renewed up to 3 times by a member ▪ A librarian is responsible for registering new members with the system ▪ A librarian is responsible for registering new books with the system ▪ Persistence is based on an in-memory database that maps directly to the object model of the library ▪ Security is with respect to the OS
for the library — children pay less for overdue books ▪ Add a reference section to the library, with books that remain in the library and cannot be borrowed ▪ Support additional services for members at the library, such as email access ▪ Add other media for borrowing, such as DVDs ▪ Allow members to reserve books that are not currently available for loan ▪ ...
* 1 * 1 * 1 1 1 1 1 1 1 1 1 1 * * 0..1 There will be more classes than shown here, such as for simple value types (e.g., ISBN, money, date) and exceptions, as well as infrastructure classes
library system? Feature Backlog ▪ Support child membership for the library — children pay less for overdue books ▪ Add a reference section to the library, with books that remain in the library and cannot be borrowed ▪ Support additional services for members at the library, such as email access ▪ Add other media for borrowing, such as DVDs ▪ Allow members to reserve books that are not currently available for loan ▪ ... Loan Member Book Copy Book Title Membership Loaning Catalogue Library * 1 * 1 * 1 1 1 1 1 1 1 1 1 1 * * 0 . . 1 A Loan Member Book Copy Book Title Membership Loaning Catalogue Library * 1 * 1 * 1 1 1 1 1 1 1 1 1 1 * * 0 . . 1 B
* 1 * 1 * 1 1 1 1 1 1 1 1 1 1 * * 0 . . 1 B is the most appropriate packaging, because the changes () listed in the backlog will be more localised. Loan Member Book Copy Book Title Membership Loaning Catalogue Library * 1 * 1 * 1 1 1 1 1 1 1 1 1 1 * * 0 . . 1 Feature Backlog ▪ Support child membership for the library — children pay less for overdue books ▪ Add a reference section to the library, with books that remain in the library and cannot be borrowed ▪ Support additional services for members at the library, such as email access ▪ Add other media for borrowing, such as DVDs ▪ Allow members to reserve books that are not currently available for loan ▪ ... A B
are developing a library system and have an object model that contains classes for members, loans, book copies and book titles, the core of the model, plus library and associated aggregate management objects for membership, loaning and catalogue. We can package according to technical role or 'layer' in system, i.e., have a manager layer above the entity layer, or we can package according to the subdomain, e.g., membership, loaning and catalogue. ## Decision We partition the packages according to the subdomain, because this is most likely to localise changes already found in the backlog, i.e., changes are localised to membership or to catalogue rather than cutting through all layers. ## Status Accepted ## Consequences - Local package and, therefore, deployment stability in the face of most anticipated changes. - Some responsibilities can be easily moved from entity to aggregate or vice versa without affecting other packages. - As it stands, this design results in cyclic dependencies between packages. - If we change manager or entity policy, that will affect more packages than the alternative design.
a library system and have an object model that contains classes for members, loans, book copies and book titles, the core of the model, plus library and associated aggregate management objects for membership, loaning and catalogue. We can package according to technical role or 'layer' in system, i.e., have a manager layer above the entity layer, or we can package according to the subdomain, e.g., membership, loaning and catalogue. Decision We partition the packages according to the subdomain, because this is most likely to localise changes already found in the backlog, i.e., changes are localised to membership or to catalogue rather than cutting through all layers. Status Accepted Consequences ▪ Local package and, therefore, deployment stability in the face of most anticipated changes. ▪ Some responsibilities can be easily moved from entity to aggregate or vice versa without affecting other packages. ▪ As it stands, this design results in cyclic dependencies between packages. ▪ If we change manager or entity policy, that will affect more packages than the alternative design.
Context We are developing a library system and have an object model that contains classes for members, loans, book copies and book titles, the core of the model, plus library and associated aggregate management objects for membership, loaning and catalogue. We can package according to technical role or 'layer' in system, i.e., have a manager layer above the entity layer, or we can package according to the subdomain, e.g., membership, loaning and catalogue. Decision We partition the packages according to the technical role, i.e., the relative layer in the code, because this groups similar code concepts, styles and dependencies together: manager objects are separated from entity objects, which are a lower layer. Status Rejected Consequences ▪ Changes to manager or entity policy are localised with respect to a manager package or entity package. ▪ The system, manager and entity packages form a strict hierarchy, with no cyclic dependencies between packages. ▪ Changing responsibilities between managers and entities will affect both packages. ▪ All packages will be affected — and hence have to be redeployed — for any of the anticipated changes.
ways, an architect needs to take a step back. Instead of trying to decide between options A and B, the question becomes “How do I design so that the choice between A and B is less significant?” The most interesting thing is not actually the choice between A and B, but the fact that there is a choice between A and B. Kevlin Henney “Use Uncertainty As a Driver” kevlinhenney.medium.com/https-medium-com-kevlinhenney-use-uncertainty-as-a-driver-493ebebd575d
difficult design decisions or design decisions which are likely to change. Each module is then designed to hide such a decision from the others. David Parnas “Information Distribution Aspects of Design Methodology”