Showing posts with label Architecture. Show all posts
Showing posts with label Architecture. Show all posts

Tuesday, February 5, 2008

The Software Architect - Man of Mystery

I am a big fan of Hanselminutes, a podcast by a Microsoft employee focusing on topics related to developing software on the Microsoft Platform. His show often features very interest personalities and episode #90 was no exception as it focused on Dan Appleman, a famous writer and now consultant in the .NET space.
 
The show touched many interesting subjects but the quote: "The job of a Software Architect is to keep the project from failing" really stuck in my head. This one line holds much significance to me as I have always believed that Software Architecture was more then UML diagrams or pushing a particular technology. Instead I believe the concept represents all facets of a solution that simply includes the design as one of those element. The show once again reflected this detail in the following quote:
 
Architecture is not design, instead design is a subset of Architecture. Architecture is the full life-cycle of the problem
 
Honestly it felt good to have two people I look up to in the industry speak about Architecture in the way I have always seen it. It has been my very unfortunate experience to see many projects fail because the Architect and designers above me didn't add the needed value their positions allowed for. Instead I have seen people muddled in the kinds of irrelevant details that sweep up good intentions and lead to destroyed projects.
 
The reality is projects don't typically fail from bad technology, architecture or people. Instead they fail because of bad specifications, poor direction, bad design, poorly trained engineers and/or management. Software Architects must try to prevent this from happening and simply use the power of talking and thinking about the problem instead of heading towards an aimless goal
 
Again this quote says exactly what I am thinking, all of these areas above are the key to any projects success. Technology is important, but as an example even something as mundane as a poor initial direction can destroy a project in the end no matter the technical innovation.
 
In closing I will once again reflect something I hold extremely true: If you don't find a way to add value as an architect to your business or customers then you will not bring anything different to the table then an out source company can do (and can do it cheaper). This is yet another key mind set to be in, the global economy has changed things and we need to step-up.
Solve the problem, save the customer money, make the solution maintainable and the referrals will make up for the immediate losses
 
Scott referenced this as "Architecting for referrals" which is something all Architects and consultants should strive to do and is the prefect closing to my thoughts in the subject.
 
