Monday, April 3, 2017

How to make software design decisions



http://resources.sei.cmu.edu/library/asset-view.cfm?assetid=6265
http://softwareengineering.stackexchange.com/questions/75866/how-to-deal-with-terrible-design-decisions

http://stackoverflow.com/questions/704855/software-design-vs-software-architecture
You're right yes. The architecture of a system is its 'skeleton'. It's the highest level of abstraction of a system. What kind of data storage is present, how do modules interact with each other, what recovery systems are in place. Just like design patterns, there are architectural patterns: MVC, 3-tier layered design, etc.
Software design is about designing the individual modules / components. What are the responsibilities, functions, of module x? Of class Y? What can it do, and what not? What design patterns can be used?
So in short, Software architecture is more about the design of the entire system, while software design emphasizes on module / component / class level.

https://www.slideshare.net/henry.muccini/software-architecture-design-decisions
A designer is faced with a series of design issues
These are sub-problems of the overall design problem.
Each issue normally has several alternative solutions (or
design options)
The designer makes a design decision to resolve each issue.
This process involves choosing the best option
from among the alternatives.

The space of possible designs that could be achieved
by choosing different sets of alternatives.

To take each design decision, the software engineer
uses:
→“current” knowledge
─ the requirements
─ the design as created so far
→and “past” knowledge
─ the technology available
─ what has worked well in the past
─ software design principles and “best practices”

Collection of Requirements and Constraints
Identification of Design Issues
Identification of Design Alternatives
Identification of Design Decisions (DDs)
Selection of architectural Components
Selection of an architectural Solutions that comply to the DDs

According to Anton Jansen and Jan Bosch [4], defining
Architecture as a set of design decisions helps the
architect to:
a. Guard the conceptual Integrity of the Software architecture
b. Communicate effectively the design space exploration
c. Effectively analyze the software architecture and design process
d. Trace design decisions and their relationship to the resulting architecture.

QOC
Questions, Options, Criteria
Questions: key design issues
Options: possible answers
Criteria: assess and compare the options

ADD: what is interesting to discuss?
1. Granularity of design decisions
2. Dependencies among decisions
3. ADD taken in a collaborative way
4. ADD that uses genetic algorithms in order to find
the optimal solution
5. Evolving ADD

Evolving ADD
Requirements, Concerns, technology evolves, and so
the associated design decisions.

https://www.atlassian.com/agile/design
As you just saw, the product owner and the designer will spend time brainstorming and iterating on the product plan early on. Their goal is to validate the business case and make sure the engineering team's time is well spent solving actual problems that actual customers face.
ProTip: This phase is not "sprint zero". It's important to get these fundamentals right, rather than time box them. Starting the program off on sound footing pays dividends throughout the project. So take the time you need. 
After the initial planning and ideation, the product manager and the designer will begin to engage with the development team. Throughout the program, visual and interaction design is iterative–just like the software architecture: figure out the most important problem to solve, and add just enough design (and code) to get feedback on the solution.
As the team engages in sprint planning and backlog grooming, involve the designers. Getting their input when making decisions about the product's future direction will make getting there easier.

https://crowdfavorite.com/agile-design-what-weve-learned/
“The designer isn’t being obsessive, they’re just trying to do right by the user. And the developer isn’t being lazy, they’re just following a process that actually gets things done with minimal navel-gazing. Both sides could learn some important lessons from each other.”
Agile principle: “Individuals and interactions over processes and tools”
Agile principle: “Working software over comprehensive documentation”
Agile principle: “Customer collaboration over contract negotiation”
Agile principle: “Responding to change over following a plan”

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts