My Gestalt

Understand the chaotic world by developing meaningful perception through the acquisition of seemingly disparate knowledge.

Collect information in large quantity with precise detail and connect the dots of meaning to form your own picture of the universe.

Act upon it

Knowledge and understanding without action is waste.

Be Grateful

Never underestimate the power of gratitude.


Forgiveness will make your heart happy. Forgiveness is not about someone deserving it, it's about healing your heart.


Older Stuff

It's 2016 and WOW do I have a tale to tell


I have been working on an Architectural Idea for the last 2 years and I am finally ready to talk about it.

I have discovered some very interesting methodologies that fit perfectly into Distributed Domain Driven Design, Stateless Messaging, Asynchronous, Scalable Services, Event Sourcing as well as Data Lakes and I am loving the patterns that have emerged. The way that the gestalt has led me to something amazing and fun to work with has changed the way I think about everything. I will disseminate my findings and talk at length about a process I know will be very beneficial to some hard working DotNet folks!

Stay Tuned!

Here is the first article

Awarded MVP for 2014


I was awarded Microsoft MVP for the 10th year in a row. A decade of awards for helping the local and national developer community. Wow! Just Wow! Thank you Microsoft and the developer community for continuing to inspire me to keep talking to people about the development processes and techniques I use.

Awarded MVP for 2013


I was awarded Microsoft MVP for the 9th year in a row. Again, my gratitude and thanks go out to Microsoft and the Community who nominated me for this terrific award. It's hard to believe another year has gone by and I am still heavily involved in the local and national developer community as well as the improvement of software development languages in general. I've helped start a couple new User Groups in Phoenix this year. RavenDB User Group and the Phoenix CanJS User Group.
This is going to be a great year!

Awarded MVP for 2012


I was awarded Microsoft MVP for the 8th year in a row. My gratitude and thanks go out to Microsoft and the Community who nominated me for this prestigious award. I look forward to continue to serve the developer community and the improvement of software development languages.

New Tooling Section Added


I use a bunch of different tools for several different development environments (all usually at the same time). What are the Tools on my current Hit Parade? Find them here.



This Site is a repository for all my Slides and Articles as well as my Journal/Blog

My Blog tends to be very subjective to whatever I am thinking about, whereas the Articles are targeted more towards specific samples.

Here is my link to Full Articles, expect to see more of them on topics that interest me such as:

  • Architecture
  • Tablets
  • SOA
  • Developer Productivity

Feedback is welcome if you see things you like or don't like about how I am structuring things.


A New Day for a New Architecture

Since I wrote the entry that appears below this one in "Interesting Ideas", I have done some serious work and investigation into just what should a "Modern Architecture" look like?

For enterprise development it starts looking something like this:

Let me explain what is going on here.

We have Public Interfaces these are specific to customer needs... That can be mobile, desktop, other services, web clients, something not invented yet, it doesn't matter, the point is I have an endpoint that talks to something in a specific way... We agree on some kind of Contract and that Contract can be anything we agree on... RPC, REST, TCP, UDP, the only people who care are the two teams working on that endpoint.

The Public Interfaces talk to a Service Router that determines how and where to handle a Request.  The Request can be anything and if we support it, there is a fullfillment Service in the Service Cloud that can handle it.

Once the Service Router determines from the Service Registry how to fulfill a Request, it forwards the request message to the Service Cloud for fulfilment.  Fulfilment will produce Events that are stored in an Event Store and potentially an Optimized Read Model is updated.

Hmmmmm, sounds complicated.

Yes, when you are dealing with an Enterprise, or handling several client interfaces, it is.

One thing I have come to the absolute conclusion of is this... it must be Reactive.  By Reactive, I mean loosely-coupled, flexible, scalable and resilient.

Will this work for everything? Of course not, but for modern enterprise development, it is very well suited for a disparate set of client applications trying to centralize some elements that need to communicate with other applications, services and data stores.

