HansenHouse

  • Home
  • Services
    • Project Management
    • Web Development
    • Mobile App Development
    • UX/UI Design
    • WordPress
    • Cloud Services
    • Lead Generation
    • SMS Services
  • Systems
    • LiveLeadPortal Lead Management and Smart Agent system
  • Our Work
    • iAMRadioWorld.com
    • SEMI
    • Pure Storage
    • MindMeMobile
    • Music Choice
    • GoToPills
    • EmailTheBoss.org
  • Contact Us

10 Rules to better project management

PLANNING

1: Plan the work by utilizing a project definition document

There is a tendency for IT infrastructure projects to shortchange the planning process, with an emphasis on jumping right in and beginning the work. This is a mistake. The time spent properly planning the project will result in reduced cost and duration and increased quality over the life of the project. The project definition is the primary deliverable from the planning process and describes all aspects of the project at a high level. Once approved by the customer and relevant stakeholders, it becomes the basis for the work to be performed. For example, in planning an Exchange migration, the project definition should include the following:

  • Project overview: Why is the Exchange migration taking place? What are the business drivers? What are the business benefits?
  • Objectives: What will be accomplished by the migration? What do you hope to achieve?
  • Scope: What features of Exchange will be implemented? Which departments will be converted? What is specifically out of scope?
  • Assumptions and risks: What events are you taking for granted (assumptions), and what events are you concerned about? Will the right hardware and infrastructure be in place? Do you have enough storage and network capacity?
  • Approach: How will the migration project unfold and proceed?
  • Organization: Show the significant roles on the project. Identifying the project manager is easy, but who is the sponsor? It might be the CIO for a project like this. Who is on the project team? Are any of the stakeholders represented?
  • Signature page: Ask the sponsor and key stakeholders to approve this document, signifying that they agree on what is planned.
  • Initial effort, cost, and duration estimates: These should start as best-guess estimates and then be revised, if necessary, when the workplan is completed.

PROJECT WORKPLAN

2: Create a planning horizon

After the project definition has been prepared, the workplan can be created. The workplan provides the step-by-step instructions for constructing project deliverables and managing the project. You should use a prior workplan from a similar project as a model, if one exists. If not, build one the old-fashioned way by utilizing a work-breakdown structure and network diagram.

Create a detailed workplan, including assigning resources and estimating the work as far out as you feel comfortable. This is your planning horizon. Past the planning horizon, lay out the project at a higher level, reflecting the increased level of uncertainty. The planning horizon will move forward as the project progresses. High-level activities that were initially vague need to be defined in more detail as their timeframe gets closer.

PROJECT MANAGEMENT PROCEDURES

3: Define project management procedures up front

The project management procedures outline the resources that will be used to manage the project. This will include sections on how the team will manage issues, scope change, risk, quality, communication, and so on. It is important to be able to manage the project rigorously and proactively and to ensure that the project team and all stakeholders have a common understanding of how the project will be managed. If common procedures have already been established for your organization, utilize them on your project.

4: Manage the workplan and monitor the schedule and budget

Once the project has been planned sufficiently, execution of the work can begin. In theory, since you already have agreement on your project definition and since your workplan and project management procedures are in place, the only challenge is to execute your plans and processes correctly. Of course, no project ever proceeds entirely as it was estimated and planned. The challenge is having the rigor and discipline needed to apply your project management skills correctly and proactively.

  • Review the workplan on a regular basis to determine how you are progressing in terms of schedule and budget. If your project is small, this may need to be weekly. For larger projects, the frequency might be every two weeks.
  • Identify activities that have been completed during the previous time period and update the workplan to show they are finished. Determine whether there are any other activities that should be completed but have not been. After the workplan has been updated, determine whether the project will be completed within the original effort, cost, and duration. If not, determine the critical path and look for ways to accelerate these activities to get you back on track.
  • Monitor the budget. Look at the amount of money your project has actually consumed and determine whether your actual spending is more than originally estimated based on the work that has been completed. If so, be proactive. Either work with the team to determine how the remaining work will be completed to hit your original budget or else raise a risk that you may exceed your allocated budget.

5: Look for warning signs

Look for signs that the project may be in trouble. These could include the following:

  • A small variance in schedule or budget starts to get bigger, especially early in the project. There is a tendency to think you can make it up, but this is a warning. If the tendencies are not corrected quickly, the impact will be unrecoverable.
  • You discover that activities you think have already been completed are still being worked on. For example, users whom you think have been migrated to a new platform are still not.
  • You need to rely on unscheduled overtime to hit the deadlines, especially early in the project.
  • Team morale starts to decline.
  • Deliverable quality or service quality starts to deteriorate. For instance, users start to complain that their converted e-mail folders are not working correctly.
  • Quality-control steps, testing activities, and project management time starts to be cut back from the original schedule. A big project, such as an Exchange migration, can affect everyone in your organization. Don’t cut back on the activities that ensure the work is done correctly.

If these situations occur, raise visibility through risk management, and put together a plan to proactively ensure that the project stays on track. If you cannot successfully manage through the problems, raise an issue.

MANAGING SCOPE

6: Ensure that the sponsor approves scope-change requests

After the basics of managing the schedule, managing scope is the most important activity required to control a project. Many project failures are not caused by problems with estimating or team skill sets but by the project team working on major and minor deliverables that were not part of the original project definition or business requirements. Even if you have good scope-management procedures in place, there are still two major areas of scope-change management that must be understood to be successful: understanding who the customer is and scope creep.

In general, the project sponsor is the person funding the project. For infrastructure projects like an Exchange migration, the sponsor might be the CIO or CFO. Although there is usually just one sponsor, a big project can have many stakeholders, or people who are impacted by the project. Requests for scope changes will most often come from stakeholders — many of whom may be managers in their own right. One manager might want chat services for his or her area. Another might want an exception to the size limits you have placed on mailboxes. It doesn’t matter how important a change is to a stakeholder, they can’t make scope-change decisions, and they can’t give your team the approval to make the change. In proper scope-change management, the sponsor (or a designate) must give the approval, since they are the only ones who can add funding to cover the changes and know if the project impact is acceptable.

7: Guard against scope creep

Most project managers know to invoke scope-change management procedures if they are asked to add a major new function or a major new deliverable to their project. However, sometimes the project manager doesn’t recognize the small scope changes that get added over time. Scope creep is a term used to define a series of small scope changes that are made to the project without scope-change management procedures being used. With scope creep, a series of small changes — none of which appear to affect the project individually — can accumulate and have a significant overall impact on the project. Many projects fail because of scope creep, and the project manager needs to be diligent in guarding against it.

MANAGING RISK

8: Identify risks up front

When the planning work is occurring, the project team should identify all known risks. For each risk, they should also determine the probability that the risk event will occur and the potential impact on the project. Those events identified as high-risk should have specific plans put into place to mitigate them so they do not, in fact, occur. Medium risks should be evaluated to see whether they need to be proactively managed. (Low-level risks may be identified as assumptions. That is, there is potential risk involved, but you are “assuming” that the positive outcome is much more probable.) Some risks are inherent in a complex project that affects every person in the company. Other risks may include not having the right level of expertise, unfamiliarity with the technology, and problems integrating smoothly with existing products or equipment.

9: Continue to assess potential risks throughout the project

Once the project begins, periodically perform an updated risk assessment to determine whether other risks have surfaced that need to be managed.

10: Resolve issues as quickly as possible

Issues are big problems. For instance, in an Exchange migration, the Exchange servers you ordered aren’t ready and configured on time. Or perhaps the Windows forest isn’t set up correctly and needs to be redesigned. The project manager should manage open issues diligently to ensure that they are being resolved. If there is no urgency to resolve the issue or if the issue has been active for some time, it may not really be an issue. It may be a potential problem (risk), or it may be an action item that needs to be resolved at some later point. Real issues, by their nature, must be resolved with a sense of urgency.

Tagged With: agile, jira, kanban, project management, SDLC

Do less and do it better. Build a steak knife, not a Swiss Army knife.

In the first half of the 20th century, enjoying a good steak was a true labor of love. The common table knife required frequent sharpening and polishing to be able to slice through a tough cut of meat. But shortly after World War I came the introduction of stainless steel. This breakthrough metal meant knives didn’t require polishing.

