Talking about architecture
More importantly, practicing it
Meaning, making sure YOU practice it
From RFP through review
No prior architectural experience required
the "ities": Integrity, Simplicity, Reliability, Extensibility, Maintainability, Modularity, Recoverability, Composability, Parsimony, Scalability, Security, Performability, Longevity, and so on...
make it easy for developers to make "right" decisions (where "right" => "right for this project or system")
in other words, enable "correctness by default"
or, rather, have developers using our architecture "fall naturally into the pit of success"
NOT as a "pick from column A, pick from column B"
NOT a "you must have one of each of these"
Instead, this is just a scaffold/structure
a way to frame some thoughts
a way to help constrain some thoughts
a starting point for approaching a project
Please season to taste/suit your own needs
Communication/Distribution
Presentation/Interaction
State Management
Processing
Resource Management
Tools
Transport
Over what medium does the communication travel?
Examples: TCP, UDP, ICMP, HTTP, named pipes, filesystem, queues, and more ...
Exchange
How do we interact?
Examples: request/response, solicit-notify, async, fire-and-forget, and more ...
Format
In what format does the data travel?
Examples: XML, code, text, JSON, raw binary, serialized objects, and more ...
style
Graphical
Console
None
implementation
Markup (HTML, Acrobat)
Code (WinForms, native, etc)
perspectives
User, Administrative, Reported, ...
composite
Aggregates multiple applications into one
Based around a single style
Durable vs. Transient State
state held across processing steps vs...
state held during processing
Relational vs. Object vs. Hierarchical vs ...
what is the "shape" of the data?
note that NoSQL databases add a lot more shapes...-- document, graph, key-value, ...
Context-based vs. Process-based state
where is the transient state held?
Implementation
Procedural/Imperative
Classes/Objects
Declarative
Functional
Rules
Meta-object/Meta-programmatic
Transactional
Divide and Conquer
Recursive Data
Pipeline/Pipes-and-Filters
Event-based Coordination
Master/Slave, Fork/Join
Shared Data
Shared Queue
Locator/Registry
Discovery
Injected
A priori Knowledge
General-purpose Languages
Strongly-typed: C#, Java, C++, C, Pascal, ...
Weakly-typed: Smalltalk, Jscript, Ruby, ...
Problem-specific Languages
SQL, XQuery, XPath, XSLT, sed, awk, grep, VBA, games, Workflow, ...
Code manipulation tools
IDEs, instrumentation, static analysis, debugger, ...
Software Factories & DSLs
Code generators
Libraries/Frameworks
Data formats
XAML, XUL, HTML, resource files, ...
Documentation
Kata: a series of moves, as in martial arts, designed to give the student an opportunity to practice more than just an individual movement
Coding Kata: a small challenge or problem designed to give the programming student an opportunity to practice more than just "Hello World"
Architectural Kata: a small project designed to give the architectural student an opportunity to practice more than just a coding kata
Step One: assemble your team
Step Two: visit http://www.architecturalkatas.com
Step Three: When you are ready, click the big blue button
what is the principal "-ity" of the project, in tech terms?
who are your users? administrators? Stakeholders?
where are the "big rocks"? where will the major complexities come from?
what technological risks is your architecture taking?
what does the cost structure look like, both up-front and on a periodic basis?
what will the software designs look like? what software packages will you be using?
Who is this guy?
Architect, Engineering Manager/Leader, "force multiplier"
Principal -- Neward & Associates
http://www.newardassociates.com
Educative (http://educative.io) Author
Performance Management for Engineering Managers
Author
Professional F# 2.0 (w/Erickson, et al; Wrox, 2010)
Effective Enterprise Java (Addison-Wesley, 2004)
SSCLI Essentials (w/Stutz, et al; OReilly, 2003)
Server-Based Java Programming (Manning, 2000)