Part 1 - Art of Design about why Design self assessment
art/ärt/Noun 1. The expression or application of human creative skill and imagination, typically in a visual form such as painting or sculpture,...: "the art of the Renaissance" 2. Works produced by such skill and imagination.Synonymscraft - skill - artifice - science - workmanship - knack
de·sign/dəәˈzīn/NounA plan or drawing produced to show the look and functionor workings of a building, garment, or other object beforeit is built or made.
Why Design?Comprehensibility Reduce bugs StabilityCraftsmanshipThis is your legacy
Self Assessment (1-10) Design Patterns Abstractions Object Oriented Areas of Responsibility Programming Separation of Concerns Single Responsibility Principal Security YAGNI Scalability DRY Fault Tolerance
Design PatternsA general rule to a common occurringproblemA pattern or template to solve aparticular constraint
OOPA style of programming segregatingData and Behavior into distinct andisolated units
Single Responsibility A given unit of code should have one objective or use
YAGNIYou Ain’t Gonna Need ItDo not build or design for something thatyou do not have an explicit need for**Yes, I can end in a preposition - I don’t honor obscure latin linguisticrules.
DRYDon’t Repeat YourselfA unit of code should only exist in onelocation (no copy and pasting)
AbstractionsDealing with ideas rather than events
Areas of Responsibility A given Object or section of code is responsible for like-behavior (cohesion)
Separation of Concerns Separating concepts that have low cohesion (e.g. business from view tier)
SecurityHow is data protectedHow is the user protectedHow is the system protectedHow is the protection protected
ScalabilityHow does the system handle underincreasing load - more users, moreactivityScaling horizontally, vertically
Fault ToleranceHow does the system handle errors andfailures
Part 2 - Art of Design Who were some great designers 10 Principles of Good Design Passion
art and engineeringThey say rap and metal can never mix!
Einstein repeatedly argued thatthere must be simpliﬁedexplanations of nature, becauseGod is not capricious or arbitrary.No such faith comforts thesoftware engineer. Much of thecomplexity he must master isarbitrary complexity … becausethey were designed by differentpeople, rather than by God.- Fred P. Brooks, Engineer/Author
Form follows function -that has beenmisunderstood. Formand function should beone, joined in a spiritualunion.- Frank Lloyd Wright,Architect
Where I used to strive formovement andrestlessness I nowattempt to sense andexpress the complete totalcalm of objects and thesurrounding air.- Lyonel Feininger,Master Artist, Bauhaus
Making the solutionseem so completelyinevitable and obvious,so uncontrived andnatural - its so hard!- Jonathan Ive, Apple
Good design is makingsomething intelligible andmemorable. Great designis making somethingmemorable andmeaningful.- Dieter Rams, Designer
Dieter Rams’ Principles of Design Good Design...1. Is Innovative 6. Is Honest2. Makes a Product Useful 7. Is Long-lasting3. Is Aesthetic 8. Is Thorough Down to the Last Detail4. Makes A Product Understandable 9. Is Environmentally Friendly5. Is Unobtrusive 10. Is as Little Design as Possible
Good Design Is Innovative : Thepossibilities for innovation are not, byany means, exhausted. Technologicaldevelopment is always offering newopportunities for innovative design.But innovative design alwaysdevelops in tandem with innovativetechnology, and can never be an endin itself.
Good Design Makes a ProductUseful : A product is bought to beused. It has to satisfy certain criteria,not only functional but alsopsychological and aesthetic. Gooddesign emphasizes the usefulness ofa product while disregarding anythingthat could possibly detract from it.
Good Design Is Aesthetic : Theaesthetic quality of a product isintegral to its usefulness becauseproducts are used every day andhave an effect on people and theirwell-being. Only well-executedobjects can be beautiful.
Good Design Makes A ProductUnderstandable : It clariﬁes theproduct’s structure. Better still, it canmake the product clearly express itsfunction by making use of the user’sintuition. At best, it is self-explanatory.
Good Design Is Unobtrusive : Products fulﬁlling apurpose are like tools. They are neither decorativeobjects nor works of art. Their design should thereforebe both neutral and restrained, to leave room for theuser’s self-expression.
Good Design Is Honest : It does notmake a product more innovative,powerful or valuable than it really is. Itdoes not attempt to manipulate theconsumer with promises that cannotbe kept
Good Design Is Long-lasting : Itavoids being fashionable andtherefore never appears antiquated.Unlike fashionable design, it lastsmany years – even in today’sthrowaway society.
Good Design Is Thorough Down to theLast Detail : Nothing must be arbitrary orleft to chance. Care and accuracy in thedesign process show respect towards theconsumer.
Good Design Is EnvironmentallyFriendly : Design makes an importantcontribution to the preservation of theenvironment. It conserves resourcesand minimizes physical and visualpollution throughout the lifecycle ofthe product.
Good Design Is asLittle Design asPossible : Less, butbetter – because itconcentrates on theessential aspects, andthe products are notburdened with non-essentials. Back to purity,back to simplicity.
Be inspiredInspire othersborrow, don’t copyThis is an artBe passionate
Model prototype code experiment with new methodologies, patterns, practices
Production Write some code Yes, your prototype can become ‘real’ if it’s solid - just don’t lock yourself into one way of thinking about it (always throw-away or always use it)
Sounds like waterfall!? What aboutagile, XP, Kanban, etc.!? I don’t care about your build process - design it first.If you don’t have a design before handyou’re going to create it while coding! Disagree? Show me an example where this has worked out well for everybody
Essence (Creme) Accident (Non-Essential) Object Model Persistence Business Logic Formatting and Serialization Orchestration and Interaction Security, Speed, Stability Platform, Language Batch, Real-time (sync or async) Libraries Size, Resource consumption