After World War II, another manufacturing innovation led to the first specialized steak knives with serrated blades that rarely required sharpening. And in the 1950s, steak knife version 2.0 was born after a new heat treatment made stainless steel even more durable.

From the very beginning, the steak knife was focused on doing only one job particularly well: cutting steak. In many ways, it represents just the kind of focused, iterative development that Steve Blank and Eric Ries have popularized in the Lean Startup movement. The steak knife MVP had the breakthrough (focused) feature of serrated blades. After the hypothesis was proven true there was consumer demand for this single-purpose knife, iterations followed with a heat-treated version that never became dull, and later other forms to suit individual preferences.

Of course, these iterations took place over the course of decades – but even in the hyper-evolving mobile industry, there’s a lot that can be learned from the evolution of the steak knife. Apps must be focused like steak knives, and not function like Swiss Army knives.

Master one task at a time

Like many tools, there is a fine line between being functional and doing too much. The Swiss Army knife can potentially cut materials, open cans or bottles, slice through veggies or meat, and help you fix different things in a pinch. But it doesn’t do any of its intended jobs particularly well. It can be convenient, which is why I use it once a year when I go camping. But because it’s not perfectly suited for any task, for much of the year it sits unused in my camping bin.

If your app tries to do too much, like a Swiss Army knife, you risk diluting the app experience and alienating users. As mobile app capabilities increase and consumer expectations rise, the idea of navigating complicated menus to complete a task becomes less and less appealing. And with 80 to 90 percent of all downloaded apps being deleted after only being used once, developers have to get it right the first time.

Delivering a steak knife mobile app is all about focus and developing the right tool for its one and only task. Pick your app’s single purpose for existence, determine the two or three use cases your app is going to do better than any others, and then nail it perfectly. That’s what makes an app successful and keeps users engaged.

Simplicity is the backbone

Consider Google Maps. It isn’t purely successful because of its affiliation with Google. It became popular because it had one purpose to begin with – to give users accurate maps. And it did that better than any previously existing mapping app. It wasn’t until it acquired a strong user base that it incorporated real-time traffic and later, turn-by-turn navigation. Slowly but surely new features are added – but only after the primary purpose was perfected.

Another great example is MyRadar. This no-frills mobile app displays a colorful animated weather radar around your current location, allowing you to quickly see what weather is coming your way and giving you an intuitive sense of what’s about to happen. If you are heading out the door to run errands, you don’t need to know the 10-day forecast to decide if you should bring your umbrella with you, nor do you have time to sift through various ads before getting your expected forecast. All you need is for the app to show you exactly what type of weather is approaching your specific location, in real-time, for it to fulfill its purpose. Because MyRadar does this one job extremely well, it has achieved over 17 million downloads.

Less is more

In the mobile app industry, companies are beginning to adopt this development style. Industry giants are moving away from monolithic do-it-all apps – Swiss Army knives – and building more single-purpose, lightweight and streamlined apps – steak knives.

Further exemplifying that this trend is here to stay is the fact that Facebook spun out Messenger into its own app, making it the company’s eighth separate app in the app store. LinkedIn also currently has six apps and Foursquare now has two.

The message: Do less and do it better. Build a steak knife, not a Swiss Army knife.

Tagged With: app development, design, Mobile App, SDLC, UX

Are the Key factors of MBaaS actually it’s weakness?

There has been lots of discussion around mobile backend as a service (MBaaS) and the merits of open source vs. proprietary options in this space. Arguments on either side of the fence are largely unchanged from when the same debate raged over a decade ago, across anything from operating systems – Linux vs. Windows vs. (Open) Solaris – to productivity software – Microsoft Office vs. OpenOffice. Take the debate to the cloud, give it a mobile spin, update your FUD and you’re all caught up to what’s happening in the world of MBaaS.

Much of the debate is missing the point and obscuring the biggest challenge MBaaS has to overcome in order to succeed in the enterprise. What is true is that open source typically provides a level of flexibility you can’t get from proprietary options. The open source concept, by its very nature, allows you to replace functionality or components you don’t like with ones that you do (assuming you have the necessary skill set or access to it).

Flexibility is key for enterprises

Imagine an MBaaS that gives you a datastore, push notifications, analytics, realtime etc. all built into one package. That is super convenient (and one might argue precisely the reason why MBaaS came into existence in the first place) until you have a use case that goes beyond the built-in capabilities.

Perhaps you want to replace the default push notifications component with Urban Airship (a highly specialised, top-of-the-line push notification vendor). Maybe you decide you want the highly advanced analytics capabilities of Mixpanel to replace the ones that came with your MBaaS. As companies build up their mobile competence, they increasingly want and should be able to do that.

Is open source really the panacea?

For open source to thrive, you need an active community that champions and persists in maintaining a project. The reality is that more than 98% of all projects on GitHub don’t see any development beyond the first year they were written. So while there are many open source success stories, betting on open source as an enterprise isn’t a guaranteed road to success.

With that said, using open source software in the enterprise does bring with it many advantages, including: cost savings in development due to both lack of licensing fees and speed of product implementation; increased quality in source code and the mitigation of risk because there is no vendor lock-in. In the case of EU-based organisations, using open source software brings with it the advantages of being better able to work within the strict privacy requirements handed down by the government.

Despite the advantages of using open source, enterprise MBaaS providers have yet to fully embrace open source. MBaaS itself is hardly a brand new concept, yet there hasn’t been a massive rally to any particular open source option – perhaps because the mobile technology landscape is simply so fragmented. It’s also notoriously difficult for open source vendors to make any money. Regardless, while open source successes for MBaaS seem to be biding their time, the proprietary vendor landscape is rapidly maturing – with both winners and losers beginning to emerge.

MBaaS needs to become “pluggable”

The future success of MBaaS won’t be governed by a showdown between open source and proprietary offerings. MBaaS will have to embrace both concepts to deliver against enterprise requirements. A pluggable architecture that provides flexibility, i.e. by allowing you to “unplug” existing components and “plug in” others, is ultimately what will be needed. Today, no pure-play MBaaS vendor is quite there (yet) but some are beginning to upgrade their architecture and separate it into a core, with the ability to add pluggable modules.

The key here is that such pluggable modules may be open source, proprietary or a combination, leading to hybrid MBaaS solutions that combine the best of open source (flexibility) with the best of proprietary (on-going maintenance, active support, SLAs) offerings.

Today’s preferred choice for most companies is still for a vendor to stand behind, actively support and continuously evolve their enterprise MBaaS. Proprietary offerings offer longevity, stability and remain state of the art, even if the headlines begin to fade. However, by embracing the ability to add open source into the mix, MBaaS can lower concerns about vendor lock-in and become a viable option for situations where open source is directly or indirectly mandated, e.g. via government regulations.

So let’s stop thinking about MBaaS as being locked into a showdown between open source and vendor-backed, proprietary platforms. Instead, let’s look for the emergence of an MBaaS 2.0 architecture that moves beyond the misleading rhetoric and gives enterprises what they truly want.

Tagged With: Cloud, MBaaS, mobile, open source

Google attempts to unify the internet-connected Internet of Things

Project Brillo is Google’s attempt to unify the internet-connected “things” which make up the Internet of Things we keep hearing about, but until now we’ve not heard of many products which have supported the new standard. As of CES 2015, this narrative has changed, and now we have several companies putting their weight behind Project Brillo.

The actual standard which Brillo uses is called ‘Weave’, and it can be found in use today by the Google-owned IoT darling Nest for communicating with other devices under the ‘Works with Nest’ initiative.

Six other companies have announced Weave-supported products during CES 2015:

Harman – The speaker company was the “first systems integration partner” for Brillo, has promised to incorporate the new technology later in the year. Harman has also said that it will “simplify the design process for manufacturers by providing support throughout the entire development cycle.”

Marvell – Although the company has a name close to comic book giant Marvel, you won’t find Jarvis from Iron Man here (sorry, we’re all waiting.) Instead, Marvell has debuted two new microcontrollers which support Weave and can be added to any company’s product to make it Weave-enabled.

Asus – As the second manufacturer of Google’s OnHub routers, it’s little surprise the company is adding support for Weave in their own products.

Kwikset – The company is among the biggest manufacturers of the popular “smart lock” IoT category, and their product line will be evolved to include support for Google’s standard.

LG – One of the biggest appliance manufacturers, LG has also tried various smart technologies over the years in their products. The problem with past attempts is they didn’t play nicely with other appliances, but the addition of Weave should help to solve this issue.

Project Brillo is finally getting some traction it deserves, and with the popularity of the Nest thermostat, it’s little surprise developers and manufacturers are looking for ways to integrate with it when it comes to smart home devices.

For more information about Brillo, and to request an invite, head this way.

Tagged With: Asus, brillo, google, Harman, Internet of Things, Kwikset, LG, Marvell, Weave

The key business and process-related mistakes in mobile application development

Coinciding with recent growth in smartphone usage, mobile apps have skyrocketed in popularity over the last few years. In 2009 alone, there were roughly 2.5 billion fee-based mobile apps downloaded, and that number is projected to reach nearly 270 billion in 2017. But, the large quantity of downloads also suggests that apps often fail to keep the interest of their users. Data shows that over 90% of an application’s activity occurs within the first six months after the download.

The question becomes: how do you add staying power to an app? More precisely, when you’re developing a new app, what should you avoid? What are the common mistakes? According to app design and development agency Nomtek, most app slip-ups fall into one of two categories: process-related mistakes and business-related mistakes. Let us analyse these  in more detail.

Process-related mistakes

Designing an app before understanding the business fully is one example of a process-related mistake.Even if an app seems like a good idea, there is no guarantee that it will make money. The app may fail if it tries to solve a problem that does not exist or is not as significant as first imagined.

Another possibility is that the app attempts to solve someone else’s problem instead of the user’s problem. However, the success of an app truly depends on its ability to address the user’s problem directly. In other words, the app should delivery value within a short time after being installed. For most apps, this means within a couple of days.

When considering user acquisition, another frequent mistake is assuming that the app will go viral. Unfortunately, few apps actually attain this level of success.

Developing an app without a fully planned out design is another process-related mistake. For example, let’s say an entrepreneur hires an app developer and briefs him about the general plan and uses for the app. If the developer does not fully understand the business or user perspective well enough, the final product will be flawed and ultimately end up failing.

A third process-related app development mistake occurs when the designer does not set and meet measurable goals while implementing a project.

Business-related mistakes

Delaying the pursuit of app monetisation and ROI

Many application developers believe that once their user base grows, the easy part is generating revenue streams. It is common to believe that an app with numerous users will earn money through ads, the sale of market, or through a high stakes acquisition by a big company, such as Google or Facebook.

Unfortunately, the reality is that many apps get stuck before they meet their desired growth and market recognition metrics, which in turn leads to financial hiccups and the inability to pivot after gathering data from the app’s initial users.

For example, even though the organizational app, Springpad reached over 5 million users, it ran out of money and was forced to wind down in June 2014, six years after its initial launch.

“We built a heck of a product, but we failed to build a business,” Springpad CEO Jeff Janer, said. Springfield turned out to be too reliant on providing users with valuable data before earning on micro-transactions. Besides, Springpad proved less efficient than Pinterest in adapting to new rules brought about by the mobile apps sector.

Even brands like Twitter can suffer from lack of a solid monetisation plan. Despite their unquestionable market position, Twitter still struggles to determine the best mix for generating sustainable profits. Recent layoffs and the appointment of new CEO Jack Dorsey, prove that creating a successful app-centred business is quite a challenge, even for big players.

Giving up too quickly

Many app developers endure a roller-coaster experience, with many ups and downs along the way to gaining traction for a product. It can be difficult to determine the number of pivots necessary to reach the desired product-market fit. Many founders stop investing in their product and claim failure, only to later see a similar idea featured by Google Play and the AppStore as the app of the month.

Finding the appropriate balance between being persistent in pursuing your vision and knowing when to stop is critical to success. If recent trends and projections are any indication, the popularity of mobile apps will continue to increase. However, as the demand for apps drives the ever-increasing supply, and consumers are presented with more options that competing for their attention, it will be crucial for app providers to avoid some of the common mistakes discussed above, if they want to build apps with staying power.

Tagged With: app development, monetisation, process management, ROI, SDLC, UX

Android Studio 2.0

