Sunday, January 30, 2011

Cloud Architecture Realizes 33% Savings and Faster Time To Market

In a previous post, I noted that Economics - specifically cost savings and moving from up-front capital purchases to on-demand usage - was a key reason to adopt cloud based services. Recently, Alliance helped a publishing and information services client design a cloud based deployment for a new information portal web application that saved 33% in infrastructure costs and saved months on deployment time. This is a typical content based online publishing application, with large content repositories, search indexes, innovative user experience, and community feedback widgets like recommendations and filtering.


The previous version of this web application was built and hosted in their corporate data center - which is a large and fairly efficient internal hosting operation. They follow ITIL standards, leverage bulk buying discounts, try to automate where possible, and many large billion dollar revenue web applications. But the internal hosting center is still in a craftsman mode - each new hosting application is custom designed, with very specific hardware specs and design, specific hardware ordered and configured for just this one application, and custom software installation followed for each and every machine in the environment. This type of craftsman approach is fairly typical in hosting (and software development) and drives a MUCH longer timeline as well as higher costs.

Cloud IaaS providers (like Amazon, Rackspace, or GoGrid) take a different approach - they give you a fixed set of virtual machines to choose from with defined compute specs and standard connectivity and let you turn them on at will. Instantly. Zero-delay. With no long planning, ordering, and set up. As you can imagine, this approach drastically reduces the time required to deploy an application to production. And it eliminates many of the error prone and manually intensive (and expensive) steps in planning, ordering, installing, and configuring hardware for the specific application. All of this is a clear win for IaaS over in-house hosting data centers. The Per Server savings are dramatic...

Cloud Server Savings

Combining a mix of on-premise database servers, data transfer costs, load balancers, and data storage costs gets the typical total cost savings to 30-40%. When you consider that by using a cloud IaaS solution you can scale instantly and incrementally to meet demand as you grow your product, you can easily add disaster recovery (DR), and you follow best practices like automated deployment it's obvious why cloud based application architectures are becoming the norm, even for typical "enterprise applications."

Thursday, January 27, 2011

Iterative Development Key for New Product Development

There is a lot of discussion about Agile vs. Plan Driven software development methodologies - usually driven by advocates of one or the other. Certainly, it's a more complex topic and there is a wide spectrum of extremely structured, plan-driven approaches to extremely agile, change embracing approaches. One well thought-out and nuanced explanation with advice for choosing where on the continuum to try to be can be found here.

Two concepts are fairly easy to accept and understand - one is that when you need to coordinate many different parties a more planned approach with more formal communication between the parties is essential. This comes in to play when coordinating marketing campaigns, customer roll-outs, contracts with vendors, and corporate funding approval processes. In all of these cases you need to have an idea of how long an effort will take and how much it will cost - and all of the stakeholders involved need to be formally updated to changes in the overall timeline or cost . This can form the basis of the overall planned Program at a high level.

The second is that at a lower level of detail, and especially with new product development, it is impossible to formally plan the software development with any degree of accuracy regarding how long each feature will take or whether every scalability and performance metric will be achieved by the first, second, or third attempt. Additionally, the new product development implementation process is really a R&D process, not a defined engineering approach. You need to explore whether customers can understand the new product, whether the new UI makes sense, whether the most anticipated features are actually used, and on and on. As part of your new product conceptualization, you need to prototyp, build, and let customers work with the software to learn what is really needed in the product. Josh Green, the CEO of Panjiva, explained it well during his presentation at the Information Industry Summit this week:
When we showed Panjiva to our first customers, we expected them to be blown away - we were giving them more data, more easily to use than they ever had before. But they kept asking for more data or asking for the data to be shown differently. After a while I realized that my customers were TEACHING US HOW THE PRODUCT SHOULD REALY WORK!
This is the essential point about truly new product development - it is an exploration. No one can completely specify in advance how the product should be implemented. Users will teach you how to make the software better. But users can only teach you when they react to something that you put in front of them. Iterative development, and especially early prototyping and mock-ups are key to enabling this customer feedback loop. It is imperative to learn from your customers and deliver the next version quickly so that they continue to see the improvements and continue to help you make your product better.

At the same time, you probably need a Program level plan - how much funding do you have? How many iterations can you afford? What conferences or industry events make sense to demo your software at?

So you see, it's not always either Planned or Agile, it's often "both."

Wednesday, January 26, 2011

Networked Content Manifesto