When we start talking about data, you should be thinking in terms of a Data Lake and not a single set of data you use as a repository.  We want to be able to obtain all sorts of different data and do so in a realistic but efficient manner.  Our API Gateway reaches into this Data Lake for us.

"The Data Lake is a data-centered architecture featuring a repository capable of storing vast quantities of data in various formats. Data from webserver logs, data bases, social media, and third-party data is ingested into the Data Lake. Curation takes place through capturing metadata and lineage and making it available in the data catalog (Datapedia). Security policies, including entitlements, also are applied." - knowledgent

The Service Cloud takes it's cue from Domain Driven Design and SOLID principles.  Services have a Single Responsibility.  Could they be Microservices, sure, but let's not get distracted with that just now.  The point of the Service Cloud is that I have a bunch of Services that I use and their location may migrate, depending on need, they could be local or remote, it doesn't matter, the Service Registry takes care of that.  Think of local  as an optimization rather than remote is somewhere to put it later when it grows.

A Command Gateway is a Service that determines how to fulfill a certain Command Message. This is done for both Elastic Scaling and Business Rule fulfillment.  The Command Gateway finds the Elastic Service that can fulfill the Request once again with the help of the Service Registry and applies a Domain Adapter to transforms the Request into a Command Message some Domain Aggregate can use.

The Domain Aggregate processes the Command and produces Events.  Events get stored into one and only one Event Store for the Aggregate (these are normally clustered, sharded, replicated, etc. as needed, one meaning a system not a server)

Event Handlers pick up the Events and make Projections into context specific Repositories which the Domain may use for permanent write storage, when writing outside of the Event Store, this is an Optimized Read Model.  Other Event Handlers could pick up the same Event and make more Projections to other Optimized Read Models, Notifications Systems, send Commands to contact External Services, etc.  We have no idea how many Event Handlers there are, but since they are all Services, they go into the Service Registry too.  The Service Registry not only tells you how to get to a specific Service for fulfillment, it also monitors the Health of the Service.

Bear in mind this is now a very high level explaination of the system as a whole, but these are the critical parts and pieces that make up the modern Enterprise as I see it.

Is this the ONLY way to conform to this particular Architecture? No... it is one of many ways to accomplish it, it just happens to be the way I am accomplishing it.

In the coming weeks I intend to clarify each part and break it down further into terms you can use (with code samples) for further modern development with this style of Architecture.

I look forward to your comments, thoughts an opinions as we go.

I will be updating my Tooling Section to elaborate on what parts are taken from what vendors, and just so you know up front, 100% of this can be accomplished with Open Source, free tools, but again, you may prefer other directions for any individual component of the system.  THAT is the whole point, they are completely interchangeable at any time with little impact on the system as a whole.




VB and Me

I am about to join a new company in a new position and I had to do the normal thing we all do, update my resume.
This led me to a lot of reflecting on my career and looking at what is relevant and important.

I've been developing databases and software for nearly 30 years, that's more than half my life…

Why do I want to keep doing it?

  • I enjoy it immensely
  • It is my artistic outlet
  • I'm really good at it
  • I meet new and interesting people
  • I can't imagine doing anything else that gives me so much reward in the end
  • I don't really mean money, but that comes too so, it pays my bills.

OK, enough said, it's sort of the core of my being. Back to the reflection… I started thinking "What really launched my career?" I mean, I have gone from a simple kid with no understanding of what I was doing, hacking away at graphics on an Atari 800, to being a major architectural influence (to at least the people I work with).

So how did that happen? Years of study? Intense courses? Well, I admit I have done some of that, but it's not what really made a difference, it usually left me frustrated and confused. I've spent months untangling what I learned into what I could use.

Then what did it?


VB?!? As in Visual Basic? Yup. Really? Explain!

OK, I have to digress a little…