Ahead of the upcoming final release, Google has released the next major version of its Android Studio IDE for developers to put through its paces and help to eliminate any lingering bugs ahead of its full debut. Available in the Beta release channel, Google says this version of Android Studio 2.0 “is near stable release quality and should be relatively bug free.”

To be expected from a major release, there are some important enhancements in this release which should make the lives of Android developers much easier. New features include:

  • Instant Run – Enables a faster code edit & app deployment cycle.
  • Android Emulator – Brand new emulator that is faster than most real devices, and includes a brand new user interface.
  • Google App Indexing Integration & Testing – Adding App Indexing into your app helps you re-engage your users. In the first preview of Android Studio 2.0 you could add indexing code stubs into your code. With the beta release you can now test and validate your URL links in your app all within the IDE.

‘Instant Run’ is the most notable addition of the new IDE – providing a near-instantaneous method of running your latest code live, and without delay, on the Android emulator to see how it will run on a variety of test devices. Instead of waiting for the whole app to rebuild itself and restart after a code change, Android Studio 2.0 only adjusts to changes that were made.

The Instant Run feature has been available since an earlier build in the more unstable ‘Canary’ testing channel. A new feature in this build is ‘Cold Swap’ which allows your app to quickly restart where there are major structural changes to its code base such as those to the class hierarchy, static initializers and method signatures.

Existing ‘Instant Run’ features include:

  • Hot Swap – When only method implementations (including constructors) are changed, the changes are hot swapped. Your application keeps running and the new implementation is used the next time the method is called.
  • Warm Swap – When app resources are changed, the changes are warm swapped. This is similar to a hot swap, except that the current Activity is restarted. You will notice a slight flicker on the screen as the Activity restarts.

The emulator itself has a new UI, and supports multi-touch for apps that use gestures like pinch and zoom to navigate around. To use the multi-touch feature, you have to hold down the Alt key on your keyboard and right-click your mouse to center the point of reference, or click & drag the left mouse button to zoom.

Finally, this version of Android Studio 2.0 introduces better app indexing to help put your app in front of more users of Google search. App Indexing enabled the addition of indexing code stubs into an app’s code, but new support for direct URLs to specific content within apps will allow users to go directly to it from Google search results on their Android devices.

Tagged With: android, google

12 Factor App in Plain English

Popular platform-as-a-service provider Heroku (now a subsidiary of Salesforce…fancy that…) maintains a manifesto of sorts called The Twelve-Factor App. It outlines a methodology for developers to follow when building modern web-based applications. Despite being partly self-serving (apps built like this will translate more naturally to running on Heroku), there’s a lot of meaty best-practices worth examining.

Strive for These Best Practices

I think these concepts are important for readers of ClearlyTech, even if you aren’t the developer! For those who desire to know why this stuff is important, or who want to have an intelligent conversation with their development team about these issues, I present to you 12-Factor Apps in Plain English:

I. Codebase — One codebase tracked in revision control, many deploys

Put all your code in a source control system. Heck, just put it up on GitHub from the start.

All your application code lives in one repository. Once you get big, you may have a distributed system with multiple apps talking to each other (like a web application and a backend API), at which point you can treat them as separate apps with their own code repositories (still in source control, of course).

A codebase is run by developers on their local machines, and deployed to any number of other environments, like a set of testing machines, and the live production servers.

Importance: Non-negotiable Everyone does this, and developers will laugh at you if you aren’t.

II. Dependencies — Explicitly declare and isolate dependencies

All the environments your code runs in need to have some dependencies, like a database, or an image processing library, or a command-line tool. Never let your application assume those things will be in place on a given machine. Ensure it by baking those dependencies into your software system.

Most languages and frameworks provide a natural way to do this. You list all the versions of all the libraries you expect to have in place, and when the code is deployed, a command is run to download all the right versions and put them in place. No guesswork, everything as it needs to be.

This philosophy extends to your devs or devops team managing entire machine configurations using management tools like Chef and Puppet

Importance: High Without this, your team will have a constant slow time-suck of confusion and frustration, multiplied by their size and number of applications. Spare yourself.

III. Config — Store config in the environment

Configuration is anything that may vary between different environments. Code is all the stuff that doesn’t.