As always, I look forward to any comments.
disclaimer: The word quote is used loosely above, please listen to the show (episode #90) for yourself to get a word-by-word transcript

Friday, December 21, 2007

Computers + Services: Extending the Desktop

Computers + Services..? Don't you mean Software + Services?

Before I discuss Computers + Services it is first important to understand part of the inspiration and software equivalent of my idea.

Disclaimer: The focus of this posting is on the average User Desktop, not professional server environments. Some of this is already becoming available for servers, but as far as I know not yet being leveraged  for the average users home machine.

Software + Services

Software + Services is not a new paradigm and is best summarized by Microsoft:

The future is a combination of local software and Internet services interacting with one another. Software makes services better and services make software better. And by bringing together the best of both worlds, we maximize choice, flexibility and capabilities for our customers. We describe this evolutionary path in our industry as Software + Services.

This vision can be realized in many variations, but at the end aims for a common result: To use the power of desktop Software while taking advantage of services to extend beyond local capabilities.

To me this is the most logical evolution of the current technology driven by many factors, including:

  • The Internet is now a fairly reliable 24/7 communication medium
  • Web Services and other remote API's provide easy access to remote services for developers
  • For better or worse people and organizations have started to trust remote services more then they used to, especially those provided by well known companies such as Amazon, Google, Microsoft, Etc (the Banks of our generation)
  • Server Farm technology has evolved significantly to power distributed computing

Enter ... Computers + Services

Wither people like it or not Cloud Computing has arrived driven in part by S+S concepts, but its only the beginning. My belief is that in the near future Computers + Services will be yet another natural extension of our computing into the cloud.

This is not another attempt to build a better mainframe, instead the desktop and its raw power will not fade. To join the cloud i envision hardware consuming remote hardware services and extending beyond its out-of-the-box capabilities. Lets look at my definition for Computers + Services:

Computers + Services (C+S) is a combination of local hardware and hardware exposed to the local machine through a remote API, typically across the Internet. The remote hardware has to provide services that would otherwise be made available by local hardware and not replace but instead enhance the local versions.

In an optimal setup local Hardware would be "C+S aware" and able to self coordinate with the remote hardware to complete assigned tasks. This would allow for transparency to the application lawyer whenever possible.

In certain cases C+S can be made available to the application layer for implementing specific scenarios but should not be a prerequisite for using C+S by most software.

This concept directly leverages all the technology and trust that makes Software + Services a possibility and I believe the core technologies needed are either here already or up-and-coming in the very near future.

Lets look at C+S in more detail, including an example of how it can be implemented.

CPU Offloading through C+S

Example

To best illustrate this concept lets look at an example:

Lets assume that John Doe purchased a computer to do video editing of his home movies after the Holidays. The machine has a dual core AMD processor, lots of ram and disk space, plus of course video editing software.

John records 30 hours of movies and transfers all of them in their raw format onto his computer and begins editing. Soon he realizes that doing any manipulation or encoding of the videos into different formats is taking a very long time, time he does not want to waste. Lucky for John it is the future, John signs up to a website that offers CPU Offloading and leases 10 additional CPU cores for the next 15 days. The website automatically connects to windows and with his permission adds the needed configuration settings to enable 10 virtual cores on his machine.

John restarts his video editing and its blazing fast compared before. His machine is now hardwired over the Internet into a powerful local data-center where 10 cores are now dedicated to him. As his hardware requires additional parallel processing which it already supported with the 2 local cores, it is able to hook into these remote cores and pass instructions as if his machine was physically upgraded.

John finishes editing the videos and at the end of the 15 days his core lease expires, which is exactly what he wants. During his normal routine of playing COD 4 or surfing the Internet his local resources are more then enough. In-fact his computer is smart enough not to use the additional virtual cores for processing that is required at a very real-time speed like gaming, so it was no help anyway.

image

Core Principles

The core principles that make C+S work in my example are:

  • The ability to extend local resources
  • Transparent to the software layer
  • Available to the software layer through concepts like Managed Code Libraries in .NET to allow software to take even more advantage of these services or avoid them if latency is an issue
  • Paying only for what you use, allowing the lease to be a reasonable amount of time and money
  • Leaving the desktop as the interface, participant, contributor and coordinator for any remote activities

Challenges

Today's technology would pose many barriers to implementing this concept including hardware architecture, Internet latency/connectivity, and many other factors. Luckily these are not limitations but instead challenges that can be overcome with enough dedication and funding. As with all innovation once someone finds a business case to pursue it, it will happen.

And now to the good news...

C+S: Its already here

Amazon S3 + JungleDisk

In the area of storage C+S is already being realized by Amazon through its S3 program and plug-in's like JungleDisk. This combination of Service (S3) and Software (JungleDisk) creates a virtual hard drive on a machine that acts and looks like a normal drive yet lives in the cloud. You pay Amazon only for the space that you use (at a very low rate) and are therefore free from investing into various hardware like:

  1. Additional local disk drives for extra storage space
  2. Backup solutions for file recovery
  3. Redundant RAID arrays for stability

Overall this is the exact software-transparent model that had made me exciting about this idea in the first place. I was somewhat shocked to realize it already existed (without my fancy C+S terminology) while writing this posting. I am so excited about the technology that not only am I an advocate of the concept but now a user as I have subscribed to S3 and use JungleDisk to help backup my data.

Amazon in general seems to be embracing this concept as its other services also want to distribute physical resources into the cloud. I definitely encourage people to review their web service offerings if you have not done so already.

Nothing in Life is Free (unless it has ads in it)

The one major downside to this model is that it will most likely cost you money for things you will lease as opposed to own.

While many services on the Internet are free in my vision the deep integration required would not allow for easy ad-integration to make the free model work. (Though not impossible, people are very creative!)

If this concept does come to reality in various incarnations the benefits will most likely be worth the leasing cost regardless of the way that cost is presented. If Amazon is any indicator it seems that a model of micro-cost based on usage is already a viable business model.

Conclusion

Thanks for reading!

In closing I want to stress that as with most "new" ideas, there is not a lot new about what I am proposing. My intentions are to simply communicate one way of looking at the concept of cloud computing (formed from my limited perspective on this complex topic).

The only new concept I can try to claim is the verbiage "Computers + Services" as a buzz-term that as far as I know, no one has used before.

Your Feedback

Please accept this commentary for what it is and I look forward to your feedback.

Wednesday, December 12, 2007

What is your technical reading list?

While on the train today I noticed someone reading "Design Patterns: Elements of Reusable Object-Oriented Software", a favorite book of mine for studying and referencing Design Patterns. Striking up a conversation with the reader we both agreed that this was a great book worth studying but hard to apply without practical experience. We also agreed that using this book to "know what's out there" is a powerful tool regardless of the implementation challenges (No one said patterns were easy).

This chance encounter made me think about my own essential reference/study list of technical books, so here are the core items:

This list is only the beginning but does represent the core of what I would recommend to others without hesitation. Unfortunately it is not common to find other engineers who even know of these books and therefore I hope this posting can help bring attention to them. Below is more information about each book, I hope you find it useful.

Disclosure: All book links posted on this site are associated with my Amazon associate id and will make me money if your purchase them using these links.

Code Complete

code complete Code Complete (second edition) by Steve McConnell is an excellent and very comprehensive guide on many facets of Software Engineering. This book covers coding techniques, construction practices, software design, and other topics. Many Software Engineers including myself consider this book required reading and reference. Its wide-range of topics also makes it a really ideal starting point for beginners+.

You can hear more about how this book came into existence by listening to .NET Rocks! Show #215 were Steve McConnell is the guest being interviewed.

Design Patterns - Elements of Reusable Object-Oriented Software

design patterns book Design Patterns is a book by Erich Gamma, Richard Helm, Ralph Johnson, and John M. Vlissides. This book describes 23 patterns in the context of Object Oriented Design, along with some general concepts important to get you started with patterns.

Patterns make software engineering much easier and consistent when the right pattern is applied to the right problem. Getting an insight into a large number of pattern is the best way to get on track towards actually using them and gaining the added coding efficiency.

To put it simply: don't reinvent the wheel. Use patterns correctly and you will leverage proven approaches to common software engineering problems.

21OLKCbooch_booch_secondary As an extra bonus this book starts with a forward by a Software Engineer, Architect and technical book writer Grady Booch. Mr. Booch has done a lot in the field of Design Patterns to help evangelize the concepts this book covers and deserves recognition.

Refactoring - Improving the Design of Existing Code

refactoring improving the design of existing code Refactoring - Improving the Design of Existing Code is a book by Martin Fowler, Kent Beck, John Brant, William Opdyke, and Don Roberts. As with the Design Patterns book it is very beneficial to include multiple authors under one cover. This provides a variety of insights into a complex topic that one person would have a hard time covering comprehensively.

If you consider yourself a true Software Engineer then Refactoring should already be a concept your familiar with. Luckily this is not a new concept and this book provides before and after code demonstrations of over 70 techniques, helping open the readers eyes to much more then one person can achieve starting from scratch.

As Software gets more and more complex I believe the skill of Refactoring will become critical. The likelihood of design-flaws in first-iteration coding and architecture due to the increased complexity of technology and business expectations will mean Refactoring is the primary, if not the only avenue of increasing code quality and even meeting the final business requirements. Getting it right the first time around is simply not an option in most cases.

Commonality - Not just a training book, but also your reference

One common theme stretches across all of the above books: The ability to read them in a fairly disconnected manner, choosing the topics which apply to you and even using them as a reference for an active project. This is perhaps the reusability/easy access factors that makes these books so successful.

Special Thanks to Robert

One of my former bosses named Robert (my former CTO) deserves a lot of credit as he encouraged me to read and provided me the first copies of these books.

Robert strongly believed that we were not programmers but Software Engineers and therefore must have access and study how to develop software at a professionally level. I hope to post more on my time working for him at a later time.

(Last name not used above to protect Robert's privacy)