Skip to content

Software Development Blogs: Programming, Software Testing, Agile Project Management

Methods & Tools

Subscribe to Methods & Tools
if you are not afraid to read more than one page to be a smarter software developer, software tester or project manager!

Architecture

Scaling Mailbox - From 0 to One Million Users in 6 Weeks and 100 Million Messages Per Day

You know your product is doing well when most of your early blog posts deal with the status of the waiting list of hundreds of thousands of users eagerly waiting to download your product. That's the enviable position Mailbox, a free mobile email management app, found themselves early in their release cycle. 

Hasn't email been done already? Apparently not. Mailbox scaled to one million users in a paltry six weeks with a team of about 14 people. As of April they were delivering over 100 million messages per day.

How did they do it? Mailbox engineering lead, Sean Beausoleil, gave an informative interview on readwrite.com on how Mailbox planned to scale... 

Categories: Architecture

3 Ways to Accelerate Business Value

I was talking with a colleague recently about the following question:

“How do you accelerate business value?”

One of the key challenges in today’s world is accelerating business value.   If you’re implementing solutions, the value doesn’t start to get realized until users actually start to use the solution.

THAT’s actually the key insight to help you accelerate business value.

It’s adoption.

When you are planning, if you want to accelerate business value, then you need to think in terms of pushing costs out, and pulling benefits in.  How can you start throwing off benefits earlier, and build momentum?

With that in mind, you have three ways to accelerate business value:

  1. Accelerate adoption
  2. Re-sequence the scenarios
  3. Identify higher value scenarios

Before you roll out a solution, you should know the set of user scenarios that would deliver the most business benefits.

Keep in mind benefits will be in the eyes of the stakeholders.

If the sequence is a long cycle, and the adoption curve is way out there, and benefits don’t start showing up until way downstream, that’s a tough sell.   And, it puts you at risk.   These days, people need to see benefits showing up within the quarter, or you have a lot of explaining to do.

1.  Accelerate Business Adoption

So one of the ways to accelerate business value is to accelerate adoption.    There are many change frameworks, change patterns, strategies and tactics for driving change.    Remember though that it all comes down to behavior change and changing behaviors.  If you want to succeed in driving change in today’s world, then work on your change leadership skills.

This approach is about doing the right things, faster.

2.  Re-Sequence the Scenarios

Another way to accelerate business value is to re-sequence the scenarios.   If your big bang is way at the end (way, way at the end), no good.  Sprinkle some of your bangs up front.   In fact, a great way to design for change is to build rolling thunder.   Put some of the scenarios up front that will get people excited about the change and directly experiencing the benefits.  Make it real.

The approach is about putting first things first.

3.  Identify Higher Value Scenarios

The third way to accelerate business value is to identify higher-value scenarios.   One of the things that happens along the way, is you start to uncover potential scenarios that you may not have seen before, and these scenarios represent orders of magnitude more value.   This is the space of serendipity.   As you learn more about users and what they value, and stakeholders and what they value, you start to connect more dots between the scenarios you can deliver and the value that can be realized (and therefore, accelerated.)

This approach is about trading up for higher value and more impact.

If you need to really show business impact, and you want to be the cool kid that has a way of showing and flowing value no matter what the circumstances, keep these strategies and tactics in mind.

The landscape will only get tougher, so the key for you is to get smarter and put proven practices on your side.

People that know how to accelerate business value will float to the top of the stack, time and again.

You Might Also Like

10 Big Ideas from Getting Results the Agile Way

10 Ways to Make Agile Design More Effective

Agile Methodology in Microsoft patterns & practices

Change Quotes

How We Adhered to the Agile Manifesto on the patterns & practices team

Categories: Architecture, Programming

3 Personal Development Programs that Give You an Edge in Work and Life

“We must become the change we want to see.” – Mahatma Gandhi

I’m a fan of continuous learning and skills development.   The challenge, though, aside from figuring out which training is worth it, is to first and foremost build a foundation that makes all the rest of your training actually worth it.

The key is to first build a rapid learning foundation that helps you absorb all the other training in a more effective way.

I’ve wasted a lot of money over the years testing and trying out various programs that made great promises.   But, during my trials, I’ve also found programs that really do produce outstanding results.   Of course, like anything, you get what you put into it, but some personal development programs are clearly based on better principles, patterns, and practices.  

That’s the gold, and we have to dig deep to find it among the sea of mediocre personal development programs.

Just last night, I was sharing with a friend, how to read 10,000 words a minute (I’m not there, yet.)   I was explaining the process of training to read without subvocalizing (which slows us down, big time … after all, you don’t want the voice in your head to sound like a chip monk, but you don’t actually have to internally vocalize words for your mind to absorb the content.)   Another key is developing high speed imaging skills, where you glance at information and absorb it.  Again, this doesn’t come naturally to most people so you need to train for it.

I realized this personal development program alone has paid me back so many times in so many ways and saved me so much time over the years, whether it’s processing email or devouring books.  I shared with my friend that I don’t have a lot of time to read books, but I’ll use a few hours to read 3-5 books a week, as well as often write up in-depth reviews.  He was amazed, and commented that he’s got a large book pile that he’d like to chomp through.

That’s just one of my secrets that has helped me leap frog in terms of rapid learning and saving massive amounts of time on a daily basis, and being to use my brain for other things than getting mired in walls of text.

But there are more.  

In fact, today I decided to share 3 personal development programs that give you an edge in work and life.    I’ll bottom line it for you here, that the three personal development programs are 1)  Personal Power, by Tony Robbins, 2) The Personal Mastery Program, by Srikumar S. Rao, and 3) Lead the Field, by Earl Nightingale.

In my write up, I shared quick stories on how each of them has helped me gain specific advantages in work and life.  In fact, some almost seem like unfair advantages because of the results they produced.

If you are looking to find the difference that makes the difference, or get an extreme advantage in our ultra-competitive world, then these 3 personal development programs should really help you out.

BTW – here is a tip that I often share when it comes to competition.   While you can draw inspiration from your “competition,” the best way to compete is to actually compete with yourself.   Whether that means pursuit a path of relentless excellence, or simply pushing yourself to higher ground, that’s where your breakthroughs happen.

Here’s to you and your ability to be awesome at life.

Categories: Architecture, Programming

Maven-user starting with package-management in Javascript

Xebia Blog - Sat, 06/15/2013 - 13:47

I wanted to get started with Javascript and AngularJS, a framework for creating frontend for apps – e.g. human user interfaces. Reason:  software is eating the world, but Javascript is eating all software.

I don’t like the messy javascript approach of downloading js files storing them manually in your project-dir, or worse, copy&pasting snippets. I’m used to programming Java, with using Maven to manage my Java-dependencies, and using brew (Mac) or apt-get (Ubuntu) to manage platform-specific dependencies. In this posting all write down my experiences on starting with Javascript-development, with practical use of package managers.

Package management in Javascript

AngularJS as well as lots of other Javascript-frameworks, including well-known ones as jquery, can be installed via a package manager, bower. Bower is a simple and light-weight package manager for the web .

The first challenge I had, how do I install bower? The website of bower mentions npm, a package manager combined with NodeJS.
NodeJS is a Javascript-engine, the same engine as that is used in Chrome. npm is the package manager that’s installed with it. Npm and bower have overlapping functionality but they’re different enough to use both: npm main purpose is installing server-side javascript-components, to be used with NodeJS. Bower’s purpose is installing client-side javascript-components to be used in a web-browser (more information at Stackoverflow).

First the platform specific package management

Then, how do I install node? Of course I want to use a package manager, but since node is compiled per platform (it can’t be turtles all the way down) we have to use the package manager per platform. If you’re using Linux you most likely will be familier with Yum  (Redhat, CentOS) or the apt-get (Debian, Ubuntu) . Typing:

sudo yum install node

or

sudo apt-get install node

is enough to install node.
Note: I’ve added sudo to every command because you’ll need root/admin rights to install the application.
I’m currently using a mac, and then the best package manager to use is Homebrew. It’s not installed by default, but if you go the Homebrew website you’ll have the tool up and running quickly.
After that I can install node via:

brew install node

I don’t use sudo: brew only stores files in /usr/local and I’ve set that directory to be writeable for admin-users. If you think that’s a security risk, you shouldn’t use brew at all.
If you’re a Windows use, you can use nu-get to install nodejs, but I don’t have experience with that tool yet.
If you don’t want to use any package-manager, then install node the more traditional way by downloading the installation package from the Node.js website.

Package management with Bower

Now node is installed I can use npm to install bower:

npm install bower

With have bower installed, I can fetch angularjs.

First I’ll create a directory where my application can reside, then I’ll use bower to add angular to my application.

mkdir workspace/MyNewapp
bower init
bower install angular

The angular library is now available in the directory I’ve just created. The angular.js file can be included just as you’d normally include js files.

<head>
 <script src="components/angular/angular.js"></script>
 </head>

The components contains all the js files used by the applications. If you delete the directory, executing bower install will reconstruct the whole directory based on the bower.json file, so that’s the only file that we need to check to get our libraries.
Instead of including the js-files by manually adding the script src statements, you can also frameworks such as require to require.js to dynamically load javascript files, but that’s beyond the scope of this article.

Part of the build

Javascript will not have eaten all my software yet. Quite a few applications will have backend written as a Java webaplication (.war), build using Maven, with the frontend being Javascript. Here bower can bower help to keep the project maintainable: rather then checking in the javascript-libraries into the src/main/webapp directory, the bower build file bower.json could be checked into source control. Using the exec-maven-plugin you can easily execute bower as part of your regular Maven-build. This way there’s no need to check Javascript-files in subversion, git or any other version-control-system!