The code that talks to your database will always be the same. But the location of that database (which machine it’s running on) will be different for a local developer machine than it will for your production servers. Likewise, in your testing environment, you might want to log debugging information about each web request, but in production that would be overkill.

Usernames and passwords for various servers and services also count as configuration, and should never be stored in the code. This is especially true because your code is in source control (see I. above) which means that anyone with access to the source will know all your service passwords, which is a bad security hole as your team grows.

All configuration data should be stored in a separate place from the code, and read in by the code at runtime. Usually this means when you deploy code to an environment, you copy the correct configuration files into the codebase at that time.

Importance: Medium Lots of companies get away without this, but you’re sloppy if you do.

IV. Backing Services — Treat backing services as attached resources

Your code will talk to many services, like a database, a cache, an email service, a queueing system, etc. These should all be referenced by a simple endpoint (URL) and maybe a username and password. They might be running on the same machine, or they might be on a different host, in a different datacenter, or managed by a cloud SaaS company. The point is, your code shouldn’t know the difference.

This allows great flexibility, so someone from your team could replace a local instance of Redis with one served by Amazon through Elasticache, and your code wouldn’t have to change.

This is another case where defining your dependencies cleanly keeps your system flexible and each part is abstracted from the complexities of the others…a core tenet of good architecture.

Importance: High Given the current bindings to services, there’s little reason not to adhere to this best-practice.

V. Build, release, run — Strictly separate build and run stages

The process of turning the code into a bundle of scripts, assets and binaries that run the code is the build. The release sends that code to a server in a fresh package together with the nicely-separate config files for that environment (See III. above). Then the code is run so the application is available on those servers.

The idea here is that the build stage does a lot of heavy lifting, and developers manage it. The run stage should be simple and bullet-proof so that your team can sleep soundly through the night, knowing that the application is running well, and that if a machine gets restarted (say, a power failure happens) that the app will start up again on launch without the need for human intervention.

Importance: Conceptual From a practical perspective, the tools and framework you use will define best-practices for building, deploying, and running your app. Some do a better job than others of enforcing strict separation, but you should be okay if you follow your framework’s suggested mechanisms.

VI. Processes — Execute the app as one or more stateless processes

It’s likely you will have your application running on many servers, because that makes it more fault tolerant, and because you can support more traffic. As a rule, you want each of those instances of running code to be stateless. In other words, the state of your system is completely defined by your databases and shared storage, and not by each individual running application instance.

Let’s say you have a signup workflow, where a user has to enter 3 screens of information to create their profile. One (wrong) model would be to store each intermediate state in the running code, and direct the user back to the same server until the signup process is complete. The right approach is to store intermediate data in a database or persistent key-value store, so even if the web server goes down in the middle of the user’s signup, another web server can handle the traffic, and the system is none-the-wiser.

Importance: High Not only is a stateless app more robust, but it’s easier to manage, generally incurs fewer bugs, and scales better.

VII. Port binding — Export services via port binding

We’re getting a bit technical now, but stick with me. This factor is an extension of factor IV. above. The idea is that, just like all the backing services you are consuming,your application also interfaces to the world using a simple URL.

Usually you get this for free because your application is already presenting itself through a web-server. But let’s say you have an API that’s used by both your customers in the outside world (untrusted) and your internal website (trusted). You might create a separate URL to your API that your website can use which doesn’t go through the same security (firewall and authentication), so it’s a bit faster for you than for untrusted clients.

Importance: Medium Most runtime frameworks will give you this for free. If not, don’t sweat it. It’s a clean way to work, but it’s generally not hard to change later.

VIII. Concurrency — Scale out via the process model

When running your code, the idea is that lots of little processes are handling specific needs. So you might have dozens of handlers at the ready to process web requests, and another dozen to handle API calls for your enterprise users. And still another half-dozen processing background welcome-emails going to new users, or sending tweets for your users sharing things on your social media service.

By keeping all these small parts working independently, and running them as separate processes (in a low-level technical sense), your application will scale better. In particular, you’ll be able to do more stuff concurrently, by smoothly adding additional servers, or additional CPU/RAM and taking full advantage of it through the use of more of these small, independent processes.

Importance: Low Don’t worry about this factor until you get pretty deep into scaling considerations. Trust your chief architect or CTO to raise the red flag if this is going to become an issue for you.