Yesterday Temis distributed print outs of their newly released "Networked Content Manifesto" at the SIIA conference in New York. Ignoring the irony of a firm focused on digital content processing printing copies of their content and handing them out (or maybe that's an accurate reflection of the current state of online publishing?), the manifesto is a good introduction to the concepts surrounding Semantic technologies and "Content Enrichment". In Alliance's Information Services industry focus, wework frequently with clients on implementing taxonomies, ontologies, classification systems, and other tools to automate the "Enrichment" portion of the information supply chain processing pipeline. Combining these sophisticated tools with good Master Data or Master Entity repositories and linking with other internal content or the public Linked Data initiative provides a much richer experience for researchers and content users.

By providing more meaning - more semantic information - about the concepts, people, and entities that are in the document and providing easy ways to navigate through the overall content space we can create a richer experience for the end user and make it easier to discover the information she is looking for. For the publisher this translates in to increased usage which means easy subscription renewals, so that's a good thing too!

Saturday, January 22, 2011

Automated Functional Tester

This week saw the roll-out of Alliance's new "Automated Functional Tester" (AFT) framework. This is a very comprehensive and powerful automated testing framework enabling the end-to-end testing of complex web applications. It's driven by easy to write business requirements, handles rich AJAX interactions, integrated Windows security and file operations, enables fast regression suite runs, and rich reporting. This framework is built on and integrates a number of open-source testing frameworks to provide full capability and more comprehensive testing than any individual tool. And by using standard test execution environments, like Selenium, it's possible to take tests generated by the framework and execute them in Cloud testing platforms for performance testing or large-scale cross browser testing.

We use automated testing very extensively, from developer written unit tests to fully automated test suites. Sometimes clients balk at the high license fees associated with very full featured commercial testing tools like QTP and this open source testing framework is a great capability to provide our clients with custom software development backed by fully automated testing at a lower price point!

Great job to the AFT team!

Why use the Cloud?

A lot of people ask "What is Cloud Computing?" There are good answers for that, and I'm sure I'll expand on it more in this blog as well. SaaS, PaaS, IaaS, Public, Private, Hybrid, Virtualization, Storage, Compute, Developer Clouds, Production Clouds, etc. Lots and lots of definitions of "What is Cloud."

But there's a fundamental question I want to answer - Why use the Cloud? What's the business value for Cloud Computing?

Well - it's all about 3 things:
  1. Agility
  2. Capability
  3. Economics
Agility - using on demand software and infrastructure enables you to be more flexible and achieve a given result faster. If you're looking to implement a CRM package, turning on Salesforce.com or NetSuite takes a day or two to start and a week or two to get rolling - much quicker than the usual months-long implementation effort for on premise package installation. If you need to turn on some developer or testing lab server instances you can sign up with an Skytap, GoGrid or Amazon.com, configure a virtual instance and be completely done by lunch instead of the usual few weeks procurement process to buy a new server, get the IT department to install and configure it, and be able to start using it productively. Using cloud based platforms for development, like Azure, Long Jump, Force.com or App Engine enable much faster software development and implementation and let you start realizing the business benefit of your application much sooner.

Capability - Using proven, scalable services to build on enables much richer functionality and incredible scalability that you would be very hard pressed to achieve from scratch even if you could afford to build out all of the infrastructure and functionality. You can add amazing rich features to your web application, whether it's web analytics, photo sharing, data entry forms, data visualization and other business functions so much faster by integrating existing software service like Google Analytics, Flickr, Caspio, or Birst than you ever could by trying to write requirements, design, build and test the software, deploy the new feature and worry about scalability. When you're looking to deploy robust, scalable applications that support thousands of users around the world, deliver fast performance to every corner of the globe, and meet modern expectations for responsiveness and user experience using Cloud based Content Delivery Networks, Cloud based in-memory caching or databases, cloud-based load balancing between data centers and across tiers, and instantaneously available storage and compute capacity enables companies to have world-class capabilities that they could never hope to achieve by building out their own internal data centers.

Economics - Like many revolutions, by "doing things differently" Cloud based solutions are able to provide very large cost savings. For individual services, whether it's reliable storage or scalable web servers, a huge IaaS provider like Rackspace can provide much lower cost per unit than an internal data center could. These large Cloud providers make an investment in automation that enables them to efficiently manage orders of magnitude more capacity per engineer. They are able to buy in bulk from server and equipment vendors, site data centers next to low-cost electricity sources, and operate their data centers like a modern "factory" instead of the "cottage industry" of the internal corporate data centers - with all the cost savings you would expect. The same is true of SaaS providers, who are able to invest massive amounts in software engineering, user experience and design to produce world class software and share the costs across dozens, thousands, or millions of subscribers. An individual corporation will need to invest much much more to build their own version of a software package or service than it would cost to subscribe to a well implemented service.
For the Cloud subscriber, there is another benefit to subscribing to a cloud service rather than buying or building your own internal version - the switch from a large up-front capital investment to a monthly operating cost. This On Demand pricing model enables you to start small and incrementally increase your investment as users move to the service or your customer base grows, rather than requiring you to over-provision for your hoped-for 1 or 2 year projections. This subscription model also ensures you have continued flexibility to evaluate whether the deployed solution is meeting the needs of your customers - the cost to increase the service, switch to a different solution, or turn off the service completely if the business model is not working no longer hinges on huge up-front investments that must be managed and written off - you simply stop paying the monthly subscription and move on.

As you can see, using Cloud based services provide very real, concrete business value by enabling more Agility, more Capability, and better Economics. There are also numerous other intangible benefits to moving to Cloud services. You need to automate your deployment, you can test more easily, you need to define real service boundaries and interfaces, you can prototype integration and new services quickly, you have access to a wider range of technology options, and on and on.

That's Why you SHOULD use the Cloud!!

Thursday, December 16, 2010

The Best Tool for the Job

I spent some time this month learning more about the LexisNexis Data Analytics Supercomputer (or HPCC) system. This is a great tool for building and deploying lightning fast Content Services with high quality content enrichment to turn commodity content in to a valuable information product that professionals will pay for. It's purpose built by a team of very smart technologists who have been turning out content-based products for a long time. For re-engineering a large scale data processing system with hundreds or thousands of input files running on a variety of maxed out Unix servers or mainframes HPCC is a great fit.

The system design reminded me a lot of the notion that when you are doing something over and over again, the right approach is not to just get better and faster at repeating the specific task - but to find a better tool to eliminate the task. If you're a professional carpenter and putting in a lot of nails you may be tempted to look for a better hammer. The best hammer money can buy will certainly help you hammer in nails better. And that hammer will feel great - like an extension of your arm. It will have perfect balance and enable you to bang in nails all day long without feeling tired. You could be recognized as a true black belt hammering expert able to pound on those nails as long as anyone.

But if you spend the time to find & use a better tool (or even invent a new tool) -- say a nail gun! -- you won't be 5% or 10% faster at hammering - you won't be hammering at all. For the first hour the new nail gun will feel klunky, the tool will be inelegant and ungainly compared to that perfectly balanced hammer you're used to. You may resist because the hammer you're used to has worked so well for so long - you can't count how many hours you've used it to bang in the same nail over and over and over again.

But once you grok the new nail gun and get to used to the new way of accomplishing your task you'll see how much faster the new tool lets you put in nails. In fact, you'll be so fast at putting in nails, you'll stop measuring how long it takes to put in a nail and start thinking about the fact that you're 1,000% faster at putting up wood framing, which is the actual goal. This insightful leap requires you to realize that continuing down your existing path and perfecting your use of your current tool is not the best approach - optimization will not win over innovation.

In software development we are blessed that it is so easy to become 5 or 10% more productive. There is always a new trick to learn, always a new pattern to understand, always one more tip for a language to master, always a faster hotkey or way to do that same task again with fewer clicks, always a piece of code to copy & paste from a previous module or an internet example, always a faster way to repeat the same solution from yesterday over again today. Hmm... maybe "blessed" should really be "cursed".

And maybe the real blessing is that it is also very feasible to invent or find completely new approaches and new tools that make ourselves orders of magnitude more productive - to deliver more business value. The key is to recognize when using a new tool will not just save a few minutes here and there, but will actually save weeks or months of effort!

If you're working on an information supply chain that is processing terabytes of content or billions of rows of data, the LexisNexis DAS system and the ECL language is definitely one of those orders of magnitude improvement tools. It may take a while to stop thinking about SQL and good old RDBMS design, but once you get used to the power of your new nail-gun, you love it!

Friday, November 26, 2010

Forcing new google gadget to load, not from cache

One common challenge when working with Google Gadgets is forcing a new development version to load, not reusing a cached version. A quick search on finds several suggestions and conversations about how to do this, but they are not complete. Renaming the gadget for each save is overkill and not worth it. The developer gadget does not appear to correctly skip the cache in Safari. A little playing reminded me that the key is to edit the bogus querystring parameter to make the URL unique each time you re-add the gadget.

So, as the first suggestion above says, add a parameter like ?nocache=1 to the end of your gadget moduleurl when adding it.

AND... when you need to make another edit, change the parameter! The 2nd time you need for force a reload, set the url to ?nocache=2

Next time, ?nocache=3

And so on...