...
<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>exec-maven-plugin</artifactId>
 <executions>
 <execution>
 <phase>generate-sources</phase>
 <goals>
 <goal>exec</goal>
 </goals>
 </execution>
 </executions>
 <configuration>
 <executable>bower</executable>
 <arguments>
 <argument>install</argument>
 </arguments>
 <workingDirectory>${basedir}/src/main/webapp</workingDirectory>
 </configuration>
 </plugin>
...
A Javascript build framework: Yeoman

No code is complete, without automatic tests and/or validation. In Maven that’s just a step in the build-process. Furthermore, although Javascript is an interpreted language and therefor now compile-step is needed, you still might want to do some post-processing of your javascript application. This could be possible in Maven, but using a Javascript-build-framework (which you could trigger from Maven just as well) might be more versatile. Yeoman seems a good start. Given the feature-set, Yeoman and Javascript-build-tools in general are worth a whole new post so I won’t dive into that further.

An IDE

Now I want to code in a IDE as good as Eclipse. I’d certainly want code-completion, and automatic checks of my source-code on types, synax and similar errors. Based on experience and hear-say, IntelliJ is very good Javascript support. Also Sublime is a good editor. Eclipse can be used to even, using various plugins. I have not enough experience with any of those IDEs to be able to recommend anything yet.

Conclusion

As a Java-developer and Maven-user I’m used to using package managers to automatically download libraries. With the current state of Javascript, this way of working is still possible when developing Javascript-web-application. So the increasing popularity of Javascript is not as bad as it seems.

The complete project I’ve created while writing this posting is available at my public github-account.

Stuff The Internet Says On Scalability For June 14, 2013


(Steve Gibson on Security Now with a plausible analysis of the tech behind PRISM)
  • 27 billion: WhatsApp messages per day
  • Quotable Quotes:
    • Richard Feinman: If Bill Gates walks into a bar, on average, everybody in the bar is a millionaire.
    • @giltene: Financial Programmers get paid by the CPU cycle. Web developers get paid by the developer cycle.
    • @johndmitchell: “It’s the I/O, stupid.” 
    • @PatrickMcFadin: More people registering at #cassandra13 No worries. Adding more nodes at the reg desk. 
  • Google does it with science. Here's a list of Excellent Papers for 2012 from Googlers and friends. Most relevant for HS readers is a wildly inspiring Spanner: Google's Globally-Distributed Database. But you'll also see the influence of extracting knowledge from data to do subtle and interesting things. On that theme is Improving Photo Search: A Step Across the Semantic Gap. Google is doing hard hard things with seemingly small paybacks, but taken as whole it's clear what is being created is a generative ecosystem built around creating and applying knowledge. 
  • When applications move to the browser it turns out we get the same problems as we had on servers. Effectively Managing Memory at Gmail scale describes how Gmail suffered from 100% CPU usage. As usual the problem was memory: learn how the Gmail team used Chrome DevTools to identify, isolate, and fix their memory problems.

Don't miss all that the Internet has to say on Scalability, click below and become eventually consistent with all scalability knowledge...

Categories: Architecture

Windows Azure: Major Updates for Mobile Backend Development

ScottGu's Blog - Scott Guthrie - Fri, 06/14/2013 - 10:32

This week we released some great updates to Windows Azure that make it significantly easier to develop mobile applications that use the cloud. These new capabilities include:

  • Mobile Services: Custom API support
  • Mobile Services: Git Source Control support
  • Mobile Services: Node.js NPM Module support
  • Mobile Services: A .NET API via NuGet
  • Mobile Services and Web Sites: Free 20MB SQL Database Option for Mobile Services and Web Sites
  • Mobile Notification Hubs: Android Broadcast Push Notification Support

All of these improvements are now available to use immediately (note: some are still in preview).  Below are more details about them.

Mobile Services: Custom APIs, Git Source Control, and NuGet

Windows Azure Mobile Services provides the ability to easily stand up a mobile backend that can be used to support your Windows 8, Windows Phone, iOS, Android and HTML5 client applications.  Starting with the first preview we supported the ability to easily extend your data backend logic with server side scripting that executes as part of client-side CRUD operations against your cloud back data tables.

With today’s update we are extending this support even further and introducing the ability for you to also create and expose Custom APIs from your Mobile Service backend, and easily publish them to your Mobile clients without having to associate them with a data table. This capability enables a whole set of new scenarios – including the ability to work with data sources other than SQL Databases (for example: Table Services or MongoDB), broker calls to 3rd party APIs, integrate with Windows Azure Queues or Service Bus, work with custom non-JSON payloads (e.g. Windows Periodic Notifications), route client requests to services back on-premises (e.g. with the new Windows Azure BizTalk Services), or simply implement functionality that doesn’t correspond to a database operation.  The custom APIs can be written in server-side JavaScript (using Node.js) and can use Node’s NPM packages.  We will also be adding support for custom APIs written using .NET in the future as well.

Creating a Custom API

Adding a custom API to an existing Mobile Service is super easy.  Using the Windows Azure Management Portal you can now simply click the new “API” tab with your Mobile Service, and then click the “Create a Custom API” button to create a new Custom API within it:

image

Give the API whatever name you want to expose, and then choose the security permissions you’d like to apply to the HTTP methods you expose within it.  You can easily lock down the HTTP verbs to your Custom API to be available to anyone, only those who have a valid application key, only authenticated users, or administrators.  Mobile Services will then enforce these permissions without you having to write any code:

image

When you click the ok button you’ll see the new API show up in the API list.  Selecting it will enable you to edit the default script that contains some placeholder functionality:

image

Today’s release enables Custom APIs to be written using Node.js (we will support writing Custom APIs in .NET as well in a future release), and the Custom API programming model follows the Node.js convention for modules, which is to export functions to handle HTTP requests.

The default script above exposes functionality for an HTTP POST request. To support a GET, simply change the export statement accordingly.  Below is an example of some code for reading and returning data from Windows Azure Table Storage using the Azure Node API:

image

After saving the changes, you can now call this API from any Mobile Service client application (including Windows 8, Windows Phone, iOS, Android or HTML5 with CORS).

Below is the code for how you could invoke the API asynchronously from a Windows Store application using .NET and the new InvokeApiAsync method, and data-bind the results to control within your XAML:

    private async void RefreshTodoItems() {

        var results = await App.MobileService.InvokeApiAsync<List<TodoItem>>("todos", HttpMethod.Get, parameters: null);

        ListItems.ItemsSource = new ObservableCollection<TodoItem>(results);

    }   

Integrating authentication and authorization with Custom APIs is really easy with Mobile Services. Just like with data requests, custom API requests enjoy the same built-in authentication and authorization support of Mobile Services (including integration with Microsoft ID, Google, Facebook and Twitter authentication providers), and it also enables you to easily integrate your Custom API code with other Mobile Service capabilities like push notifications, logging, SQL, etc.

Check out our new tutorials to learn more about to use new Custom API support, and starting adding them to your app today.

Mobile Services: Git Source Control Support

Today’s Mobile Services update also enables source control integration with Git.  The new source control support provides a Git repository as part your Mobile Service, and it includes all of your existing Mobile Service scripts and permissions. You can clone that git repository on your local machine, make changes to any of your scripts, and then easily deploy the mobile service to production using Git. This enables a really great developer workflow that works on any developer machine (Windows, Mac and Linux).

To use the new support, navigate to the dashboard for your mobile service and select the Set up source control link:

image

If this is your first time enabling Git within Windows Azure, you will be prompted to enter the credentials you want to use to access the repository:

image

Once you configure this, you can switch to the configure tab of your Mobile Service and you will see a Git URL you can use to use your repository:

image

You can use this URL to clone the repository locally from your favorite command line:

> git clone https://scottgutodo.scm.azure-mobile.net/ScottGuToDo.git

image

Below is the directory structure of the repository:

image

As you can see, the repository contains a service folder with several subfolders. Custom API scripts and associated permissions appear under the api folder as .js and .json files respectively (the .json files persist a JSON representation of the security settings for your endpoints). Similarly, table scripts and table permissions appear as .js and .json files, but since table scripts are separate per CRUD operation, they follow the naming convention of <tablename>.<operationname>.js. Finally, scheduled job scripts appear in the scheduler folder, and the shared folder is provided as a convenient location for you to store code shared by multiple scripts and a few miscellaneous things such as the APNS feedback script.

Lets modify the table script todos.js file so that we have slightly better error handling when an exception occurs when we query our Table service:

todos.js

tableService.queryEntities(query, function(error, todoItems){
    if (error) {
        console.error("Error querying table: " + error);
        response.send(500);
    } else {
        response.send(200, todoItems);
    }       
});

Save these changes, and now back in the command line prompt commit the changes and push them to the Mobile Services:

> git add .

> git commit –m "better error handling in todos.js"

> git push

image

Once deployment of the changes is complete, they will take effect immediately, and you will also see the changes be reflected in the portal:

image

With the new Source Control feature, we’re making it really easy for you to edit your mobile service locally and push changes in an atomic fashion without sacrificing ease of use in the Windows Azure Portal.

Mobile Services: NPM Module Support

The new Mobile Services source control support also allows you to add any Node.js module you need in the scripts beyond the fixed set provided by Mobile Services. For example, you can easily switch to use Mongo instead of Windows Azure table in our example above. Set up Mongo DB by either purchasing a MongoLab subscription (which provides MongoDB as a Service) via the Windows Azure Store or set it up yourself on a Virtual Machine (either Windows or Linux). Then go the service folder of your local git repository and run the following command:

