With all the talk about cloud computing and Software-as-a-Service (SaaS), it’s easy to overlook the desktops that have served us so faithfully over the years. But make no mistake, there’s plenty of innovation still happening on the desktop, and it continues to be the primary platform for business users working with specialized systems and productivity tools.
A staggering 1.1 billion people use Microsoft Office today, and Gartner projects that even by 2017, only 30 percent of office productivity suites will be cloud-based. Additionally, Lenovo — the largest PC company in the world — continues to demonstrate the strength of the desktop market with 18 percent year-over-year growth.
Today many users have one foot planted firmly in the old world (desktop) and the other stepping into in the new (SaaS). There’s an opportunity for software to continue supporting traditional work habits while preparing us for the way we’ll work in the future.
At Nitro, it certainly hasn’t been easy for us to build the bridge from our original desktop software to our new cloud application. Here are five tips I can offer to help application development teams prepare for the evolution from a desktop-only app to a multi-platform, cloud-connected solution:
1. Build up cloud DNA.
Hire expert cloud engineers, and pair them with your existing desktop engineering team members to maximize the hive mind potential. In this way, you can move your business forward into a new domain while transferring business context and enriching engineering culture. To handle issues related to team growth, be sure to foster a learning mindset. Something as simple as brown bag “Tech Talk Thursdays” can tap into the curiosity and continuous learning desire that all top engineers have in common.
2. Think before you geek.
Make sure you’re thoughtful about choosing the right technologies as you extend your product into the cloud – don’t jump into the hottest new tools just for kicks. We love the Play Framework for all our web service framework needs, but you should avoid making comprehensive solution changes until a new technology is proven for your use case, you’ve identified expected value based on real data, and you’ve determined that its community is a good cultural fit for your team.
3. Re-use or throw out.
When you’re moving into SaaS, desktop code re-use is great and core service re-use is even better because it makes you tech-stack agnostic. At Nitro, when we decided to add a cloud offering to our premium desktop product, we were able to re-use half a million lines of core code logic powering document rendering, stamping, authoring, and so on. We did this by building on reactive application principles to deliver our cloud application as a client with a rich user interface (UI) “wrapper” on top of multiple self-contained puzzle pieces that are resilient, responsive, event-driven and elastic. With this approach, each new capability you develop can benefit from past engineering lessons and even be built on a different stack.
4. Experiment and iterate.
Once you’ve created core reusable services, your engineers can assemble new solutions from the atomic parts of your existing product more quickly, and you can optimize your existing desktop components more easily since the interfaces they leverage are smaller in scope. Especially in the beginning, you should incubate new ideas and iterate on them to deliver solution updates weekly if not daily. Treat your architecture, technology stack, and all engineering processes as an evolving product in itself..
5. Prepare for scale.
It’s very tough to retrofit any product for speed and stability after the fact, so make sure that you know what kind of scale you’re aiming for over the next several years with both desktop and SaaS products. Then hire and train for the right engineering mentality to support these needs. Avoid user downtime by having a proven application performance management path from day one, and be careful about building the things that have to scale out front versus pieces you can build as needed later.
Re-tooling everything from your architecture to DevOps is not easy when you’re tasked with evolving your desktop product into an accessible, secure, and scalable cloud application. But by de-centralizing business logic into standalone, easy-to-manage units, desktop software companies can solve tough global problems much faster than startups trying to do it all from scratch. Many incumbent vendors have a leg up on new entrants because they’re building cloud services on top of a deep industry-specific knowledge base. That’s why “low coupling and high cohesion” is not only a great engineering pattern, but a sustainable business approach as well.
What are your tips for bridging from the desktop to new SaaS offerings that maximize the utility of existing solutions? Feel free to share your thoughts in the comments below – I always enjoy learning from and sharing with the community.