This week I met someone while on a personal trip who is in the software business. His company writes software for a very specialized vertical and from everything he said to me, they are an innovative company and do all the right things including empowering their teams to self-organize, regular training for the staff and generally a great working atmosphere.
The company has still been struggling with getting their product to be "deeper" (his word) for their client base.
I was again reminded of a post of mine from a while ago encouraging or providing cross-training or at least some knowledge to bridge the barriers between the software group and the hardware group (link at the bottom of this post). In my environment, I've been fortunate to have a network admin sitting with our team. It has prevented many potential problems.
Having been involved in the infrastructure part of IT as well as development, I knew of at least a few products almost immediately that could make his product more compelling to his customers. To my surprise, I found out his company was only looking at software improvements to their application. He told me how they are continually developing new features but are not considering running on any new platforms.
I mentioned a few technology (hardware) improvements he could consider and I know that by the time he gets home this weekend, he will have taken a look and passed the information on to his team. These improvements could immediately add significant customer retention and usability to his product.
From our discussion, it was also evident that his team would enjoy the challenge of some new platforms to keep encouraged about the future. I'm sure that by the time he reads this, he'll have some of these technologies in hand :->
As Agile practitioners, it seems, we are so focused on improving our software development cycle, our specific development tasks, our daily or hourly builds, our programming skills, and how we create story points, sometimes we seem to lose track of the big picture... What is the customer going to use it on? This should be fundamental to every developer's thought processes.
Think to yourself, "HEY, should we be seeing if our software could run on some of the new technologies out there such as Microsoft Surface, some of the new Wireless Devices, or even benefit somehow from new 3D technologies coming out"?
I like to think that developers who are empowered with information about hardware can think of all kinds of ways to use it.
If you're on an Agile Team or managing one, ask to learn something about the hardware in your environments. Consider some "slack" in your Sprint or some work breaks in your Cycle to allow team members to learn something about new Infrastructure or Hardware products.
Think for a moment if your company is writing software for the Web, the power of a deep understanding of how a load balancer actually works, or my personal favorite, the .NET Cache.
Let it be the teams' choice of which products though. That will give the best motivation and most likely will be the most enjoyment for everyone.
It will broaden your horizons and perhaps give your team ideas you never knew could even be possible.
If we always just wait for a Marketing Person or Product Owner to come up with interesting ideas, where's the fun in that ?
My previous post - Infrastructure Knowledge for Developers
3D example - Sony 360Degree viewer prototype
Microsoft Surface - Microsoft Surface Web Site
Slack - A good article about slack in XP by James Shore
Sprint - Scrum Alliance
Cycle - Open Agile