In the Late 1980s (before the internet) I was building a point-of-sale company. Way back then we didn't have things like PayPal, QuickBooks, and iPhones with credit card readers in them. After all, the "Personal Computer" was even fairly new. After running a small Computer Store selling Kaypro’s and what later became Dell, I had decided to specialize on point-of-sale instead of being a general PC shop that tried to do everything. Small Business owners had very little choice at the time if they needed cash registers, inventory control, invoicing, employee time keeping, etc. They could buy the "Big Iron" from companies like IBM and NCR but few could afford it. There was a great demand for someone to come in and serve the Small to Medium Business sector and consolidate all this stuff into something people could understand and afford.

So, I did that. I invented a new Cash Register that was actually made from a PC (Intel 286 actually). This thing was basically a cash drawer with a small computer that sat on top and covered in a shell. The average computer back then was huge. I manufactured the chassis and imported the guts in the form of motherboard, memory and disk drive from a small company in Taiwan and then assembled it all together in the US to make my point-of-sale system.

I found some software to run the thing I had created from nothing. After learning it and getting it to operate my equipment, I bought the rights to the software from the company. I now had an MS-DOS program written in Quick Basic that pretty much did what I needed. I really wanted this to run on Windows which was really new and fighting with Apple for dominance (some things never change…)

At the time, the only way to program for Windows 2.0 was C++. So I hired some really smart programmers because I didn't really understand C++ and didn't want to learn it... Again… I had dabbled with it before, but C++ for Windows was a beast and I thought I was more of a hardware guy. Bottom line, they pulled it off, at enormous expense, and I didn't really want to be in the hardware business anymore. So what does an entrepreneur do? In 1992 I sold the company and moved to the Bahamas.

Sounds like you had some success, but what does this have to do with VB? OK, enough digression.

While in the Bahamas sipping cool beverages on the beach, I heard about this new programming tool called Visual Basic. It sounded like something interesting to me because I knew BASIC really well. It also was supposed to make programming for Windows easy. I had tried all kinds of things at the time, there where several attempts at making Windows programming easier but they all sucked. I won't bother naming them but there were a bunch (and they all failed and don’t exist anymore) that used a scripting language and either compiled down to C or were so slow they were unusable. They where also what we called CASE tools but these were super complex and expensive.

I flew to Miami and got my hands on a copy of VB installed it on my laptop and started looking at what VB could do.

I could relate most of the stuff I learned from my developers talking about events being different than the procedural stuff we had been using before… This was a weird but entirely fun kind of BASIC. In about and hour I had written a Windows program that could create a Contact, complete with a couple forms, buttons, menus and a dialog box best of all, I didn't need a single pointer of header file. In C++ this would have taken (me) a month. I was sold.

This was in the summer of 1992 and this was VB 1. It was pretty limited in what it could do, but it seriously took the mind numbing drudgery out of making a simple Windows Program. To write real business applications a I really needed some sort of Database. VB didn't have one. I tried my old techniques, writing Linked Lists to disk and that did work for the stuff I mostly needed and I was getting pretty good at this. I moved back to the States and landed in Phoenix. I started automating lots of little business applications and then along came Access. Access had Basic in it, but slightly different from VB and needed a pretty hefty license. About the same time VB upgraded to version 3 with a Jet Interface to Access. Now I was creating real programs for real companies like Intel in no time. Access and VB were really gaining steam and so was I. This was my turning point as I became an Architect.

Then what made VB great? Was it Basic? Certainly not, indeed it was easier to use than C. Was it Access? Nope, but it definitely garnered the hobbyist corner and spawned countless developers who got jobs in companies.

It looked like it was SQL Server. As soon as we learned to connect VB with SQL it was game over. VB shot up to one of the the most widely used language at the time. Recently, I started really thinking about this. Was it really SQL? It was, but it wasn't actually SQL, nope.

I now firmly believe it was removing the pain of Architecture as well as the complexity of Windows. Almost everything we wrote was code behind forms straight to a database. Where the programs perfect and did they follow all the patterns of success? Not really, but they got out the door.

In recent times, I have seen teams working in Scrum take a year to put out one Service. Sure they show incremental updates every few weeks to keep the client off their back, but this is not getting things out the door the way that VB did.

I have spent the last 20 years helping to make VB nearly as complex as C++. It's now on equal parity to C# (including pointers, lambdas, Inversion of Control and other seriously complex things…) Is that bad? No, it's most definitely good. The problem is that since VB.Net was introduced that magic that made VB truly great has eroded to the point it has been lost to increased complexity and the language has declined dramatically in popularity since 2008.

Lightswitch has tried to garner some of that magic back and has moderate success in doing so. But I can't easily put Lightswitch on an iPhone or an Android Tablet.

The way professionals do things today isn't a whole lot different than the way they did it 20 years ago. In a professional application we use the same Design Patterns that have been around and time tested for 20+ years we just do them in VB.Net, C# and JavaScript as well as C++. These Patterns aren't new. Moore's Law is still in effect. Technology is still getting faster and cheaper every 18 months and we are now seeing the MASS EXODUS from PC to Mobile.

Phones and Tablets change everything, really they do. The customer needs simple and simple is getting met with the Phone and Tablet. At the same time, business needs reliability, accountability and adaptability. If they don't have these things, they are reinventing the wheel every time they write software.

I want THIS: What's even more amazing it that I have something capable of this that I carry around EVERY DAY and have done so for at least 2 years. Alright, the hardware is actually available today, the software isn't… and what is isn’t cheap. How are we going to program all that complex stuff? Is it really going to be teams of Designers, Developers, Architects, PMs and QA for every small application? I seriously doubt it.

That means that our entire mentality about how we write software has to change. WE MUST stop writing software the same way we have been doing it for the last 25+ years. Does this mean dump Layered Architectures, IoC/DI, Design Patterns, SOA, Behaviors, Commands and all the proven things we have learned? Of course not. It does mean we have to seriously automate all that stuff and we have the tools available to accomplish it.

That automation is not here in a complete package and I don't see an immediate candidate for it yet. Our tools are better, but they are still way too complex and that complexity just keeps rising. We need automated complexity that follows these Design Patterns for us, in the way we need to Architect them, with the mixed languages of our choice. We are on the verge of this, but no one has put it all together yet.

Writing thousands, or even hundreds of lines of handcrafted code has to stop. It's really not necessary any more. This can all be accomplished with DSLs, Compiler as a Service Templates of well known Patterns, Code Generation, and proper IoC/DI.

Who is going to write the VB of Modern Software Architecture?

I am working to launch The Visual Basic Network to do exactly that. This is about the Magic that was VB, not necessarily the language. Though several parts will be written in VB.Net.

This is an Open Source Project that will be pulling in lots of information, sorting, analyzing and forking it to built something truly magical.

Want to be a part of that? Keep checking back as I incrementally release iterative updates.


I've added a Tooling section

Often I find that the set of tools I am using changes.

This is the list of things I find most useful in my current development efforts outside of MSDN.

If you are developing for the Microsoft Platform, you can't do it professionally without MSDN unless you are insane or have too much time on your hands :-)



Speaking at the MVP Summit

I'll be speaking at the MVP Summit Monday 2/27/2012 at the Juniper Room in the Hyatt.


The world is going mobile, is your architectural mindset going with it? The days of the monolithic application and even simple demos are numbered, while these may live on in legacy support for some time, their usefulness will diminish rapidly. How do we change the way we think about building applications in a world filled with Clouds and Mobile Devices yet still provide a powerful desktop experience? Come see how we built a new social application designed and created for just that purpose. I'll show how great architectural principals fit into the Codebase and how to recognize what patterns to use where. I encourage open discussion in this talk even though it's a lot to fit into 40 minutes.