> npm install mongoose

This will add the Mongoose module to your Mobile Service scripts.  After that you can use and reference the Mongoose module in your custom API scripts to access your Mongo database:

var mongoose = require('mongoose');

var schema = mongoose.Schema({ text: String, completed: Boolean });

 

exports.get = function (request, response) {

    mongoose.connect('<your Mongo connection string> ');

    TodoItemModel = mongoose.model('todoitem', schema);

    TodoItemModel.find(function (err, items) {

        if (err) {

            console.log('error:' + err);

            return response.send(500);

        }

        response.send(200, items);

    });

};

Don’t forget to push your changes to your mobile service once you are done

> git add .

> git commit –m "Switched to use Mongo Labs"

> git push

Now our Mobile Service app is using Mongo DB!

Note, with today’s update usage of custom Node.js modules is limited to Custom API scripts only. We will enable it in all scripts (including data and custom CRON tasks) shortly.

New Mobile Services NuGet package, including .NET 4.5 support

A few months ago we announced a new pre-release version of the Mobile Services client SDK based on portable class libraries (PCL).

Today, we are excited to announce that this new library is now a stable .NET client SDK for mobile services and is no longer a pre-release package. Today’s update includes full support for Windows Store, Windows Phone 7.x, and .NET 4.5, which allows developers to use Mobile Services from ASP.NET or WPF applications.

You can install and use this package today via NuGet.

Mobile Services and Web Sites: Free 20MB Database for Mobile Services and Web Sites

Starting today, every customer of Windows Azure gets one Free 20MB database to use for 12 months free (for both dev/test and production) with Web Sites and Mobile Services.

When creating a Mobile Service or a Web Site, simply chose the new “Create a new Free 20MB database” option to take advantage of it:

image

You can use this free SQL Database together with the 10 free Web Sites and 10 free Mobile Services you get with your Windows Azure subscription, or from any other Windows Azure VM or Cloud Service.

Notification Hubs: Android Broadcast Push Notification Support

Earlier this year, we introduced a new capability in Windows Azure for sending broadcast push notifications at high scale: Notification Hubs.

In the initial preview of Notification Hubs you could use this support with both iOS and Windows devices.  Today we’re excited to announce new Notification Hubs support for sending push notifications to Android devices as well.

Push notifications are a vital component of mobile applications.  They are critical not only in consumer apps, where they are used to increase app engagement and usage, but also in enterprise apps where up-to-date information increases employee responsiveness to business events.  You can use Notification Hubs to send push notifications to devices from any type of app (a Mobile Service, Web Site, Cloud Service or Virtual Machine).

Notification Hubs provide you with the following capabilities:

  • Cross-platform Push Notifications Support. Notification Hubs provide a common API to send push notifications to iOS, Android, or Windows Store at once.  Your app can send notifications in platform specific formats or in a platform-independent way. 
  • Efficient Multicast. Notification Hubs are optimized to enable push notification broadcast to thousands or millions of devices with low latency.  Your server back-end can fire one message into a Notification Hub, and millions of push notifications can automatically be delivered to your users.  Devices and apps can specify a number of per-user tags when registering with a Notification Hub. These tags do not need to be pre-provisioned or disposed, and provide a very easy way to send filtered notifications to an infinite number of users/devices with a single API call.  
  • Extreme Scale. Notification Hubs enable you to reach millions of devices without you having to re-architect or shard your application.  The pub/sub routing mechanism allows you to broadcast notifications in a super-efficient way.  This makes it incredibly easy to route and deliver notification messages to millions of users without having to build your own routing infrastructure.
  • Usable from any Backend App. Notification Hubs can be easily integrated into any back-end server app, whether it is a Mobile Service, a Web Site, a Cloud Service or an IAAS VM.

It is easy to configure Notification Hubs to send push notifications to Android. Create a new Notification Hub within the Windows Azure Management Portal (New->App Services->Service Bus->Notification Hub):

image

Then register for Google Cloud Messaging using https://code.google.com/apis/console and obtain your API key, then simply paste that key on the Configure tab of your Notification Hub management page under the Google Cloud Messaging Settings:

image

Then just add code to the OnCreate method of your Android app’s MainActivity class to register the device with Notification Hubs:

gcm = GoogleCloudMessaging.getInstance(this);

String connectionString = "<your listen access connection string>";

hub = new NotificationHub("<your notification hub name>", connectionString, this);

String regid = gcm.register(SENDER_ID);

hub.register(regid, "myTag");

Now you can broadcast notification from your .NET backend (or Node, Java, or PHP) to any Windows Store, Android, or iOS device registered for “myTag” tag via a single API call (you can literally broadcast messages to millions of clients you have registered with just one API call):

var hubClient = NotificationHubClient.CreateClientFromConnectionString(
                  “<your connection string with full access>”,
                  "<your notification hub name>");

