Generic
97 Things Every Software Architect Should Know
During my recent Borders’s-browsing, I came across Richard
Monson-Haefel’s book, 97
Things Every Software Architect Should Know with the tag line, “Collective
Wisdom from the Experts”. The book is interesting and even though it falls
short in providing details, gives a good overview of architectural principles. Mind
you, this is not a book with case studies or principles of how to define an
effective interface with example but more of a 10K ft view of software
architectural “principles”. Recently I have seen few books which belong to this
genre of collective wisdom aka geek interviews such as “Secrets
of the Rock Star Programmers: Riding the IT Crest” and “Coders
at work”. I think 97 things is a good addition to this observe-and-report
tradition from people presumably working in the trenches of software
development.
Following is the table of contents and I have highlighted
the chapters/metaphors I liked.
1. Don’t Put Your Resume Ahead of
the Requirements
2. Simplify Essential
Complexity; Diminish Accidental Complexity
3. Chances Are, Your Biggest
Problem Isn’t Technical
4. Communication Is King;
Clarity and Leadership, Its Humble Servants
5. Application Architecture
Determines Application Performance
6. Seek the Value in Requested
Capabilities
7. Stand Up!
8. Everything Will Ultimately
Fail
9. You’re Negotiating More Often
Than You Think
10. Quantify
11. One Line of Working Code Is
Worth 500 of Specification
12. There Is No
One-Size-Fits-All Solution
13. It’s Never Too Early to
Think About Performance
14. Architecting Is About
Balancing
15. Commit-and-Run Is a Crime
16. There Can Be More Than One
17. Business Drives
18. Simplicity Before Generality,
Use Before Reuse
19. Architects Must Be Hands On
20. Continuously Integrate
21. Avoid Scheduling Failures
22. Architectural Tradeoffs
23. Database As a Fortress
24. Use Uncertainty As a Driver
25. Warning: Problems in Mirror
May Be Larger Than They Appear
26. Reuse Is About People and
Education, Not Just Architecture
27. There Is No ‘I’ in
Architecture
28. Get the 1,000-Foot View
29. Try Before Choosing
30. Understand the Business Domain
31. Programming Is an Act of
Design
32. Give Developers Autonomy
33. Time Changes Everything
34. “Software Architect”
Has Only Lowercase a’s; Deal with It
35. Scope Is the Enemy of
Success
36. Value Stewardship Over
Showmanship
37. Software Architecture Has
Ethical Consequences
38. Skyscrapers Aren’t Scalable
39. Heterogeneity Wins
40. It’s All About Performance
41. Engineer in the White Spaces
42. Talk the Talk
43. Context Is King
44. Dwarves, Elves, Wizards, and
Kings
45. Learn from Architects of
Buildings
46. Fight Repetition
47. Welcome to the Real World
48. Don’t Control, but Observe
49. Janus the Architect
50. Architects’ Focus Is on the
Boundaries and Interfaces
51. Empower Developers
52. Record Your Rationale
53. Challenge
Assumptions—Especially Your Own
54. Share Your Knowledge and
Experiences
55. Pattern Pathology
56. Don’t Stretch the Architecture
Metaphors
57. Focus on Application
Support and Maintenance
58. Prepare to Pick Two
59. Prefer Principles, Axioms,
and Analogies to Opinion and Taste
60. Start with a Walking Skeleton
61. It Is All About The Data
62. Make Sure the Simple Stuff Is
Simple
63. Before Anything, an
Architect Is a Developer
64. The ROI Variable
65. Your System Is Legacy; Design
for It
66. If There Is Only One
Solution, Get a Second Opinion
67. Understand the Impact of
Change
68. You Have to Understand
Hardware, Too
69. Shortcuts Now Are Paid Back
with Interest Later
70. “Perfect” Is the
Enemy of “Good Enough”
71. Avoid “Good Ideas”
72. Great Content Creates Great
Systems
73. The Business Versus the Angry
Architect
74. Stretch Key Dimensions to
See What Breaks
75. If You Design It, You
Should Be Able to Code It
76. A Rose by Any Other Name Will
End Up As a Cabbage
77. Stable Problems Get
High-Quality Solutions
78. It Takes Diligence
79. Take Responsibility for
Your Decisions
80. Don’t Be Clever
81. Choose Your Weapons Carefully,
Relinquish Them Reluctantly
82. Your Customer Is Not Your
Customer
83. It Will Never Look Like That
84. Choose Frameworks That Play
Well with Others
85. Make a Strong Business Case
86. Control the Data, Not Just the
Code
87. Pay Down Your Technical
Debt
88. Don’t Be a Problem Solver
89. Build Systems to Be Zuhanden
90. Find and Retain Passionate
Problem Solvers
91. Software Doesn’t Really Exist
92. Learn a New Language
93. You Can’t Future-Proof
Solutions
94. The User Acceptance Problem
95. The Importance of Consommé
96. For the End User, the
Interface Is the System
97. Great Software Is Not Built,
It Is Grown
Note to Self – Helpful links in getting MVC to work on IIS 5.0
Helpful links in getting MVC to work on IIS 5.0
Using ASP.NET MVC on IIS 5
http://blogs.microsoft.co.il/blogs/dorony/archive/2007/12/15/using-asp-net-mvc-on-iis-5.aspx
and if you encounter the same error as I did
ASP.NET 2.0 Application on IIS 5 Resulting in Error (aspnet_wp.exe (PID: XXXX) stopped unexpectedly.)
http://stackoverflow.com/questions/233478/asp-net-2-0-application-on-iis-5-resulting-in-error-aspnetwp-exe-pid-xxxx-s
SQL Azure Talk @ Orange County SQL User Group
Last night I spoke to Orange County SQL user group on SQL Azure, Microsoft’s cloud based relational database. SQL Azure, dubbed as re-launch of SQL Data Services (SDS) (and later SQL Services) is a cloud-based service from Microsoft offering data storage capabilities for Azure Services Platform. In the talk I discussed the challenges of putting a relational database in the cloud and Microsoft’s adaption to user feedback that they wanted SQL server in the cloud and not a schema-less entity-attribute value tables as offered by other vendors and previously was the main focus of SDS. Azure team changed course for a better customer targeted implementation catering to the relational cloud even though conventional wisdom states that relational databases aren’t as scalable as the schemaless Entity-Attribute-Value (EAV) tables used by Amazon SimpleDB, and Google’s BigTable and the App Engine’s data store.
Slides SQL Azure Presentation.pptx and code sample Connectivity.rar
Not surprisingly, a lot of focus during these talks are put on short-comings of the SQL Azure instead of the wonderful capabilities it offer. Being a VLDB aficionado, I found the attempt of putting the relational database in the cloud quite heroic to be honest. Like any v1 product, there are certain limitations but again IMHO, community needs to understand the large scale distributed database implementation issues and therefore comparing it against SQL 2008 on premise is not really an apple to apple comparison.
Along with slides and code samples, I demonstrated the connectivity from SSMS (workaround for connecting with SQL Server Management Studio), discussed SQL Azure Pricing and SQL Azure SLA (Service Level Agreement) for which “Monthly Availability” of 99.9% with a 9.99 fee, is pretty awesome.
- Web Edition: Up to 1 GB relational database = $9.99 / month
- Business Edition: Up to 10 GB relational database = $99.99 / month
- Bandwidth = $0.10 in / $0.15 out / GB
The new and improved control panel allows to do simple tasks such as firewall IP additions, connection strings and database provisioning quite easy.
When connecting to SQL Azure, please ensure that your firewall settings (as shown below) includes the IP range you are trying to connect from.
Feedback from Attendees (in the order of strong opinions)
· Connectivity with SSMS needs to be fixed ASAP to avoid the workarounds
· 10GB is too small and makes the v1 not enterprise ready.
· Error log un-availability in V1 could be a deal breaker for some DBA’s.
· SQL Agent Support is an absolute must have from a DR and on-premise replica standpoint.
· Programmatic way of finding the size of database
· Linked Server Support is really important.
· CLR Support is needed for a lot of practical purposes.
· SQL Profiler support should be there.
The slides, code samples and links from the talk are as follows.
· SQL Azure, Let’s get started – Lynn Langit
· SQL Azure Migration Wizard v1.9
· SQL Azure Explorer on Channel 9
· David Yack on Starting with SQL Azure
· geekSpeak: REST and the Windows Azure Services Platform with Adnan Masood
· Getting Started with SQL Azure | David Gristwood | Channel 9
· Hands on with SQL Azure (CTP 2) | David Gristwood | Channel 9
· Billing system testing behind Microsoft’s SQL Azure outage this week
· Amazon Attempts to Preempt PDC 2009 Release of SQL Azure with MySQL 5.1 Relational Database Service
· SQL Data Services Abandons REST for TDS API and Knocks My Socks Off
· Frequently asked Questions about SQL Azure
· Stephen Forte`s Blog – Building a RESTful application with SQL Azure
· Project Rivera, Windows Azure Code samples
PS. Conveniently Amazon attempts to Preempt PDC 2009 Release of SQL Azure with MySQL 5.1 Relational Database Service Amazon Relational Database Service (Amazon RDS) Beta, announced on 10/27/2009, which delivers pre-configured MySQL 5.1 instances with up to 68 GB of memory and 26 ECUs (8 virtual cores with 3.25 ECUs each) servicing up to 1 TB of data storage
Why is naïve Bayesian, naïve?
If I had a dollar for every time someone asked me this question, I would have enough money to buy Trevor Hastie’s The Elements of Statistical Learning Second Edition
. Anyways, here is a good explanation from Algorithm’s of the intelligent web on what is so naïve about naïve Bayesian?
“This
is the calculation of the conditional probabilities p(Y|X).
The term naïve has its origin
in this method. Note that we’re seeking the probability of occurrence for a
particular instance,
given a particular concept. But each instance is uniquely determined by
the unique values of its attributes. The conditional probability of the
instance is, in essence,
the joint probability of all the attribute value conditional probabilities.
Each attribute
value conditional probability is given by the term (aV.getCount()/concept-Priors.get(c)). In the preceding implementation, it’s assumed that all
these attribute values
are statistically independent, so the joint probability is simply the product of
the individual probabilities for each attribute value. That’s the “naïve” part.
In general, without
the statistical independence of the attributes, the joint probability wouldn’t
be equal to that product.”
And the interesting part is
“We
use quotes around the word naïve because it turns out that the naïve Bayes algorithm
is very robust and widely applicable, even in problems where the attribute independence
assumption is clearly violated. In fact, it can be shown that the naïve Bayes
algorithm is optimal in the exact opposite case—when there’s a completely deterministic
dependency among the attributes”
BTW, Algorithm’s of the intelligent web is this excellent book by Haralambos Marmanis and Babenko Dmitry; recommended reading.
Theory Day @ Georgia Tech – Algorithms, Combinatorics and Optimization
ACO, a multidisciplinary PhD Program in Algorithms, Combinatorics and Optimization at the Georgia Institute of Technology, will be streaming live lectures by four prominent computer scientists. Live web streaming available at no charge.
Theory Day Celebrating 50th Anniversary of Foundations of Computer Science and 20th Anniversary of the ACO Program at Georgia Tech Held in conjunction with FOCS 2009 on Saturday, October 24, 2009 in the LeCraw Auditorium on the Georgia Tech campus. The event will be webcast live from the link below and will consist of one hour lectures by
12:30-1:30 Richard Karp, University of California, Berkeley What Makes an Algorithm Great?
1:50-2:50 Mihalis Yannakakis, Columbia University Computational Aspects of Equilibria
3:10-4:10 Noga Alon, Tel Aviv University Disjoint paths, isoperimetric problems, and graph eigenvalues
5:00-6:00 Manuel Blum, Carnegie Mellon University Can (Theoretical Computer) Science come to grips with Consciousness?
The times listed are EDT, same time zone as New York.
To register, for more information and to watch the lectures live please visit
http://www.aco.gatech.edu/conference/focs-aco/
Videos of the lectures will be archived at the same location.
ACO is a multidisciplinary PhD Program in Algorithms, Combinatorics and Optimization at the Georgia Institute of Technology.
via Jeff Bergman
Debugging Tips & Tricks with Paul Sheriff – SGV.NET User Group Meeting – Wed 21st Oct 2009
Paul Sheriff will be speaking to our user group Wednesday night on Debugging tips and tricks. With his interactive and easy to understand presentation style, his sessions are highly recommended. Details below.
Wed 21st Oct 2009
Abstract: If you have not really dug into the VS.NET debugger, then this seminar is for you. You will explore all the various breakpoint, tracepoint, data tips, and the myriad features that this powerful debugger let’s you use. You will see how to set conditional breakpoints, learn to filter threads based on their thread id, and learn the difference between the Watch window, locals and immediate window.
You Will Learn:
1. Set breakpoints with hit counts, filters, conditions.
2. See how to use data tips, visualizers, and make object ids
3. See when objects are about to be garbage collected
4. Learn how exception handling can be used as a debugging aid
About the Presenter: Paul D. Sheriff is the President of PDSA, Inc. (www.pdsa.com), a Microsoft Partner in Southern California. Paul acts as the Microsoft Regional Director for Southern California assisting the local Microsoft offices with several of their events each year and being an evangelist for them. Paul has authored several books, webcasts, videos and articles on .NET, SQL Server and SharePoint. Paul can be reached via email at PSheriff@pdsa.com or at Paul Sheriff’s Inner Circle (www.PaulSheriffInnerCircle.com).
Meeting Agenda:
* 6:00p Mixer/Networking/Pizza
* 6:30p Presentation Starts
* 7:30p Break
* 7:45p Presentation Resumes
* 8:45p Raffle
Directions: Park in parking structure at 570 E Huntington Dr, Monrovia, CA 91016 . Meeting is across the street in 605 E Huntington Dr. Once parked, use the overhead walk way to get to the building. The meeting will be right inside the door after the walk way.
This is a Green Dot Corporation sponsored event. There is no entry fee and the event is free for attendees.
Web Application Testing using WATIN – Speaking to South Bay .NET User Group
Tomorrow
I will be speaking to the Southbay.NET users group in Torrance.
Following is the abstract of my talk. For details and directions,
please see the link below.
Web Application Testing using WATIN
Thursday, October 8th, 2009 at 6:30 PM
Web
application testing is a tough task especially in the ASP.NET web forms
environment where model‐view‐controller boundaries intermingle. To
solve this presentation is a premier to WatiN (inspired from WatiR, its
Ruby counterpart), a feature rich and stable framework. WatiN is
developed in C# and aims to bring you an easy way to automate your
tests with Internet Explorer and FireFox using .Net. Watin is
open‐source functional testing tool for web‐applications which simulate
the user actions (filling/submitting form), drives the browser and
allows you to do your web application testing in a convenient and
developer friendly way. This talk focuses on how you can use WatiN to
do web application testing and integrate it with your acceptance
testing framework. The presenter provides a step by step guide to build
test frameworks for your website using WatiN. This is a code intensive
talk so those allergic to slides are encouraged to come.
Windows 7 Developer Boot Camp – Free Training
Free Developer Training for Windows 7 Developers in LA Area.
“Jump-start your Windows 7 experience by joining some of the top Windows
7 engineers, including Mark Russinovich, Landy Wang, and Arun Kishan,
for an intense, high quality boot camp. Whether you are looking to
create more performant, reliable, or secure applications, or you are an
application developer looking to leapfrog past your competition, this
FREE Boot Camp can get you from zero to hero in less than eight hours!
This fast-paced Windows 7 marathon will cover it all including: (1)
Kernel and architectural improvements, (2) new shell integration
points: taskbar, libraries and search, and (3) applied tips for getting
the most out of today’s hardware with the sensor & location
platform, multitouch, and the new graphics libraries (Direct2D, DirectX
11) that take advantage of the GPU. Whether you’re a C++, C# or Visual
Basic developer, building a .NET or a Win32 application, we’ll give you
actionable tips to get the most out of the Windows platform.”
How to Register:
Yes, you’ll have to register through the regular registration site.
Simply select “pre-conference workshop only” as your registration type
and when you get to the workshop selection page of the registration
form, you’ll be able to pick the Windows 7 bootcamp as a free item. The
workshop is indeed on Monday Nov 16th.
Details here: http://microsoftpdc.com/Sessions/WKSP08
WCF Interoperability – ASMX, WCF or MVC REST SDK – Open Questions
A while ago I did a blog
post on WCF-ASMX interoperability which came out from an experience I had in service collaboration with a partner. In a recent conversation
with Jeff Bergman, a friend
and co-worker, there was a question of WCF or not to WCF on a project which
requires similar service interop and since I believe in Atwood’s theory of strong opinions
held weekly, I jumped in with the opinion of using WCF contrary to my
own earlier recommendation.
Jeff of course disagreed and pointed out the Christian’s Weyer’s
article on flattening. For my excellent
logging and tracing in WCF argument, he stated that “for asmx, you can add the [SoapLoggerExtensionAttribute]
to get some kind of logging of soap requests”. Therefore I am quoting his argument below; I am still somewhat unconvinced ‘in principle’ but pragmatically speaking, he drives a hard bargain!
day, I think the WCF architecture is powerful but with power comes complexity,
complexity in configuration files and complexity in the wsdl it generates and
complexity in the pipeline architecture and how you can plug into it.
team has developed the MVC Rest SDK.
I prefer convention
over configuration and simplicity of code instead of injection as a general
principle.
My preference would to
be to use WCF in situations where you have more control over the client
(internal uses mainly) and want to support different communication
channels. At the end of the day when dealing with partners,
Interoperability is the biggest challenge and making things as simple to
consume as possible is desirable.”
Have you encountered an interop issue with your WCF service and
what has been your approach? Leave a comment or email me.
Call for Volunteers – SoCal Code Camp – LA @ USC – November 21-22, 2009
Call for volunteers: Seeking volunteers for the code camp support team to help register James Lin and I are heading up Volunteer Coordination effort so if you are available please contact us directly via my email (my full name @ gmail.com or james at chasecom dot com and put volunteer in subject line). You can also sign up via the “Contacts” menu of www.socalcodecamp.com. Thanks! Adnan Masood President & Co-Founder San Gabriel Valley .NET Developers Group
speakers, attendees, & help with general organization on the
up coming SoCal Code Code Camp LA event days (Saturday/Sunday Nov 21/22).
Volunteer Coordinator
SoCal.NET Code Camp
www.SoCalCodeCamp.com
www.SGVdotNet.org