Software Architecture

1 - I can do better 2 - Jury's out 3 - Pretty darn good 4 - Splendiferous 5 - Awesometastic by 0 people | Log in to rate

Ranked #49,544 in How-To, #510,507 overall

Huh?? What is software architecture?

If you are a software designer, you have undoubtedly seen the role "software architect" in your travels, and wondered what they do. You have probably also been in design reviews where people were raving about the what a great "software architecture" the system had.

I have seend these guys from a distance, worked with them, and been one on a couple of gigs. One thing is clear; few people can quantify or even qualify a "good" software architecture.

This lens will attempt to focus you on the why, what, and how of software architecture.

Software Modeling & Architecture Videos 


Software Modeling and Architecture Part I

Runtime: 530
10463 views
3 Comments:


Software Modeling and Architecture Part II

Runtime: 593
5387 views
1 Comments:


Runtime:
views
Comments:

curated content from YouTube

Poll: Software Modeling & Architecture Videos 

Loading poll. Please Wait...

Software Architecture Tales 

...personal stories of good and bad software architectures.

Here are a few personal tales of software architectures good & bad.

Good: Years ago a former boss of mine was raving about what a great software architecture the Nortel Norstar product had. I asked why? He said because of the programming model, he was able to implement similar features in a fraction of the time it took developers in the Nortel DMS product. He said that he implemented multiple-appearance directory numbers in 3 weeks, while it took designers in the other product over a year. That product constantly had a short "time-to-market" for new features and profitably dominated the market. That product had a good architecture because it was easy to add new features cheaply.

Good: Years ago I implemented a bit-error testing system for a T1 hardware module. I separated the testing state machine and workflow from the details of the chip interfaces used to drive the tests. I delivered on time and got a good review. The next feature was to implement the same software for a different chip. Because I had isolated the details of the chip interfaces, I was able to reuse the state machines and extend the code. I delivered much earlier than expected and got a great review. That code had a good architecture because it was easy to extend.

Bad: Years ago I was told to listen to a "software architect" and follow his architecture on system initialization. I asked why and I was told because he was an experienced architect. I asked why his design was the right way to design it, and I was told that it was the way it was done with a lot of successful products. (Those products were generally single-controller products while ours was a larged distributed processing product). Nobody, including the architect, could explain why that method of initialization was the best architecture or design. The architecture was not provably good because there were no tests to say so. I had one test that showed that for a distributed system, it would take a very long time to initialize.

Bad: Years ago I had to implement a SNMP subagent for the Entity MIB of a complicated system (thousands of rows). I got it working with a simple table and some code to access the table. My architecture was to write a translation function that mapped the real keys of the entities in the table to indices back and forth. Different entities had different keys. Over time, this proved to be a horrible model because I ended up writing thousands of lines of code to cover the corner cases not addressed by my very basic data structure. Adding new entities and traversing the table became progressively more difficult, hard to implement, hard to debug, and messy. Somebody suggested that I use a lookup table to translate back and forth, and I decided against it. My "simple table/complex translation" architecture was bad because it was hard to extend, debug, and code and got worse over time.

Bad...to Good: More recently, my team and I built a system which enabled client software from other companies' products to talk to our servers. Because of the way we designed the system and the workflows, we had to provide lots of integration support to those companies. Furthermore, we needed a test server to allow them to test our our system, and we needed to then rebuild their software to talk to our servers when they were ready. Adding more client software would have cost a lot of money because of the integration support we had to provide. Our system didn't scale beyond a few clients. We then implemented software that tightened up the interface data flows, and automated the client's communication transfer from the test server to the production server. The new architecture was better because it allowed us to scale up the number of clients.

Software architecture is about doing new things with existing systems.

Scenario Based Architecture Analysis Method 

Plausible reasons to prove "good" architecture

Software architecture is tough to judge. What is a "good" architecture? Why is layering good architecture? Why does normalized data have a good architecture, or why not?

Software architecture talks about the non-functional requirements of the software; i.e. the "-ilities". For example scalability, reliability, evolvability, maintainability, etc. Not all systems need all of the "-ilities" at all times.

Rick Kazman came up with a method in the mid-1990s to help analyze a software architecture. The method is fairly simple.

1) Chop up your software system into "components" and "connectors". A component is typically a large-ish object, or a data schema that is decoupled from the rest of the system, or a chunk of code. A connector is a way to get components to interact, such as an API, or a protocol, or a software virtual machine. Most systems have this intent.

2) For each "-ility" in your requirements, come up with a software development scenario to support the "ilities". For example, you may want to scale your system from the current maximum of 10 users to 100000 users (scalability).

3) For each software development scenario, mark which component and which connector have to change. At the end of the exercise, you will see which components will churn as a result of evolving the software to support the various "-ilities" and new features.

4) An architecture is considered "good" if the number of components and connectors that must be changed is minimal per scenario.

5) An architecture is considered "bad" if every scenario touches a large number of components and connectors.

This method gives tangible evidence to the stakeholders that a software architecture is good. This method also gives a quick picture of which components are sensitive to change. The software architect can then refactor the most sensitive component into a sub-architecture that is less sensitive to change, or put tight processes around the sensitive component.Tangible evidence lets software architects plan appropriate action.

Books from Amazon: A Kick Start To Learning 

...these books also have sneak peeks from Google Book Search.

Patterns of Enterprise Application Architecture

Have a peek at Google Book Search

Avg. Customer Rating: Amazon Rating

Amazon Price: $45.15 (as of 12/04/2009) Buy Now
List Price: $69.99

Software Architecture in Practice (2nd Edition)

Have a peek at Google Book Search

Avg. Customer Rating: Amazon Rating

Amazon Price: $50.80 (as of 12/04/2009) Buy Now
List Price: $74.99

Beyond Software Architecture: Creating and Sustaining Winning Solutions

Have a peek at Google Book Search

Avg. Customer Rating: Amazon Rating

Amazon Price: $37.25 (as of 12/04/2009) Buy Now
List Price: $54.99

Usability & Software Architecture 

Bonnie John from Stanford University presents an insightful lecture on the impact of usability on software architecture.
powered by Youtube

Wikipedia on Software Architecture 

The software architecture of a program or computing system is the structure or structures of the system, which comprise software components, the externally visible properties of those components, and the relationships between them. The term also refers to documentation of a system's software architecture. Documenting software architecture facilitates communication between stakeholders, documents early decisions about high-level design, and allows reuse of design components and patterns between projects.

Software Architecture Stuff on eBay 

Loading Fetching new data from eBay now... please stand by
eBay

by JayGodse

I am a software designer, software architect, and product manager.
(more)

Explore related pages

Create a Lens!