hubClient.SendGcmNativeNotification("{ 'data' : {'msg' : 'Hello from Windows Azure!' } }", "myTag”);

Notification Hubs provide an extremely scalable, cross-platform, push notification infrastructure that enables you to efficiently route push notification messages to millions of mobile users and devices.  It will make enabling your push notification logic significantly simpler and more scalable, and allow you to build even better apps with it.

Learn more about Notification Hubs here on MSDN .

Summary

The above features are now live and available to start using immediately (note: some of the services are still in preview).  If you don’t already have a Windows Azure account, you can sign-up for a free trial and start using them today.  Visit the Windows Azure Developer Center to learn more about how to build apps with it.

Hope this helps,

Scott

P.S. In addition to blogging, I am also now using Twitter for quick updates and to share links. Follow me at: twitter.com/scottgu

Categories: Architecture, Programming

Conference Report: Plot Visits XebiCon 2013

Xebia Blog - Fri, 06/14/2013 - 09:06

Tuesday June 4th, Xebia organized the XebiCon event in Fort Voordorp in The Netherlands.  One of our visitors, Dirk Louwers, wrote a conference report which nicely summarizes the day. Dirk Louwers works as CTO for a company called Plot. XebiCon consisted of two keynotes and 15 sessions divided over five parallel tracks. Dirk Louwers reports on both keynotes and three of the parallel sessions.

You can read Dirk Louwer’s report at Plot Visits XebiCon

Thanks to Dirk Louwers for publishing this article!

Constructing Your Parachute On The Way Down, Overcoming Organizational Gravity For Smarties

Xebia Blog - Thu, 06/13/2013 - 20:31

Jumping out of a perfectly good airplane, while in flight, without a parachute is generally not recommended. Strangely, it’s exactly what happens in a lot of corporate lean/agile transformations. People jump enthusiastically, enjoying the rush of sudden speed and the exhilaration of getting things done as a team, only to discover organizational gravity when they hit rock bottom.

If only we knew how to fly. In his acclaimed survival manual “The Hitchhiker’s Guide To The Galaxy,” Douglas Adams points out that there is an art, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss.

To be able to do that, you need power. And for that, you need to know a little bit about how to get it. You need to know about politics.

The political economy of lean transformations

Talking about the political economy of lean/agile transformations always brings a smile to my face. As a political economist turned computer programmer, turned delivery manager, turned project manager, and ultimately turned management consultant, I can talk for hours about this and not get bored.

Don’t worry though, I’ll give you the short summary. The very short summary in fact: All politics is a struggle for power. The political economy of lean/agile transformations then, looks at the effects of the redistribution of power in an organization.

Now, there’s something special about power. To speak with Rosabeth Moss Kanter: “Power is a dirty word. It is easier to talk about money and much easier to talk about sex than it is to talk about power. People who have it deny it; People who want it do not want to appear to hunger for it; And people who engage in its machinations do so secretly.”

Let’s open up about power for a bit. And while we’re at it, let’s lighten up about power as well.

And let’s begin with the end in mind: To learn what you need to know about power to become a more effective change agent, you don’t have to read Machiavelli. You just have to read this book: “Power, Why Some People Have It – And Others Don’t,” by Jeffrey Pfeffer. In that book, the Stanford Professor of Organizational Behavior provides ten tips to help you wield power like a Jedi with a light saber:

  • Mete out resources.
  • Shape behavior through rewards and punishments.
  • Advance on multiple fronts.
  • Make the first move.
  • Co-opt antagonists.
  • Remove rivals–nicely, if possible.
  • Don’t draw unnecessary fire.
  • Use the personal touch.
  • Make important relationships work–no matter what.
  • Make the vision compelling.

Why should you learn about power? You should learn about power for three reasons:

  • First, power is a tool. A sharpened saw in stead of a dull one. By knowing about power, you can help organizations change faster, with less risk of organizational gravity wreaking havoc on your hard work. All tools can be used for evil as well as good. It’s the same with power. Most of us that “don’t like to play games” are just afraid we’ll lose. That’s not principled. That’s chickening out. Wielding power purposefully allows you to be more effective as a change agent. Don’t fight the power, grab it!
  • The second reason you should learn about power is that your opponents have learnt how to wield it to create and protect the status quo. Rest assured that as you enter an organization, it will be structured in such as way as to conserve the status quo. It’s a natural state for organizations. Well, sort of. In reality, all systems are in a state of continuous flux. Which is why all the politicking occurs. It is needed to maintain the status quo. It’s also needed to topple it.
  • The third reason you should learn about power is because of what happens to power in a successful corporate lean/agile transformation. Transforming organizations from a traditional to an lean/agile structure entails a democratization of power in the organization. From management to teams, from IT to business, from top to bottom. Power gets redistributed from the elite to the masses. It’s a radical democratization of decision making power. Such redistributions are generally met with a combination of enthousiasm and resistance. Both are understandable.

But there is another reason companies are remarkably resistant to change. This has to do with organizational gravity.

The concept of organizational gravity

The concept of organizational gravity comes from Mike Cohn. In his book “Succeeding With Agile,” Cohn describes the tendency of an organization to slowly, but surely, veer back to it’s original state. Old habits die hard.

Organizations are structured to maintain the status quo. To escape that, you have to exert a lot of power. The larger the organization, the more power you’ll have to exert. If you don’t exert enough power, whatever you launched will either come crashing down or at best achieve orbit.

Some real life examples

Let’s talk about some real life examples for a minute.

Way back when I was still a Project Manager struggling to convince management that an agile way of working would yield better results, I got called into the office of the head of Project Management. He showed me a letter from one of our most important clients. The letter said we would loose the contract if we did not improve within three months. “That’s your assignment,” the head of Project Management told me, “do whatever it takes to make it right so we don’t loose the client.” And I did. What it took, was some remedial team building and the introduction of an agile way of working. Within six months, the client sent us another letter. This time, it was a signed reference for marketing purposes. A dramatic reversal of customer satisfaction! All thanks to adopting an agile way of working. They kept improving on that way of working after I left and today have a rock solid reputation for delivering high quality software to millions of users. This then, is an example of an organization truly overcoming organizational gravity.

More recently, I consulted with a company that wanted to deliver faster, more relevant software to production with higher quality at lower cost. They’d done a lean transformation already, and asked us to do an agile one as well. So we did. And it was a success! We helped the client create multiple agile teams simultaneously working on the same technology stack and worked with management to introduce a governance structure feeding those teams with a single corporate backlog. And then, the financial crisis hit home. The company had to cut costs fast. So they did the now obvious thing: They asked their agile teams for help. And the teams told management to fire half of them. So they did! How about that? You ask the turkey what to have for dinner for Christmas and his advice is to have turkey! That was the level of understanding the teams had gained from adopting an agile way of working. But, there’s a sad end to this story. The shift from continuous improvement to cost-cutting, that is from Eastern lean to Western lean, destroyed employee loyalty to the company. The first to go off to greener pastures were the managers and team members instrumental in the initial change. Then, organizational gravity hit hard. Last I heard, the teams are being told what to do by management and have stopped thinking for themselves. Apparently, overcoming organizational gravity is not enough, you have to keep at it to avoid falling back down.

Overcoming organizational gravity

So, how do you overcome organizational gravity? And how can you make sure you keep at it to avoid falling back down?

Speed is essential. The faster you go, the faster you’ll show results. The more results you show, the easier it is to maintain momentum and push for a real and lasting change. Also, speed sharpens your focus and facilitates flow. It hightens your senses and prevents you from cruising along without paying close attention to what you’re doing. Just like driving a supercar on a racetrack.

Trouble is, you’re not actually on a racetrack in a corporate lean/agile transformation. For starters, there usually a lot more cars on the road. And they’re not all supercars. They drive at different speeds. Worse, they follow different rules. Worse still, they might not be going in the same direction.

So a corporate lean/agile transformation is more like driving a supercar through heavy cross-town traffic. If you want to do that at speed, it’s hard to keep going without accidents. It’s impossible to do that without breaking the rules.

Breaking the rules is essential. Or rather, using and bending the rules so they work in your favor. To cut through cross-town traffic in a supercar at speed, all you need is flashing lights, a siren, and a badge. In a corporate setting, that’s a sense of urgency, vocal executive support, and power. However, if you’re using and bending the rules in your favor, you’d better have a good reason and a great sense of direction. If not, you’ll lose popular support really quickly.

Navigation is essential. If you don’t know where you’re going, any road’ll take you there. So you have to know where you’re going. Or rather, where you currently want to go. And then get everyone to go along. A great and proven way to do just that on all levels in a corporate setting is applying Toyota Kata:

  • What is the target condition?
  • What is the actual condition?
  • What obstacles are preventing you from reaching the target condition? Which one are you addressing now?
  • What’s your next step?
  • When can we go and see what we have learned from taking the next step?

What we call lean/agile today, resulted in large part from answering those five questions consistently over time. As Mike Rother points out in his book “Toyota Kata,” the roots of Toyota’s success lie not in its organizational structures, but in developing capability and habits in its people. The competitive advantage of an organization lies not so much in the solutions themselves, but in the ability to understand conditions and create fitting smart solutions.

This points to an important, and in my opinion sorely missed, addition to the Agile Manifesto:

Experimentation over implementation.

Do something. See if it works. If it does, do more of that. If it doesn’t, do something else. As opposed to think of something. Talk about it. Talk about it some more. Then talk about something else.

If you don’t go fast, break the rules, and navigate like a pro, you’re likely to go SPLAT! Avoiding a Surprisingly Painful Lean/Agile Transformation (SPLAT), is hard work.

It’s hard work to keep up the pace. In a truly lean/agile organization, you’re not just sprinting, you’re doing back-to-back sprints without stopping. It’s more like a marathon. Actually it’s more like an ultra. To be able to do that, you must want it badly. And you must train. A lot.

It’s hard to break the rules. Sometimes, this may get you fired. Like in the story Brian Marick likes to tell about a certain Scrum Master:

  • An agile team was made to work in cubicles, like the rest of the company.
  • Agile methods aside, cubicles are the “single worst arrangement of humans and objects in space for the purpose of developing software.”
  • The team proposed changing their workspace to an open one.
  • Furniture Police turned them down.
  • In response, the Scrum Master went to the office over the weekend. She disassembled the cubicles and changed the office layout to an open one. On Monday, she declared to the Furniture Police that “If the cubicles come back, you will have to fire me.”
  • They gave in.

But they could have just as well taken her up on her offer and fired her.

Hard work, hard work, hard work. Are there really no shortcuts? Well, no, not really. But you can speed things up a bit. Quite a bit in fact. Let’s have a look at some of these “wormholes.”

Wormholes to the rescue

A wormhole, or Einstein-Rosen bridge, is a shortcut through spacetime, much like a tunnel with two ends each in separate points in spacetime.

Start your lean/agile transformation small, but make sure to select a really important project. Preferably one with lots of risk and high pressure. This will allow you to start fracking the organization releasing the hidden energy reserves encased within.

Propose a ship-it day to show everyone the power of self-organization. Ship-it days are a fun way to foster creativity, allow people to scratch itches and get radical. They’re also a wake-up call to management showing them what happens if they stop holding people back.

No one in their right minds should be against the disciplined application of common sense. And that’s exactly what lean/agile is. In other words: Just do it. So if you can’t get anyone to approve your lean/agile transformation effort, remember it’s more blessed to ask forgiveness than permission. Get going, kickstart a never-ending cycle of continuous improvement, and merrily deal with whatever impediments you encounter to getting things done. Results don’t lie!

So, now for constructing your parachute on they way down to overcome organizational gravity. You jump in without a parachute. How do you avoid hitting rock bottom? I have seven tips for you to help you do that.

7 powertips for smarties
  1. Be honest with yourself. See things as they are, not as you want them to be. Acknowledge your feelings, then use the scientific method to check their validity.
  2. Use social network analysis to map the distribution of power in an organization. Visualizing the flow of power makes it easy to tap into it.
  3. Use heat maps to identify the points of maximum leverage in an organization. Visualizing the distribution of power makes it easy to know where to start drilling for oil.
  4. Create a power matrix to determine who to influence.
  5. Show genuine interest in everyone you meet. You never know where they’ll end up later. Make eye contact, let them talk first, ask open-ended questions, listen.
  6. Tap into the awesome power of the secretary or personal assistant. Get to know them. Treat them as you would their bosses.
  7. If all else fails: Run!
Summary

Do your cause and yourself a favor, and learn about power. Be mindful of organizational gravity and use any means possible to overcome it, be it the smart use of power, plain-old hard work, or a shortcut. If you can’t beat them, or join ‘em and then beat them from within, run! Apply for a job at Semco, Google, or Toyota, to name just a few truly lean companies. Or start your own. Don’t settle for less! You deserve to work at an awesome company!

Agile Crisis Management Explained – part 2

Xebia Blog - Thu, 06/13/2013 - 19:09

This blogpost completes the model that I use to build up a mental image of a new crisis situation when I encounter one. I use it to structure and prioritize the thousands of pieces of new information that I need to process in order to get a good picture of what I’m dealing with. In fact it is a tool to get a fast and useful insight in the current crisis situation that will help me to consolidate all the different inputs into a combined and useful image of what’s going on. This image helps me to communicate with the stakeholders and to define the actions needed.

In my previous post the fundamentals of the model have been explained.
In this post the rest of the mental image usage is described.

agile crisismodel
figure: Burms temple

Remember the essence of the first blogpost:
A strong temple is built upon solid ground and a strong foundation; likewise a successful project is built upon engaged project members and clear responsibility.
When you want to assess a project, start with investigating engagement and responsibility. To do this, look at two things

  • Are ‘change’ and ‘structure’ well balanced? So people have the opportunity to express their engagement.
  • Is leadership and responsibility effectively implemented? So people operate in their strength and feel free to do what seems right?

Use the questions above to assess the fundamentals of a solution to any crisis.

Haha! Fundamentals are great, but not everything; So let’s move on!

PART III: THE TEMPLE FLOOR – A working value chain
Have you ever been in a real temple? The first thing that strikes you is the awesomeness of the beautiful floor. It’s that awesome floor that takes your breath away and makes you fall in love with this ancient piece of art The beauty of a successful project lies in the elegant effectiveness of a working valuechain, in two dimensions: the functional product dimension and the dimension of virtual ownership.

Looking at a value chain from a Functional point of view means, you have to get the minimal product working end-2-end. Once this is done, things can only get better.
Creating your mental picture of this area can take some effort. Domain knowledge is helpful, so talk to people who have it and look at the project history together. The product owner is a good place to start. Have a look at the storymap and if there is none, make one. You could also draw out end-2-end user interaction scenarios with the product owner. Start with the “happy flow” and once finished look at the features in it already built and what has to be added. Find out what’s holding the project back from completing an end-2-end value chain.
Example questions that can give you a head start:

  • Can you explain to me what the minimal end-2-end functionality looks like?
  • What’s the value of this functionality for the customer?
  • What is needed to complete the first end-2-end functionality set?

Ownership wise, you have to take charge of the valuechain and what happens to it during the course of the project. If your program runs on shared environments, like sharing test or acceptance environments with other projects, find out what is the priority for your program. From there on implement some form of flight control mechanism. On shared environments the case is often that operations is expecting the supplying party to coordinate, and the supplying party is expecting the operations to coordinate. Result is a big mess you need to clean up.
To get an image of what’s going on, talk to Operations. See how often ops has issues when deploying and were they originate from. Of course it goes without saying that this point in your model gets more important and complex the more third party vendors are in acting in your value chain.
Questions I like to use to get my head around this part of the model:

  • Who’s managing the timeslots and priorities on the different environments?
  • How long does it take to execute a deployment? What kind of recurring issues occur?
  • Which colleagues operate right before and right after you in the value chain?
  • What’s to be considered the starting point of the value chain? What the end?

PART IV: Four majestic pillars that support the roof
There are four pillars that support the roof of our temple:

1. Create a single managed backlog:

It is imperative to have a single managed backlog. Derailed projects often show a myriad of specs and priorities across the entire program and strange constructs to manage these. Get the whole thing back to a single product owner and concrete priorities. Work out the backlog in rapid design workshops for at least the next release and estimate this with the entire team. To find out if productowners are aligned and focused, check if there is a single backlog or storymap in place together with a sort of chief product owner. Also check if the chief has a clear vision on the product (especially the bare minimal viable product) and the mandate to make decisions accordingly. A good second indicator is to see whether or not productowners are discussing central release goals instead of their own. How often do they jointly check if these central goals are going to be met? Even when there is a clear central backlog and goals, productowners could still work separately in practice mainly cleaning their own alleys.

2. Know your velocity:

In multi-team programs, it’s often hard to work with velocity across teams if you want to relate this to a centralized release- and/or product backlog. But in a program under pressure, it is imperative that you obtain this information to see what scope you will be able to finish given the circumstances and current delivery speeds. To check what’s happening based on velocity ask how teams do their estimation and who estimates what with regards to the final product. Next to this you can ask what reference point is being used and if this is the same for all teams. In the latter case, you usually see. You may need to adjust- and act on a number of things to make any sense of a common velocity, depending on the answer to the above questions.

3. Work end-2-end:

Planning wise you do not want any loose ends to be lying around. This is a great project risk. Velocity in relation to planning-information is only worth anything, when based on end-2-end results from the teams. So from requirement to production (ready) products. To check if the teams and the program as a whole is working end-2-end each sprint, look at program planning phases and talk to program and project managers. They might reveal that they want to do other test types after “development” work is “done”… My rule of thumb is the thinner the definition of done, the more risk is shifted to the end of the program, the harder it will be to mitigate this risk and tame the crisis.

4. Start continuous improvement on the program level in a PTC (Program Transition Community).

I am sure you have all heard of enterprise transition communities or ETC’s. Just like with an agile adoption, taming a project crisis is also not a one-time effort, but a continuous one. Solving all problems in just one go is an illusion. In derailed programs, continuous improvement on program level is often non-existing, and you can’t rely on the self-improvement of individual delivery teams alone. Simple look-ups can improve your mental image. See if there is a program level standup and if issues and impediments are made explicit. See if there is some record available of improvements etc. To see indications of the base to start improving on this level, look at the solve time for impediments not solved within the teams.

PART V: THE ROOF – Prioritized goals and the eternal bliss of: transparent, reliable program results
The pillars hold the roof. The main part of the temple, pointing towards the eternal bliss of transparent, reliable program results. The roof therefor represents the priority in program goals. In many programs in crisis we see, there are multiple program goals trying to be completed at the same time. The goals set by the steering committee have to be streamlined by prioritization. Just like the temple roof is pointy, everything done in the program at any given time should lead to the top priority goal. One goal at a time will keep the focus in the program optimal and guarantee the quickest results. People can still have their own sub-goals, but they should at all time have a direct contribution to the central goal with the highest priority. To get a view on this area, ask the same question to various people in different layers of the program hierarchy; what is our main priority/ goal right now? If your getting different answers there might be a problem (try to ask why to see if the answers lead the same destination), if people are unable to answer, you also have a problem. Also look if you see the goals being properly communicated and repeated. In group sessions, in written meeting minutes and most importantly in peoples workspace.

Conclusion
The first important step to resolve a crisis is to understand its context and situations. Easily said, but not always a simple thing to do. In complex situations, a model that offers a structure for prioritizing information and building up a mental image is of great help. Burms temple is such a model.

Next steps
The next step is to determine what actions need to be done to mitigate the current situation you have modeled using Burms temple. From here you and your client can share and form this common vision into an actionable plan, which will raise you from crisis-mode towards transparent, reliable program results……..

PS thanks again Geert!

Busting 4 Modern Hardware Myths - Are Memory, HDDs, and SSDs Really Random Access?

"It’s all a numbers game – the dirty little secret of scalable systems"

Martin Thompson is a High Performance Computing Specialist with a real mission to teach programmers how to understand the innards of modern computing systems. He has many talks and classes (listed below) on caches, buffers, memory controllers, processor architectures, cache lines, etc.

His thought is programmers do not put a proper value on understanding how the underpinnings of our systems work. We gravitate to the shiny and trendy. His approach is not to teach people specific programming strategies, but to teach programmers to fish so they can feed themselves. Without a real understanding strategies are easy to apply wrongly.  It's strange how programmers will put a lot of effort into understanding complicated frameworks like Hibernate, but little effort into understanding the underlying hardware on which their programs run.

A major tenant of Martin's approach is to "lead by experimental observation rather than what folks just blindly say," so it's no surprise he chose a MythBuster's theme in his talk Mythbusting Modern Hardware to Gain "Mechanical Sympathy." Mechanical Sympathy is term coined by Jackie Stewart, the race car driver, to say you get the best out of a racing car when you have a good understanding of how a car works. A driver must work in harmony with the machine to get the most of out of it. Martin extends this notion to say we need to know how the hardware works to get the most out of our computers. And he thinks normal developers can understand the hardware they are using. If you can understand Hibernate, you can understand just about anything.

The structure of the talk is to take a few commonly held myths and go all MythBusters on them by seeing if they are really true. Along the way there's incredible detail on how different systems work, far too much detail to gloss here, but it's an absolute fascinating talk. Martin really knows what he is talking about and he is a good teacher as well.

The most surprising part of the talk is the counter intuitive idea that many of the devices we think of as random access, like RAM, HDDs, and SSDs, effectively become serial devices in certain circumstances. A disk, for example, is really just a big tape that's fast. It's not true random access. Keep on reading to see why that is...

Categories: Architecture

Sponsored Post: Apple, Two Sigma, Cendea, RAMP, Blurocket, Incapsula, Dow Jones, Surge, Rackspace, aiCache, Aerospike, Percona, ScaleOut, New Relic, LogicMonitor, AppDynamics, ManageEngine, Site24x7

Who's Hiring?
  • An exciting opportunity for a Software Engineer to join Apple's Messaging Services team. We build the cloud systems that power some of the busiest applications in the world. You'll have the opportunity to explore a wide range of technologies, developing the server software that is driving the future of messaging and mobile services. To apply please visit this URL
  • Two Sigma is building our next generation research environment, and we're looking for a functional programmer with a passion for distributed computing. We're scaling machine learning and operations research to tens of thousands of CPUs. Please send qualifications to buildstuff@twosigma.com.
  • Have strong LAMP skills and the ability to make systems really scale?  Our Client – a multibillion dollar global entity, has Retained us to find someone who can lead the Architecture of a portfolio of LAMP oriented companies. Interested applicants should email WAllen@Cendea.com.
  • Blurocket is looking for smart and fun people to build its next generation ecommerce platform.  If creating scalable services is in your DNA, let us know! (Salary $250k+). Apply over at StackOverflow.
  • Amazing things are happening at Dow Jones – help build the next generation News and Media platforms that serve the best journalism in the world. High-impact, passionate, and driven technologists thrive in our environment, building platforms that deliver trusted content that enlightens and inspires millions around the world.  Please apply online
  • LogicMonitor is looking for a Front End developer to have a huge impact, be valued, realize their dreams, and help us realize ours. We are looking for someone to own the code that delivers the design and usability of LogicMonitor's enterprise SaaS application(s). Please apply online
  • New Relic is looking for a Java Scalability Engineer in Portland, OR. Ready to scale a web service with more incoming bits/second than Twitter?  http://newrelic.com/about/jobs
Fun and Informative Events
  • Surge - The Scalability & Performance Conference, presented by OmniTI is happening on Sept. 12th-13th. Special, High Scalability Reader Rate: $50 off registration--now through September 10! Book hotel and get $50 off, from OmniTI. FREE Puppet training w/registration, September 11.
  • It's back! Join the MySQL Community at the annual Percona Live MySQL Conference and Expo in Santa Clara, April 22-25. This year's conference features an outstanding lineup of 92 speakers delivering 112 breakout sessions over three days! 
  • Visit Budapest this July and learn from those who have been in the trenches of building highly scalable systems at RAMP.
Cool Products and Services
  • With a 5-minute setup, Incapsula provides any website with protection against all known and emerging threats (Including spam, SQL Injections, DDoS and more), and acceleration through a global CDN, caching and optimization. See the power of Incapsula on your website with our Free trial.
  • Install Aerospike Community Edition in 10 Minutes! To help you get up and running with our Community Edition as quickly as possible, we've created a tutorial video on AerospikeTV that provides guidance on installing your free database. Download our FREE Database and see how easy it is to install!
  • The Rackspace Cloud Application Programming Interface (API)  has changed the game allowing customers to easily modify their cloud configuration with just a few lines of code. The API is a powerful tool and something everyone should know about, regardless of your level of technical ability.
  • aiScaler, aiProtect, aiMobile integrated solutions for Dynamic Site Acceleration, Denial of Service Protection and Simplifying Mobile Content. Free instant trial, no sign-up required . http://aicache.com/
  • New Benchmark shows Aerospike nearly 10x Faster than the Competition. Thumbtack Technology YCSB Benchmark shows Aerospike nearly 10x faster than Cassandra, Couchbase and Mongodb. Read it now!
  • ScaleOut Software. In-Memory Data Grids for the Enterprise. Download a Free Trial.
  • LogicMonitor - Hosted monitoring of your entire technology stack. Dashboards, trending graphs, alerting. Try it free and be up and running in just 15 minutes.
  • AppDynamics is the very first free product designed for troubleshooting Java performance while getting full visibility in production environments. Visit http://www.appdynamics.com/free.
  • ManageEngine Applications Manager : Monitor physical, virtual and Cloud Applications.
  • www.site24x7.com : Monitor End User Experience from a global monitoring network.

If any of these items interest you there's a full description of each sponsor below. Please click to read more...

Categories: Architecture

The 10 Deadly Sins Against Scalability

In the moral realm there may be 7 deadly sins, but scalability maven Sean Hull has come up Five More Things Deadly to Scalability that when added to his earlier 5 Things That are Toxic to Scalability, make for a numerologically satisfying 10 sins again scalability:

  1. Slow Disk I/O – RAID 5 – Multi-tenant EBS. Use RAID 10, it provides  good protection along with good read and write performance. The design of RAID 5 means poor performance and long repair times on failure. On AWS consider Provisioned IOPS as a way around IO bottlenecks.
  2. Using the database for Queuing. The database may seem like the perfect place to keep work queues, but under load locking and scanning overhead kills performance. Use specialized products like RabbitMQ and SQS to remove this bottleneck.
  3. Using Database for full-text searching. Search seems like another perfect database feature. At scale search doesn't perform well. Use specialized technologies like Solr or Sphinx.
  4. Insufficient Caching at all layers. Use memcache between your application and the database. Use a page like cache like Varnish between users and your webserver. Select proper caching options for your html assets.
  5. Too much technical debt. Rewrite problem code instead of continually paying a implementation tax for poorly written code. In the long run it pays off.
  6. Object Relational Mappers. Create complex queries that hard to optimize and tweak.
  7. Synchronous, Serial, Coupled or Locking Processes. Locks are like stop signs, traffic circles keep the traffic flowing. Row level locking is better than table level locking. Use async replication. Use eventual consistency for clusters.
  8. One Copy of Your Database. A single database server is a choke point. Create parallel databases and let a driver select between them.
  9. Having No Metrics. Visualize what's happening to your system using one of the many monitoring packages.
  10. Lack of Feature Flags. Be able to turn off features via a flag so when a spike hits features can be turned off to reduce load.
Categories: Architecture

What Keeps Leaders Up at Night

One of the best books I’ve read lately is, What Keeps Leaders Up at Night, by Nicole Lipkin.  I wrote my review at:

What Keeps Leaders Up at Night

The book is all about how to be at your best, when things are at their worst.

By learning a core set of leadership skills and psychology tools, you equip yourself to deal with the tough stuff, no matter what’s going on.

It covers a huge amount of space in terms of psychology theories, terms and related concepts.   Here’s a sampling: 

Confirmation Bias, Transactional Model of Stress, Social Exchange Theory, Norm of Reciprocity, Extrinsic Motivation, Intrinsic Motivation, Cognitive Dissonance, Group Conformity, Social Identity Theory (SIT), Social Loafing, Collective Effort Model (CEM), Polarization, Groupthink, Shadenfreude.

Lipkin also covers communication styles, stress coping skills, dealing with envy, how to build better group dynamics, how to resolve conflict, how to build better self-perception, how to build constructive core beliefs, and more.

Overall, the book is a great guide on how to keep our cool when things get hot, and Lipkin reminds us that others only see our behavior:

“To paraphrase an old adage, ‘We see ourselves as a combination of our thoughts, fears, and intentions, but others just see our behaviors.’”

Aside from learning how to be more influential, another bonus of the book is that it will help you recognize and label thinking errors and cognitive distortions, which often lead to bad behaviors.

You Might Also Like

7 Habits of Highly Effective Program Managers

10 Free Leadership Tools for Work and Life

Best Leadership Books

Inspire a Vision with Skill

Leadership Development in a Box

Categories: Architecture, Programming

Reintroducing software architecture into agile teams

Coding the Architecture - Simon Brown - Fri, 06/07/2013 - 19:01

I ran a half-day workshop yesterday at the Software Architecture Summit in Berlin, where we crowdsourced the answers to a number of questions, focussed around why some agile software teams don't think about architecture and how we can change this situation. Of course, much of what we discussed can be applied to *any* team, but the focus was agile here.

What is architecture?
1. What is architecture?

What is agile?
2. What is agile?

Is architecture important?
3. Is architecture important?

Why don't some agile teams think about architecture?
4. Why don't some agile teams think about architecture?

How can we reintroduce agile teams to architecture?
5. How can we reintroduce agile teams to architecture?

You can view my slides online. Thanks to everybody that came along, I really enjoyed it.

Categories: Architecture

Stuff The Internet Says On Scalability For June 7, 2013

Hey, it's HighScalability time:


(Ever feel like everyone has already climbed your Everest?)
  • Trillion Particles, 120,000 cores, and 350 TBs: Lessons Learned From a Hero I/O Run on Hopper
  • Quotable Quotes:
    • @PenLlawen: @spolsky In my time as a scalability engineer, I’ve seen plenty of cases where optimisation was left too late. Even harder to fix.
    • @davidlubar: Whoever said you can't fold a piece of paper in half more than 7 times probably forget to unfold it each time. I'm up to 6,000.
    • deno:  A quick comparison of App Engine vs. Compute Engine prices shows that App Engine is at best 10x more expensive per unit of RAM.
    • Fred Wilson: strategy is figuring out what part of the market the company wants to play in, how it goes to market, and how it differentiates itself in the market it is about what you are going to do and importantly what you are not going to do
    • Elon Musk: SpaceX was able to achieve orders of magnitude savings in rockets. Instead of looking at what other rockets cost, they looked at the material cost (which is only 1-2% of total cost) which was small; clearly people were doing silly things on how the rockets were put together; for SpaceX, the savings came from efficiently putting the rocket together!

  • Switched away from App Engine, couldn't be happier. Shows how GCE may start to cannibalize GAE even though they seem to be targeted at different market segments. When costs go up with usage on GAE there's a natural force pushing programmers to drop down an abstraction level and lower costs and get more power. In this case GCE cost about a third of what GAE cost with much more performance headroom and much better latency. What you give up is safety, GAE replicates and you have to do it by hand on GCE. It's always about tradeoffs.

Don't miss all that the Internet has to say on Scalability, click below and become eventually consistent with all scalability knowledge...

Categories: Architecture

Gartner EA Conference Summary in Top Influential Tweets

Mike Walker's Blog - Thu, 06/06/2013 - 23:29

I usually don’t post recaps of events in their tweets but since I was unable to do full coverage of the event I have picked out what I thought to be the most influential tweets. Lots of good nuggets from the Gartner analysts along with commentary from myself and other EA’s at the event.

 

Day One

· Mike Walker ‏(@mikejwalker) - Good advice from Betsey Burton: Time box your EA activities. Ex. Allstate Chief Arch 16 wks. To keep atten. of the biz #entarch #GartnerEA

· Mike Walker ‏(@mikejwalker) - Betsy Burton: business capability should be named <verb> <noun>. Do you agree? Not sure I do, mixing concerns. #entarch #bizarch #GartnerEA

· Mike Walker ‏(@mikejwalker) - Great overview on Business Capabilities by Betsy Burton. Here's a useful BCM I use. #entarch #bizarch #gartnerea http://mikejwalker.typepad.com/.a/6a011279700eb728a4016306b433f8970d-pi …

· Pete G. ‏(@pgrivas) - Beyond a level 0/1 diagram, #ArchiMate seems to me like a great tool to continue on with Business Capability Modeling. Thoughts? #GartnerEA

· Olivier Laquinte ‏(@OLaquinte) - A process model describes how the business operates, while a business capability model describes what the business does #gartnerEA

· Mike Walker ‏(@mikejwalker) - Connecting Strategy to Execution Enablers. More than business capabilities. #entarch #bizarch #gartnerea http://mikejwalker.typepad.com/.a/6a011279700eb728a4017c31f84119970b-pi …

· Brian Oberman ‏(@brianoberman) - Business capabilities modeling bridges the gap between business strategy and IT execution. #GartnerEA

· Mike Walker ‏(@mikejwalker) - Extending #GartnerEA thinking: Connecting Strategy to Execution is more than business capabilities. #entarch #bizarch http://mikejwalker.typepad.com/.a/6a011279700eb728a4017c33f8323e970b-pi …

· Voytek Janisz ‏(@VoytekTheEA) -Business Capability modeling is a great way to bridge communication gap between business and IT #GartnerEA #entarch

· Homero Padilla Cano ‏(@zerkhufu) - “nobody cares about your work, they care about your impact in creating/pushing business outcomes” @ #GartnerEA

· Olivier Laquinte ‏(@OLaquinte) - @brian_burke - since #EA are influencers, should they be on projects steering committees to ensure alignment? #gartnerEA

· Olivier Laquinte ‏(@OLaquinte) - Effectiveness + Efficiency = #EA Impact #gartnerEA

· Olivier Laquinte ‏(@OLaquinte) - Measuring #EA : actions as a result of influence is an impact #gartnerEA

· Fred (‏@froidianslip) - Change is a team sport. #GartnerEA

· Fred (‏@froidianslip) - Brian Burke told me no one cares about me, they only care about what I've done for them lately. #GartnerEA #welcometothebusiness

· Duncan Mundell ‏(@dcmundell) - It's the EA's responsibility to negotiate non-functional requirements by helping the business balance cost, risk and capabilities #GartnerEA

· Voytek Janisz ‏(@VoytekTheEA) - Use "Mickey Mouse" diagrams when communicating architecture to business. Leave UML, BPMN, ArchiMate behind. #entarch #GartnerEA

· Voytek Janisz ‏(@VoytekTheEA) - Panel discussion: "Architecture is about managing change and about communication" #entarch #GartnerEA

· Rebecca Newland ‏(@NewlandRebecca) - Five Things I Learned At The #Gartner Enterprise Architecture Summit #GartnerEA http://buff.ly/17YtlAn

· Derek E. Weeks ‏(@weekstweets) - Gartner's @MarkRaskino "watch out for new roles of ChiefDataOfficer and ChiefDigitalOfficer at your corp this year". #gartnerea #opentext

· Fred (‏@froidianslip) - The new CIO... Chief Innovation Officer. But the role is about much more than technology. #GartnerEA

· Fred (‏@froidianslip) - Entrepreneurial is not a word that sits well with most CIOs. #GartnerEA

· Derek E. Weeks ‏(@weekstweets) -Who is managing your unstructured information? #gartnerea #opentext pic.twitter.com/tqKAvhuEnd

· Brian Oberman ‏(@brianoberman) -The way to succeed in social media: purpose, purpose, purpose. #GartnerEA #socialmedia

· Brian Oberman ‏(@brianoberman) - 90% of organizations social collaboration efforts fail. #GartnerEA

· Steve Armstrong (‏@sakarmstrong) - Enterprise architecture is something we do, not something we deliver. #gartnerea

· Homero Padilla Cano ‏(@zerkhufu) - “sharing information leads to business innovation and new ways to use information” @ #GartnerEA

· David Middleton (‏@_dmiddleton) - Social collaboration isn't disruptive b/c of the technology but b/c of how it is leveraged and utilized to affect change. #GartnerEA

· Fred (‏@froidianslip) - Great talk on CEO concerns, but I keep thinking, "Bring me the holy hand grenade. #GartnerEA #projectingmontypython

· Fred (‏@froidianslip) - The gap between the business and IT is one of understanding and ultimately a language gap between people. #GartnerEA

· Fred (‏@froidianslip) - You should never trust a survey people, really. #GartnerEA #CEOconcerns

· Derek E. Weeks ‏(@weekstweets) - @MarkRaskino Recession is still problem but tech is not slowing...expect more tech demand as growth strategies unfold #gartnerea #opentext

· Brian Oberman ‏(@brianoberman) - Build systems to empower people. #GartnerEA #socialmedia

· Pete G. ‏(@pgrivas) - @mikejwalker From your tweets we must be at the same session at #GartnerEA. I love your site BTW - great information.

· Mike Walker ‏(@mikejwalker) - #GartnerEA is echoing my thoughts of #BizArch It's NOT creating strategy but rationalizing into execution #entarch http://architectureandgovernance.com/content/walker-talks-business-architecture-and-best-practices-using-it …

· David Middleton (‏@_dmiddleton) - By 2020, alternatives to formal higher education will make education more engaging, broadly accessible and broadly recognized. #GartnerEA

· Mike Walker ‏(@mikejwalker) - Betsy Burton: No.1 #bizarch mistake is to separate it from #EntArch They are one in the same. <-Agreed! #GartnerEA

· Michael McNamara ‏(@mfMcNamara) - Develop a crisis management playbook #GartnerEA

· Pete G. ‏(@pgrivas) - Worst practice in #EnterpriseArchitecture is starting out with current state #GartnerEA

· Pete G. ‏(@pgrivas) - #EnterpriseArchitecture is going to be a discipline of Strategic Planning by 2020 - #GartnerEA

· Homero Padilla Cano ‏(@zerkhufu) - increase sales is not strategy #GartnerEA

· Matt Edwards ‏(@mwedward) - "Only 10% of enterprises successfully execute their strategies - Michael Hammer." #gartnerea

· Matt Edwards ‏(@mwedward) - The key to successful business architecture is family counseling. Get past the tears and differences, and work together. #gartnerea

· Ryan Pehrson ‏(@rpehrson) - #GartnerEA Betsy Burton. "60% of EA is 'Family Counseling'"

· Brian Oberman ‏(@brianoberman) - Want to add value as an EA? 1. deliver real outcomes, 2. deliver signature ready recommendations. #GartnerEA

· Brian Oberman ‏(@brianoberman) - There are no IT projects. There are only business projects. #GartnerEA

· Mike Walker ‏(@mikejwalker) - #GartnerEA External disruptions effect EA. <- Agreed posted in '09: EA is Different Based On Where You Live #entarch http://www.mikethearchitect.com/2009/05/is-architecture-different-based-on-where-you-live.html …

· Voytek Janisz ‏(@VoytekTheEA) - When strategy is not articulated, it is the business outcomes that can help frame it up. #entarch #GartnerEA

· Brian Oberman ‏(@brianoberman) - Even if your strategy isn't explicitly documented you can derive it from what you are currently doing. #GartnerEA

· Mike Walker ‏(@mikejwalker) - #GartnerEA Keynote: Let industry frameworks guide not prescribe <-Agree #entarch

· Mike Walker ‏(@mikejwalker) - #GartnerEA Keynote: Frameworks are bad, let us introduce a new framework and method #entarch

· Brian Oberman ‏(@brianoberman) - Categorize EA business driven outcomes as: run, grow or transform. #GartnerEA

· Fred (‏@froidianslip) - EA goes agile and pragmatic according to Brian Burke. #GartnerEA

· Matt Edwards ‏(@mwedward) - Business objectives should be timeboxed (as should everything)... #gartnerea

· Voytek Janisz ‏(@VoytekTheEA) - Business outcome driven EA is the next wave after the framework-driven EA #GartnerEA #entarch

· Brian Oberman ‏(@brianoberman) - EA is entering third phase. First was framework, followed by process and moving towards business outcome driven EA. #GartnerEA

· Brian Oberman ‏(@brianoberman) - By 2015 40% of global 1000 companies will use gamification as a strategy. #GartnerEA

· Mike Walker ‏(@mikejwalker) - BYOD will double the amount of malware in the enterprise through 2014 #GartnerEA #entarch

· Duncan Mundell ‏(@dcmundell) - Successful #enterprisearchitecture is all about outcomes and not just processes and standards alone. #gartnerea

· Mike Walker ‏(@mikejwalker) - By 2015 #bigdata demand will reach 1 million jobs but only 1/3 will be filled #GartnerEA #entarch

· Brian Oberman ‏(@brianoberman) - By 2015 big data will reach 1 million jobs in global 1000 but only 1/3 will be filled. #GartnerEA

· Matt Durham ‏(@matthewdurham) - Enterprise architects influence $1.1 trillion in enterprise IT spend according to #Gartner #GartnerEA. My influence is somewhat smaller.

 

Day Two

· Fred (‏@froidianslip) - BYOD = Bring Your Own Data #GartnerEA

· Brian Oberman ‏(@brianoberman) - Prediction: we will use 4 - 6 devices and share data via the cloud. #GartnerEA #hopenot

· Fred (‏@froidianslip) - BYO-let-my-company-and-I-decide-what-is-best-for-both-of-us #GartnerEA

· Fred (‏@froidianslip) - 13% NEVER use company supplied devices for personal communications. Is that on or off the record? #GartnerEA #neverisaverystrongword

· Brian Damiani ‏(@bwdamiani) - Interesting: The majority of speakers are British. All very good but an indicator that the US is still lagging in EA adoption? #GartnerEA

· Vijay Nuthulapaty ‏(@VNatGartnerEA) - @markmcgregor Coming to #GartnerEA made me realize that my team is not alone in challenges with EA. Definitely therapeutic.

· Fred (‏@froidianslip) - Found my new favorite phrase in the disruption session: behavioral economics. Can I now have a behavioral recession? #GartnerEA

· Brian Oberman ‏(@brianoberman) - #5 disruption: brain science and neurobusiness. #GartnerEA

· Vijay Nuthulapaty ‏(@VNatGartnerEA) - @mikejwalker Amen brother. And not just detailed designs, issue resolution as well. #gartnerea

· Mike Walker ‏(@mikejwalker) - Scott Bittler - “Just because you can do something [detail design] as an EA doesn’t mean you should” #GartnerEA #EntArch

· Brian Oberman ‏(@brianoberman) - #3 disruption to business: robotics and human augmentation. #GartnerEA

· Brian Oberman ‏(@brianoberman) - #2 disruption to business: human system interaction. #GartnerEA

· Brian Oberman ‏(@brianoberman) - #1 disruption to business: the internet of things. #GartnerEA

· Vijay Nuthulapaty ‏(@VNatGartnerEA) - Met a lot of interesting architects at #gartnerea . By my guesstimate only 50% are in an EA role currently.

· Voytek Janisz ‏(@VoytekTheEA) - EA roadmaps are visualization of strategy. Use them to articulate known strategy or to help elicit it from business. #GartnerEA #entarch

· Brian Oberman ‏(@brianoberman) - Favor enablement not control in your EA program. #GartnerEA

· Duncan Mundell ‏(@dcmundell) - Successful enterprise architecture is about doing the basics right. Focus on the business and communicate. #GartnerEA

· Mike Walker ‏(@mikejwalker) - Agree with Keith Meador -> At the end of the day, the last mile is all that matters. Make your efforts signature ready #EntArch #GartnerEA

· Olivier Laquinte (‏@OLaquinte) - K.Meador, #starbucks |The job of an #EA is not to get the right answer, it's to get the best one in a collaborative way #gartnerEA

· Fred (‏@froidianslip) - Keith Meador has captured the essence of EA. The fact he works for @Starbucks and is also from Seattle introduces no bias. #GartnerEA

· Mike Walker ‏(@mikejwalker) - Starbucks preso started w/ a coffee tasting & biz overview. Kudos to Keith on EA leadership and focus. #GartnerEA #EntArch

· Fred (‏@froidianslip) - Coffee is a connection at Starbucks. EA is about connections as well. Well played coffee giant. #GartnerEA

· Brian Oberman ‏(@brianoberman) - Starbucks is giving out free coffee at their presentation. #GartnerEA @Starbucks #score pic.twitter.com/LyfXnDY612

· Fred (‏@froidianslip) - On an innovation slide: Design serendipitous workspaces. <- Acceptance is a big cultural indicator. Trust me, I know. #GartnerEA

· Wes DeVault ‏(@wvipersg) - Use caution when trying to roll up risk Indicators to one indicator score. You may end up missing things you will need. #gartnerEA

· Michael McNamara ‏(@mfMcNamara) - WIIFT - What's in it for them? "... thats the bacon!" Cathleen Blanton #GartnerEA

· Fred (‏@froidianslip) - I've fallen in love with the six roles of technology innovation. Someone please tell my wife I'm sorry. #GartnerEA

· Brian Damiani ‏(@bwdamiani) - Enterprise Architecture should be done with others, not to them. From Cathleen Blanton's Roadmap presentation. #GartnerEA

· Pete G. ‏(@pgrivas) - "Roadmapping uses a graphical approach to visualize strategy". Key phrase: visualize strategy #GartnerEA

· Vijay Nuthulapaty ‏(@VNatGartnerEA) - Gartner's message around business value driven EA is consistent, not hearing the same from the crowd though. Thoughts? #GartnerEA

Categories: Architecture

Open Group Announces Risk Analysts Certification

Mike Walker's Blog - Thu, 06/06/2013 - 21:00

 Risk Analysts Certification

What I find in my Enterprise Architecture travels as both a practitioner and advisor is that risk management is an essential capability of Enterprise Architecture.  I don’t see the EA function as a replacement of the corporate risk management function but extending, enhancing and supporting it.

As the arbiters of the overall technology portfolio that influences or even makes decisions on technology, architectures and ultimately the how investments are made, it becomes increasingly obvious to support this aspect. Whether you are a high technology company or a bank there is some level of risk identification, mitigation and management that occurs.

Since I believe in the risk management capability within EA, I thought that this certification might be useful to you as well. The Open Group is announcing a new certification program for risk analysts at the EA July conference in Philadelphia. If you have downloaded any of the Open Group risk and IT security management publications previously, you might already have a notification of this.

In conjunction with the program launch, there are several risk analysis learning opportunities that you should be aware of:

Categories: Architecture

Paper: Memory Barriers: a Hardware View for Software Hackers

It's not often you get so enthusiastic a recommendation for a paper as Sergio Bossa gives Memory Barriers: a Hardware View for Software Hackers: If you only want to read one piece about CPUs architecture, cache coherency and memory barriers, make it this one.

It is a clear and well written article. It even has a quiz. What's it about?

So what possessed CPU designers to cause them to inflict memory barriers on poor unsuspecting SMP software designers?

In short, because reordering memory references allows much better performance, and so memory barriers are needed to force ordering in things like synchronization primitives whose correct operation depends on ordered memory references.

Getting a more detailed answer to this question requires a good understanding of how CPU caches work, and especially what is required to make caches really work well. The following sections:

  1. present the structure of a cache,
  2. describe how cache-coherency protocols ensure that CPUs agree on the value of each location in memory, and, finally,
  3. outline how store buffers and invalidate queues help caches and cache-coherency protocols achieve high performance.

We will see that memory barriers are a necessary evil that is required to enable good performance and scalability, an evil that stems from the fact that CPUs are orders of magnitude faster than are both the interconnects between them and the memory they are attempting to access.

Categories: Architecture

Speeding up Require.js optimization in Maven

Xebia Blog - Wed, 06/05/2013 - 21:28

In the last couple of web applications we’ve been working on, we used the Require.js library to modularize our Javascript code. This allows developers to separate large amounts of Javascript code into smaller modules which makes the code a lot easier to read and maintain.

Require.js also provides an optimizer script which compiles and compresses these modules into one (or a few) files for efficient delivery to the end-user. Sadly, when running the optimizer as part of a Maven build this process can take several minutes to complete. In this article I’ll explain how to speed things up a bit.

The Rhino in the room

We use Require.js’ optimizer as part of our application package- and release cycle which currently is powered by Maven. To run the optimizer with Maven we use the requirejs-maven-plugin. As the optimizer is written in Javascript and Maven runs Java, this plugin runs the optimizer script using the JRE’s built-in Rhino Javascript engine. This allows us to create both server- and client-side packages in one go. There’s only one problem: the Rhino Javascript engine is horribly slow.

I can’t really blame the engine itself though as it’s really old. It predates the so-called ‘Engine Race’ during which Javascript engines are being aggressively optimized to deliver speeds we are used to in modern browsers. But still it’s no fun having to wait several minutes for an optimizer running on ancient technology while you know there’s something way faster out there.

As Require.js’ own documentation already states: the preferred method to run the optimizer is by using node.js which is powered by the much faster V8 Javascript engine from Google. Up until recently however, there was no easy way to incorporate node.js into a Maven build. Sure it’s possible to assume node.js is installed on the build environment and execute some commands using maven-ant-plugin, but this will make your build a lot less portable.

Using node.js in Maven

So after getting annoyed by this problem long enough for it to become a pet peeve, I decided to finally fix this. For me the ultimate solution consists of two steps:

  • requirejs-maven-plugin should support running the optimizer using node.js
  • node.js binary should be supplied to the build environment without using an external installation process

To implement step 1 I worked together with requirejs-maven-plugin’s creator Matthew Cheely to add node.js support. In the latest version it’s possible to supply a path to a node.js binary after which the plugin executes the optimizer using node.js.

In order to supply the node.js binary to the build environment I created a new plugin called nodejs-maven-plugin. This plugin extracts a platform-specific nodejs binary to a directory of your choosing. Currently supported platforms are Windows, Mac and Linux, all 32 and 64 bit versions.

Configuring these two plugins should look something like this:


<plugin>
 <groupId>com.github.skwakman.nodejs-maven-plugin</groupId>
 <artifactId>nodejs-maven-plugin</artifactId>
 <version>1.0.2</version>
 <executions>
  <execution>
   <goals>
    <goal>extract</goal>
   </goals>
  </execution>
 </executions>
 <configuration>
  <targetDirectory>
   ${project.build.directory}/nodejs/
  </targetDirectory>
 </configuration>
</plugin>
<plugin>
 <groupId>com.github.mcheely</groupId>
 <artifactId>requirejs-maven-plugin</artifactId>
 <version>2.0.0</version>
 <executions>
  <execution>
   <goals>
    <goal>optimize</goal>
   </goals>
   <phase>prepare-package</phase>
   <configuration>
    <filterConfig>true</filterConfig>
    <nodeExecutable>${project.build.directory}/nodejs/node</nodeExecutable>
   </configuration>
  </execution>
 </executions>
</plugin>

This configuration instructs nodejs-maven-plugin to extract a node.js binary inside the target/nodejs directory of the Maven project. Requirejs-maven-plugin will then run Require.js’ optimizer script using the newly extracted node.js binary. This setup enables you to use node.js on on all your build environments having to install it manually.

Using this new configuration our Javascript optimization step went from 1.5 minutes to a mere 12 seconds. Not bad for a ~10 year jump into the future.

A Simple 6 Step Transition Guide for Moving Away from X to AWS

If you just want to visit Rome and not go full on Cloud Native like Netflix, then Soundslice's Adrian Holovaty in Why I left Heroku, and notes on my new AWS setup provides a simple guide for helping make your first trip a good one.

First, let's dispose of why Soundslice left Heroku. The essence is because of various issues "Heroku lost my trust." YMMV, but once a fact, what do you do?

After a consultation with Scott VanDenPlas, former director of dev ops for the Obama reelection tech team, they came up a simple transition guide that I think is quite good and generally useful (full details in the original post): 

Categories: Architecture