IX. Disposability — Maximize robustness with fast startup and graceful shutdown

When you deploy new code, you want that new version to launch right away and start to handle traffic. If an application has to do 20 seconds of work (say, loading giant mapping files into RAM) before it’s ready to handle real traffic, you’ve made it harder to rapidly release code, and you’ve introduced more churn on the system to stop/start independent processes.

With the proliferation of so many 3rd party libraries in today’s software systems, sub–1-second startup times are less and less common. But beyond loading code, your application should have everything it needs waiting in high-speed databases or caches, so it can start up snappily and be ready to serve requests.

Further, your application should be robust against crashing. Meaning, if it does crash, it should always be able to start back up cleanly. You should never do any mandatory “cleanup” tasks when the app shuts down that might cause problems if they failed to run in a crash scenario.

Importance: Medium Depending on how often you are releasing new code (hopefully many times per day, if you can), and how much you have to scale your app traffic up and down on demand, you probably won’t have to worry about your startup/shutdown speed, but be sure to understand the implications for your app.

X. Dev/prod parity — Keep development, staging, and production as similar as possible

It has become in vogue in recent years to have a much more rapid cycle between developing a change to your app and deploying that change into production. For many companies, this happens in a matter of hours. In order to facilitate that shorter cycle, and the risk that something breaks when entering production, it’s desirable to keep a developer’s local environment as similar as possible to production.

This means using the same backing services, the same configuration management techniques, the same versions of software libraries, and so on.

This is often accomplished by letting developers use a tool like Vagrant to manage their own personal virtual server that’s configured just like production servers.

Importance: Medium Developers will feel like taking shortcuts if their local environment is working “well enough”. Talk them out of it and take a hard-line stance instead, it’ll pay off long-term.

XI. Logs — Treat logs as event streams

Log files keep track of a variety of things, from the mundane (your app has started successfully) to the critical (users are receiving thousands of errors).

In an ideal situation, those logs are viewed by developers in their local consoles, and in production they are automatically captured as a stream of events and pushed into a real-time consolidated system for long-term archival and data-mining like Hadoop.

At the very least, you should be capturing errors and sending them to an error reporting service like New Relic or AirBrake. You can take a more general approach and send your logs to a service like PaperTrail or Splunk Storm.

Importance: Low If you are relying on logs as a primary forensic tool, you are probably already missing out on better solutions. Be sure to consolidate your logs for convenience, but beyond that, don’t worry about being a purist here.

XII. Admin processes — Run admin/management tasks as one-off processes

You’ll want to do lots of one-off administrative tasks once you have a live app. For example, doing data cleanup on bad data you discover; running analytics for a presentation you are putting together, or turning on and off features for A/B testing.

Usually a developer will run these tasks, and when they do, they should be doing it from a machine in the production environment that’s running the latest version of the production code. In other words, run one-off admin tasks from an identical environment as production. Don’t run updates directly against a database, don’t run them from a local terminal window.

Importance: High Having console access to a production system is a critical administrative and debugging tool, and every major language/framework provides it. No excuses for sloppiness here.

Summary

Some of these items may seem esoteric, as they are rooted in some fundamental systems design debates. But at the heart of a happily running system is an architecture that is robust, reliable, and surprises us as little as possible. These 12 factors are being adopted by most major software platforms and frameworks, and to cut corners against their grain is a bad idea. Discuss these issues with your development team, see if there are some quick wins to improve the quality of your application design.

Tagged With: 12 factor, best practices, Cloud, development, Heroku, Salesforce, SDLC

Search

Contact Us

Hansen House
P: 302.220.1693
EMAIL US HERE

Get Social

  • Facebook
  • LinkedIn
  • Twitter

Our Partners





Tags

.NET 12 factor agile android app development aquia cloud auto attendant Azure best practices brillo Cloud Cordova custom drupal module development drupal executive leadership.Azure force.com google google map api Heroku html Hybrid Mobile Internet of Things jira jQuery kanban knockout.js Kwikset LAMP Mobile App monetisation mySQL php process management product management project management responsive website REST API ROI Salesforce SDLC SMS UX Weave website

Copyright © 2025 · HANSENHOUSE LLC