Monday, September 2, 2013

Infrastructure and software knowledge needs to be shared between teams.


I recently found myself discussing a favorite topic of mine and felt the need to share again.

Do not consider your Infrastructure and Software to be different and distinct.

The infrastructure needs to grow with the changes in your software.  At the same time, you are asking for problems if you develop software without considering the user environment as well as the infrastructure you have.

It is hard to consider this when your teams are heads down working on their own "side" of the equation.

Some examples....

- A development team spends almost one month trying to solve a speed and crashing issue with IIS and Microsoft SQL.  When they talk with the "IIS person", they find out that a simple change of one settings stops the server from crashing twice a day.  Sharing of technical knowledge helps.

- A team (together with a product owner) invent a "really cool" application that uses large images to "properly express their ideas".  The technical glitch...  A large portion of the customer base does not have high-speed internet access and refresh their browsers constantly.  The system runs slow and has performance problems.  Always consider the actual environment of the end-user.

- A DBA is asking for a massive upgrade to a system when the "cure" is to have the development team start using the .NET CACHE() class appropriately.   Not all "infrastructure" problems need hardware solutions.



I am not suggesting a large amount of up-front Waterfall type activity.  I am simply suggesting more Communication between Infrastructure and Development if that is your reality.

Ideally, you could get someone with infrastructure experience and privileges onto the development team  and work toward a more cross-functional team situation; even better.

Consider finding some way to allow the "Development Team" members and "Infrastructure" to exchange knowledge face-to-face once in a while.

I was going to put some ideas here but realize they might cloud the issue.  If you consider your own environment, you will find a way to proceed that works for you.

They key is to be deliberate and specific about having infrastructure and software communicate.

We almost all agree that better communication and knowledge transfer is a good idea, but when is the last time you or your team actually did something about it!


  Ask yourself... 

 "What have I done to help infrastructure and development share technical knowledge and information?"

Better yet, ask your teams how to accomplish this.

The software won't work without the infrastructure and the infrastructure needs to be appropriate to the customer's needs and the software running on it.  They cannot be separated.  This also holds true for "the cloud".

For those that are interested.. Here's my post from 2011 about this topic.

http://mike-caspar.blogspot.com/2011/01/infrastructure-knowledge-for-developers.html

Mike Caspar
Passionate About Agile

References:
.NET Cache  - http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx