Skip to main content

Mobomo webinars-now on demand! | learn more.

Welcome to part 2 of our exploration of the Nutch API! In our last post, we created infrastructure for injecting custom configurations into Nutch via nutchserver. In this post, we will be creating the script that controls crawling those configurations. If you haven’t done so yet, make sure you start the nutchserver:

$ nutch nutchserver

Dynamic Crawling
We’re going to break this us into two files again, one for cron to run and the other that holds a class that does the actual interaction with nutchserver. The class file will be Nutch.py and the executor file will be Crawler.py. We’ll start by setting up the structure of our class in Nutch.py:

import time
import requests
from random import randint

class Nutch(object):
    def __init__(self, configId, batchId=None):
        pass
    def runCrawlJob(self, jobType):
        pass

 

We’ll need the requests module again ($ pip install requests on the command line) to post and get from nutchserver. We’ll use time and randint to generate a batch ID later. The function crawl is what we call to kick off crawling.

Next, we’ll get Crawler.py setup. We’re going to use argparse again to give Crawler.py some options. The file should start like this:

# Import contrib
import requests
import argparse
import random

# Import custom
import nutch

parser = argparse.ArgumentParser(description="Runs nutch crawls.")
parser.add_argument("--configId", help="Define a config ID if you just want to run one specific crawl.")
parser.add_argument("--batchId", help="Define a batch ID if you want to keep track of a particular crawl. Only works in conjunction with --configId, since batches are configuration specific.")
args = parser.parse_args()

We’re offering two optional arguments for this script. We can set --configId to run a specific configuration and setting --batchId allows us to track as specific crawl for testing or otherwise. Note: with our setup, you must set --configId if you set --batchId.

We’ll need two more things: a function to make calling the crawler easy and logic for calling the function. We’ll tackle the logic first:

if args.configId:
    if args.batchId:
        nutch = nutch.Nutch(args.configId, args.batchId)
        crawler(args.job, nutch.getNodeID())
    else:
        nutch = nutch.Nutch(args.configId)
        crawler(args.job, nutch.getNodeID())
else:
    configIds = requests.get("http://localhost:8081/config")
    cids = configIds.json()
    random.shuffle(cids)
    for configId in cids:
        if configId != "default":
            nutch = nutch.Nutch(configId)
            crawler(nutch)

If a configId is given, we capture it and initialize our Nutch class (from Nutch.py) with that id. If a batchId is also specified, we’ll initialize the class with both. In both cases, we run our crawler function (shown below).

If neither configId nor batchId is specified, we will crawl all of the injected configurations. First, we get all of the config ID’s that we have injected earlier (see Part 1!). Then, we randomize them. This step is optional but we found that we tend to get more diverse results when initially running crawls if Nutch is not running them in a static order. Last, for each config ID, we run our crawl function:

def crawler(nutch):
    inject = nutch.runCrawlJob("INJECT")
    generate = nutch.runCrawlJob("GENERATE")
    fetch = nutch.runCrawlJob("FETCH")
    parse = nutch.runCrawlJob("PARSE")
    updatedb = nutch.runCrawlJob("UPDATEDB")
    index = nutch.runCrawlJob("INDEX")

You might wonder why we’ve split up the crawl process here. This is because later, if we wish, we can use the response from the Nutch job to keep track of metadata about crawl jobs. We will also be splitting up the crawl process in Nutch.py.

That takes care of Crawler.py. Let’s now fill out our class that actually controls Nutch, Nutch.py. We’ll start by filling out our __init__ constructor:

def __init__(self, configId, batchId=None):
    # Take in arguments
    self.configId = configId
    if batchId:
        self.batchId = batchId
    else:
        randomInt = randint(0, 9999)
        self.currentTime = time.time()
        self.batchId = str(self.currentTime) + "-" + str(randomInt)

    # Job metadata
    config = self._getCrawlConfiguration()
    self.crawlId = "Nutch-Crawl-" + self.configId
    self.seedFile = config["meta.config.seedFile"]

We first take in the arguments and create a batch ID if there is not one. The batch ID is essential as it links the various steps of the process together. Urls generated under one batch ID must be fetched under the same ID for they will get lost, for example. The syntax is simple, just [Current Unixtime]-[Random 4-digit integer].

We next get some of the important parts of the current configuration that we are crawling and set them for future use. We’ll query the nutchserver for the current config and extract the seed file name. We also generate a crawlId for the various jobs we’ll run.

Next, we’ll need a series of functions for interacting with nutchserver. Specifically, we’ll need one to get the crawl configurations, one to create jobs, and one to check the status of a job. The basics of how to interact with Job API can be found at https://wiki.apache.org/nutch/NutchRESTAPI, though be aware that this page is not complete in it’s documentation. Since we referenced it above, we’ll start with getting crawl configurations:

def _getCrawlConfiguration(self):
    r = requests.get('http://localhost:8081/config/' + self.configId)
    return r.json()

 

This is pretty simple: we make a request to the server at /config/[configID] and it returns all of the config options. Next, we’ll get the job status:

def _getJobStatus(self, jobId):
    job = requests.get('http://localhost:8081/job/' + jobId)
    return job.json()

This one is also simple: we make a request to the server at /job/[jobId] and it returns all the info on the job. We’ll need this later to poll the server for the status of a job. We’ll pass it the job ID we get from our create request, shown below:

def _createJob(self, jobType, args):
    job = {'crawlId': self.crawlId, 'type': jobType, 'confId': self.configId, 'args': args}
    r = requests.post('http://localhost:8081/job/create', json=job)
    return r

Same deal as above, the main thing we are doing is making a request to /job/create, passing it some JSON as the body. The requests module has a nice built-in feature that allows you to pass a python dictionary to a json= parameter and it will convert it to a JSON string for you and pass it to the body of the request.

The dict we are passing has a standard set of parameters for all jobs. We need the crawlId set above; the jobType, which is the crawl step we will pass into this function when we call it; the configId, which is the UUID we made earlier; last, any job-specific arguments--we’ll pass these in when we call the function.

The last thing we need is the logic for setting up, keeping track of, and resolving job creation:

def runCrawlJob(self, jobType): 
    args = ""
    if jobType == 'INJECT':
        args = {'seedDir': self.seedFile}
    elif jobType == "GENERATE":
        args = {"normalize": True,
                "filter": True,
                "crawlId": self.crawlId,
                "batch": self.batchId
                }
    elif jobType == "FETCH" or jobType == "PARSE" or jobType == "UPDATEDB" or jobType == "INDEX":
        args = {"crawlId": self.crawlId,
                "batch": self.batchId
                }
    r = self._createJob(jobType, args)
    time.sleep(1)
    job = self._getJobStatus(r.text)
    if job["state"] == "FAILED":
        return job["msg"]
    else:
        while job["state"] == "RUNNING":
            time.sleep(5)
            job = self._getJobStatus(r.text)
            if job["state"] == "FAILED":
                return job["msg"]
    return r.text

First, we’ll create the arguments we’ll pass to job creation. All of the job types except Inject require a crawlId and batchId. Inject is special in that the only argument it needs is the path to the seed file. Generate has two special options that allow you to enable or disable use of the normalize and regex url filters. We’re setting them both on by default.

After we build args, we’ll fire off the create job. Before we begin checking the status of the job, we’ll sleep the script to give the asynchronous call a second to come back. Then we make a while loop to continuously check the job state. When it finishes without failure, we end by returning the ID.

And we’re finished! There are a few more things of note that I want to mention here. An important aspect of the way Nutch was designed is that it is impossible to know how long a given crawl will take. On the one hand, this means that your scripts could be running for several hours at time. However, this also means that it could be done in a few minutes. I mention this because when you first start crawling and also after you have crawled for a long time, you might start seeing Nutch not crawl very many links. In the first case, this is because, as I mentioned earlier, Nutch only crawls the links in the seed file at first, and if there are not many hyperlinks on those first pages, it might take two or three crawl cycles before you start seeing a lot of links being fetched. In the latter case, after Nutch finishes crawling all the pages that match your configuration, it will only recrawl those pages after a set interval. You can modify how this process works, but it will mean that after awhile you will see crawls that only fetch a handful of links.

Another helpful note is that the Nutch log at /path/to/nutch/runtime/local/logs/hadoop.log is great for following the process of crawling. You can set the output depth of most parts of the Nutch process at /path/to/nutch/conf/log4j.properties (you will have to rebuild Nutch if you change this by running ant runtime at the Nutch root).

Categories
Tags
Author

saeport

Mobomo, LLC is honored to be awarded the SeaPort Next Generation (SeaPort NxG) contract with the Department of the Navy. The Department of the Navy was looking for a contractor that could provide services in two key areas that incorporated 23 sub-categories. Mobomo bid under both of the two key categories presented which were Engineering Services and Program Management Services.

There were two main factors that led to our success with this contract. First, we have a team of award-winning experts that have expansive experience inboth service categories. Secondly, we have previously developed a mobile app for the Navy Office of Information as well as developed a new web portalfor the Naval Information Warfare Systems Command. Between the overall services we have offered and our strong performance on these two past contracts, we were able to secure the Seaport NxG contract.

This contract is a huge opportunity for our company as the task orders that will be issued could span across the following departments: the Naval Sea Systems Command, Naval Information Warfare Systems Command, Naval Supply Systems Command, Military Sealift Command, Naval Facilities Systems Command, Office of Naval Research, Naval Air Systems Command, Strategic Systems Programs, or the United States Marine Corps.

About Mobomo:

Mobomo, LLC is a premier mobile, web, and cloud application development company that has extensive experience in creating award-winning, agile, human-centered design, and providing DevSecOps capabilities.Mobomo has helped revolutionize the digital federal landscape through our innovative designs of high performing websites and applications that are engineered to fit the needs of government agencies.

About Department of the Navy:

The U.S. Department of the Navy (DON) is one of the three military departments within the Department of Defense. Their overall mission is to protect America at sea. Under the Department of the Navy, there are many sub-departments that all support and contribute to this overarching goal. To defend American interests, the U.S. Navy must be prepared to execute at all times, as directed by Congress and the President.

Categories
Author

Washington-Business-Journal

The Washington Business Journal has released a ranked list of the most diverse small companies in the greater D.C. area. To evaluate these companies, the Journal reviewed the percentage of people of color at the company as well as taking a look at the amount of POC in executive leadership positions. Mobomo, LLC was proud to be seated as #48 most diverse small business in the DMV.

“We are honored to be ranked top by the WBJ Corporate Diversity Index. Our focus on diversity from day one allowed us to achieve Inc. 5000 list of the fastest growing private companies in America for eight years in a row! We are extremely proud of our elite team that is delivering mission critical solutions to top federal agencies like Voice of America, NOAA, and NASA” – Barg Upender, Founder

Mobomo was founded by a diverse group of individuals who found inspiration in the different experiences they each culminated. As such, the company embraces differences and equality at every opportunity. When recruiting talent, we are an equal opportunity employer and believe your experience and skill sets speak volumes. By championing diversity, we have been able to cater our processes and projects to highlight best practices from individuals who have varying backgrounds and experiences.

As a small company, Mobomo has cultivated this culture of inclusion and empowerment by having open doors of communication. Our executive team prides themselves on engaging with all levels of our organization and championing a flat-hierarchical organization. This direct line of communication has helped to develop and standardize some of our best practices that we promote across all teams.

The full list of companies included can be found here: https://www.bizjournals.com/washington/subscriber-only/2021/03/19/corporate-diversity-index-small.html

 

Join Our Team:

If you’re interested in working for Mobomo and support our diversity and inclusion initiatives, feel free to check out employment opportunities here or to send us an email to hiring@mobomo.com with your resume. We are always looking for talented and passionate individuals to join our team of experts.

 

About Washington Business Journal:

The Washington Business Journal is the leading source for business news and data for the Washington, D.C., region. The Business Journal publishes all the information and insights you need to succeed in business — through the weekly edition, website, email products and our events and awards programs. Owned by parent company, American City Business Journals – the Business Journals brands are recognized on the local level in 43 markets and have 400+ journalists entrenched in their local markets and industries.

Categories
Author

Understanding-the-Scaled-Agile-Framework

Mobomo has been ranked No. 233 on Inc. magazine’s second annual Inc. 5000 Regionals: D.C. Metro list for the fastest-growing private companies. This regional list represents the most successful independent small businesses in the D.C. area and Mobomo is proud to be listed among the other dynamic leaders.

The majority of our successes stem from our incredibly hardworking team, our dedication to developing a first-class project management approach for our clients, and our inventive human-centered design solutions that have led to awards such as Vega Digital Awards, the Webby Awards, and Muse Creative Awards.

“I am extremely proud of this team,” said Mobomo CEO, Brian Lacey, “The team’s award-winning process and prioritization of customer service and product quality is the proven driver of this growth. Congrats to all of Team Mobomo.”

The complete results of the Inc. 5000 Regionals: D.C. Metro can be found at https://www.inc.com/inc5000/regionals/washington-dc

More About Inc. and the Inc. 5000 Regionals

Methodology

The 2021 Inc. 5000 Regionals are ranked according to percentage revenue growth when comparing 2017 and 2019. To qualify, companies must have been founded and generating revenue by March 31, 2017. They had to be U.S.-based, privately held, for profit, and independent—not subsidiaries or divisions of other companies—as of December 31, 2019. (Since then, a number of companies on the list have gone public or been acquired.) The minimum revenue required for 2017 is $100,000; the minimum for 2019 is $1 million. As always, Inc. reserves the right to decline applicants for subjective reasons. 

About Inc. Media

The world’s most trusted business-media brand, Inc. offers entrepreneurs the knowledge, tools, connections, and community to build great companies. Its award-winning multiplatform content reaches more than 50 million people each month across a variety of channels including websites, newsletters, social media, podcasts, and print. Its prestigious Inc. 5000 list, produced every year since 1982, analyzes company data to recognize the fastest-growing privately held businesses in the United States. The global recognition that comes with inclusion in the 5000 gives the founders of the best businesses an opportunity to engage with an exclusive community of their peers, and the credibility that helps them drive sales and recruit talent. The associated Inc. 5000 Conference is part of a highly acclaimed portfolio of bespoke events produced by Inc. For more information, visit www.inc.com

Categories
Author

Understanding-the-Scaled-Agile-Framework

Whether you're a business looking to build a world-class website or a government entity looking for a custom CMS solution that ticks all-the-boxes, finding the right CMS provider is the single most important step in your website journey. But how do you find the right partner? For government projects, website needs and budgets may need to be carefully defined in a solicitation guide for contractors. Businesses, on the other hand, often forge website proposals to send to multiple agencies.

So, what should you include in these proposals and solicitation guides? After all, choosing the right partner can make-or-break your entire website, and you need a holistic, best-fit partner to execute your website project with fervor, ambition, and purpose. Here's the scary part: over  30% of IT projects fail to meet initial guidelines, over 45% fail to meet the budget, and a terrifying 14% outright fail. A carefully crafted website proposal and solicitation prevents website failures and gives your CMS creator a concrete guideline for your website execution.

A Checklist for Your CMS Creator

Before you start writing your website guidelines, you need to know exactly what to include. Writing any type of proposal or solicitation guideline is a monotonous, labor-intensive process. It involves plenty of workshopping, stakeholder touchpoints, and language crafting. So, despite your guideline being a make-or-break component of your website design, many public and private bodies rush through their guideline and hope to discuss downstream details with their provider in-person. That's a bad idea. Your guideline sets the tone for your entire project. You want a thorough, well-defined project scope, and you want to include as many details as possible without overwhelming potential providers.

Let's look at a checklist of every core component your CMS project guideline should have.

What is Your Budget?

Let's start with the big one: budget. While capital isn't necessarily synonymous with beautifully-designed and hyper-functional CMS websites, your budget may restrict your features. You should be upfront and honest with your budget requirements. Every website has one goal: delivering wonderfully purposeful experiences. Your budget will help determine how those experiences get delivered.

An expert CMS designer will be able to help you work within your budget. You may need to shed some "wants" and focus on less-disruptive designs if you have a low budget, but that doesn't mean you can't create an impactful website. If you're honest and upfront about your overall budget, you'll find the most appropriate CMS provider for the job.

What Are Your Aesthetic and Functional Requirements

There are two primary types of website needs: functional and aesthetic. Your functional needs involve features and your overall CMS architecture. These needs contribute to the bulk of your website. You may need custom modules, API integrations, and modular components that deliver meaningful experiences to your customers. Sit down with your stakeholders and discuss what your website needs to do in a functional capacity. Again, your CMS provider will help you immensely with this step. They have the technical experience to navigate the increasingly-complex website component ecosystem, and they'll help you drill down and articulate the types of features you want.

Aesthetic requirements are very personal. Often, your aesthetic needs are based less on your target audience and more on your brand. Who are you? What colors, designs, and patterns represent you? And how can you leverage your brand in a very physical and aesthetic way? 86% of people say that "authenticity" is a key consideration when choosing who to do business with, and using a simple brand color can boost recognition by 80%.

Who is Your Consumer?

Touch base with your stakeholders and consider your end-user. Who is going to be using your websites? And how are they going to be using it? As an example, a public agency looking to create a public-facing news website may want to appeal to a broad, less-defined audience, while businesses often lean into buyers' personas and target audiences. Generally, the more defined you get, the better. Websites that leverage personas are 5 times easier to use for those targeted users.

While we heavily recommend discovering your end-user upfront, this is an area that an expert CMS creator can help you with. At Mobomo, we leverage over 16,000 modules to architect one-of-a-kind Drupal-based CMS solutions. So, we have a wealth of experience in building niche, user-driven solutions for a variety of public and private bodies. We can lean on that experience to move you towards an ideal user. But it's best to come at least semi-prepared.

Who is Your Internal User and What Are Their Needs?

Along with customers, you need to consider your internal users. For internal CMS websites, this is your entire audience. Otherwise, consider who will be using your website internally. Unfortunately, many people ignore internal requirements. Customer-facing websites often get drenched in feature-rich, hyper-visual design with tons of bells-and-whistles while internal users are left to pick apart the scraps. Clunky, outdated modules and generic UIs plague internal pages. But they shouldn't. Creating an internal website that's easy-to-use, engaging, and mobile-accessible can drive productivity and reduce workplace frictions.

During your proposal or pitch, discuss your internal user needs. Any industry-leading website designer will be able to deliver spectacular solutions that cater to internal users or amazing customer-facing websites with easy-to-use back-end architecture for internal developers.

Understanding Needs vs. Wants

Separate your needs from your wants. Not only does this help prioritize your features, but it gives you financial flexibility. For example, a CMS provider may see your proposal and be capable of delivering 95% of your proposal for the budget specified. Having a clear and comprehensive need vs. want structure helps them identify which areas they can exclude. Additionally, categorizing needs prevent you from being approached by providers and creators that may try to haggle with you and exclude must-have features.

Ideally, you want every single feature specified in your proposal, but that may not be possible within your budget. Give CMS providers flexibility and wiggle-room to approach you with a best-fit solution.

Mobomo Can Help You Build Your Dream CMS Website

At Mobomo, we fearlessly pursue rich experiences that go above-and-beyond expectations. Our agile-driven development process and hyper-customizable websites are intricately designed, purposefully experienced, and entirely brand-driven. Are you looking for a world-class government website or business solution?
Contact us
. We're ready to help you create websites built on fundamentally disruptive and security-driven architecture.

Categories
Tags
Author

Understanding-the-Scaled-Agile-Framework

If there's one buzzword that's dominated the last five years, it's "agile." It's one of those all-too-vague terms that's overused, undervalued, and certainly misused by a large chunk of the dev teams trying to jam it into their software development lifecycle or web development flow. It's not that the tech community doesn't understand the core message behind agile or even that agile is difficult to achieve (given the budget and training).

The problem with agile is that it's incredibly variable and difficult to scale. Iterative development isn't new. And, despite the "word on the street," developers weren't stuck in a Waterfall-loop for the past fifty years. Many agile components have been floating around the dev space since the '80s. The Agile Manifesto — which popularized the term and (in some cases) many of the practices — may have been the Big Bang of iterative development, but it wasn't the spark. These loosely-defined components (e.g., iterative, short cycles, collaborative, etc.) that sit at the heart of Agile have been manifesting in the air for decades.

So, when we look at the larger agile space, almost every organization has its own "version" of agile. In some ways, that's great. The power of agile is its innate flexibility. Unfortunately, this variability makes it difficult to scale agile, since many are trying to scale a one-of-a-kind framework. There's no roadmap... or is there?

Recently, Mobomo was certified in the Scaled Agile Framework (i.e., SAFe). This flexible, scalable, and enterprise-centric agile framework helps organizations build robust, end-to-end agile practices that go beyond product and delivery methods. SAFe penetrates core business models and rethinks how organizations can approach agile in a structured, meaningful, and impactful way.

What is SAFe?

Scaled Agile Framework (SAFe) is an agile-based framework that gives organizations the strategies and guidance they need to execute lean-agile practices at scale. When we look at the average enterprise — which is jam-packed with ongoing projects — finding ways to deliver continuous value that meets business goals and visions is tricky enough. Trying to deliver that value at scale in an environment that's constantly changing is downright challenging. SAFe goes well-beyond building agile teams; it helps define how enterprises can deliver, scale, and manage these projects — as well as how they can breed innovative and iterative practices into their culture.

The SAFe Framework (as of version 5.0) defines 7 "buckets" that enterprises can create to breed agile into their organizations. We'll split these into three more buckets (which will make sense at the end).

Bucket #1: Teams & Delivery

  1. Team & Technical Agility
  1. Agile Product Delivery
  1. Enterprise Solution Delivery

Bucket #2: Product Choice & Culture

  1. Lean Portfolio Management
  1. Organizational Agility
  1. Continuous Learning Culture

Bucket #3: Leadership

  1. Lean-Agile Leadership

 

SAFe Best Practices

Let's quickly cover a few SAFe best-practices.

 

Mobomo & SAFe

At Mobomo, we're big advocates of agile. We've used agile practices to create projects for NASA, USGS, the US Navy, and thousands of private companies across the globe. As we grew, we saw a need for agility at scale. Recently, we became fully SAFe certified. This is important for us, as a company, but it's also important for our customers. You expect value-driven, customer-centric solutions that adapt and evolve over time. We're going to continue to deliver that value to you.

Want to learn more about Mobomo's services? Interested in our agile practices? Contact us. Let's talk about it.

Categories
Author

pros-and-cons-of-an-agile-engagement-model

Seventy-one percent of organizations use Agile to drive their app development process. By now, most of you have already heard agile-fanatics screaming from the rooftops and corporate execs using the word "agile" as if it's the most modish term on the planet. But what is agile, really? It can be difficult to wade your way through the dense forest of hype artists and the trendy alphabet soup of "agile-like" acronyms to discover the real, tangible meaning of agile.

So, let's cut through the red tape, ignore the trendy buzzwords, and uncover the truths of agile. No. It isn't a catch-all development solution, and it certainly isn't perfect for every development project. In fact, agile has some serious downfalls that seem to be excluded from those 25-page long "Agile Manifestos" that developers and companies are putting out at the speed of light.

To be clear, we're agile "fanatics." We're SAFe certified, and our entire motto (i.e., PUSH) is driven by agile-thinking, and we've used agile methodologies to execute massive-scale projects like NASA.gov 2.0 and The United Service Organizations' app. However, we're going to take a step back. Let's put away the biased hats, ignore the hype, and dig into the nitty-gritty of today's most popular engagement model. Here's everything you need to know about the agile engagement model.
 

What is an Agile Engagement Model?

Engagement models are frameworks that define the relationship between an outsourced development team and your company. In other words, engagement models are "how" your app is getting executed, and your project is being delivered by your development team. There are a wide variety of engagement models, and each of them has specific pros and cons.

Agile engagement involves rapid-fire iterations, immense flexibility, and plenty of collaboration. The overarching goal of agile is (as the name suggests) marketplace agility. So, when the environment outside of your development team changes, agile gives them the tools to quickly react to those changes. Typically, agile development teams have daily meetings, use tools like Kanban boards to execute bite-sized chunks of development, and have the flexibility to rapidly change requirements and needs based on internal and external factors.

In today's fast-paced, digitally-drenched software development lifecycle, agile brings a ton of value to the table — especially on long-term projects that have to cross that oh-so-scary "pit of scaling." According to PMI, 70% of organizations use agile development today, so it's certainly a popular and results-bearing approach to software development.
 

When Does Agile Make Sense?

Since agile requires strong cultural structures, unparalleled collaboration, and iterative-driven strategies, it's best for outsourced projects that leverage in-house teams. In internally-driven development cycles with in-house teams, agile is often used to execute from start-to-finish. However, when you're leveraging outsourced developers, start-to-finish projects may work better with more traditional engagement models like firm-fixed — since they prevent cost-traps and unnecessary cost scaling.

Agile really starts to shine when either:

In the first scenario, your outsourced team will send boots-on-the-ground to your location (or Zoom-on-platform in today's ecosystem). These are people who integrate themselves into your business, so you can push cultural and collaborative requirements onto them. In the second scenario, it doesn't matter as much if you have in-house or external outsourced teams — since you don't have to worry about cost-traps or over-the-scope project requirements. To be clear, agile is very powerful in these two situations. In fact, we would argue that agile can completely change your delivery cycle and help you create more fantastic customer experiences. But there are also plenty of situations where agile isn't strong.
 

Understanding the Pitfalls of Agile

We love Agile. Being SAFe certified, we leverage agile to execute massive government projects and huge client apps. But, despite the hype, there are very real situations where agile simply doesn't make sense. In particular, agile engagement models — meaning you are using outsourced development to execute and grow a project  — are tricky to leverage on from-the-ground-up projects. For starters, agile's iterative and flexible processes don't lend themselves well to budgetary projections. You don't get a firm, upfront quote like you would with firm-fixed. Since project requirements change throughout the lifecycle, agile can breed unpredictability and budgetary concerns into off-the-ground launches (i.e., costs change with the growth of the project and as new demands hit your outsourced team.)

Also, there's a tangible scope issue. Agile development doesn't have a set-in-stone scope. So, it's easy to overthink and over-scope projects with agile. You may start feeding new requirements to your outsourced team on a regular basis. And while these requirements may be things you desperately want, they also incur additional costs. Over time, your budget may grow out-of-control. This can also cause relationship frictions between you and your outsourced partner. The raw flexibility and scalability of agile are exactly what makes it so dangerous for some projects. Requirements can spiral out-of-control.
 

Which Engagement Model Works for Your Business?

There's no such thing as a perfect engagement model. But there is a perfect engagement model for your unique project. Obviously, agile is the most hyped, utilized, and championed engagement model in today's fast-paced development ecosystem. And for good reason. It's amazing. But it isn't ideal for every project. Unfortunately, the disadvantages of agile often get drowned out by the agile fanatics. Not every project fits with agile, especially full builds that leverage outsourced talent.

Will agile work for you? It depends! If you're looking to support an ongoing app or bring over an internal team of outsourced experts, agile could help you execute faster, smarter, and with more purpose. But if you want an off-the-ground app via outsourced talent, agile may put you in a dangerous cost-cyclone that's detrimental to your finances, forecasting, and relationship with your outsourced solution. Are you looking to create an amazing project?

Contact us. We have the skills, experience, and frameworks you need to execute projects across a variety of engagement models. From firm-fixed to agile and beyond, we're here to hand-pick the best solution for your business.

Categories
Author

Understanding-the-Scaled-Agile-Framework

Mobomo is pleased to announce that we have successfully earned the ISO 9001:2015 certification. ISO 9001:2015 is an international standard that specifies requirements for a quality management system. It provides a model for all companies to use to build and operate an effective and efficient quality management system.

Mobomo’s certificate was issued by Intertek (certificate #0110786), a Total Quality Assurance provider that has helped companies ensure the quality and safety of their products, processes, and systems for 130 years. The certification is applicable to user experience, design, mobile, web and cloud development services provided to businesses, government and non-profit organizations.

To become certified, Mobomo underwent two audits conducted by a professional with Intertek. During the first audit, the Intertek team member evaluated our scope of management system, understanding of the standard’s requirements, confirmed the status of our internal audits and reviews, and that our implementation of management system verifies that we were ready for audit number two. For Audit II, our team reviewed our management system with the evaluator to confirm that it met all the requirements of the ISO 9001:2015 standards and that we have effectively implemented the system.

Mobomo is extremely proud of the work that has gone into the development of our quality management system. Through this system, we are anticipating improved overall performance, and improved quality and satisfaction with our customers. We are extremely dedicated to the routine maintenance and adjustments that will be necessary to continue to evolve and adapt.

“Our ISO certification is vital to ensuring our ongoing commitment to customer satisfaction and quality by producing superior products and services to our customers.” – Brian Lacey, CEO.

More about the ISO 9001:2015 certification:

ISO 9001:2015 is based on the continual process of planning, assessing, and revising in order to maintain effective quality management as an organization and with the services offered to clients. In its entirety, it provides a process-oriented approach to documenting and reviewing the organization’s structure, responsibilities, and procedures.

ISO 9001:2015 covers the following seven principles in detail:

seven-principles

The benefits of ISO 9001:2015 for our clients:

By certifying as an ISO 9001:2015 organization, Mobomo has been trained and confirmed compliant to having a structured and efficient Quality Management System in place. We can guarantee to our clients that we:

  • Meet all regulatory requirements that are related to our services
  • Continuously monitor and suggest process improvements as necessary
  • Adapt to the challenges of changing markets and changing customer needs
  • Capable of implementing well-thought out and structured approaches to risk-based thinking; therefore, managing any unexpected situations
  • Can support global organizations

For more information on Mobomo and our services, please click here.

Categories
Author

firm-fix

Today's software ecosystem is drenched in competition, scope creep, and costs. The average IT project failure rate is over 10%, and one in six IT projects go 200% over-budget. To be clear, this isn't only a modern problem. Companies have been dealing with project failure for decades. In 2004, The Standish Group Report showed that 72% of projects went over-budget. So, we're all still worming around the same core issues that we've been dealing with for years.

Despite advances in technology and the hefty tech stack we all have packed under our armpits, the simple truth is: launching projects is still problematic for the majority of businesses. So, how do you minimize these failure rates and eliminate pesky cost overages? For many, the answer to this question (and often the source of the issue) is their engagement model. Your engagement model is the plan that identified project execution and launch details between your business and whoever is launching your project.

One of the most popular engagement models is the firm-fixed model. This classic engagement model virtually eliminates scope creep, budgeting issues, and timing frictions, but (like most things in life) it also has some serious downsides. Here's what you need to know about firm-fixed, and why it may help you launch smarter and more efficient projects in the future.
 

What is a Firm-Fixed Engagement Model?

A firm-fixed engagement model is a fixed-price contract that requires outsourced development agencies to create a project in a fixed timeline based on a set-in-stone, upfront cost. So, the development team will sit down with the company, discuss the project, and set the upfront scope, scale, time, and price of the piece before development begins. Once the contract has been signed, the company will know exactly how much they need to pay, and when the project will be delivered to them. Any additional costs accrued during the development phase due to unknown or unaccounted for features will be on the outsourced development team — not your company.

There's a safety net that comes with firm-fixed contracts. Developers can't add additional hidden fees, go "over-scope" and charge you the difference, or adjust project requirements halfway through the development process. However, there are also some downfalls to firm-fixed. You can't change the scope of the project mid-way through the development process without incurring additional charges, and firm-fixed doesn't work well with mid-horizon (+3 years) or loosely-defined projects.

Remember, firm-fixed sets the project in "stone." So, if the market changes during the development phase, it's difficult to readjust the project requirements. For some companies, this sounds "anti-agile" or "anti-lean." However, firm-fixed doesn't mean the dev process has to have anti-agile tendencies. This depends solely on your outsourced developers. That being said, firm-fixed does not suit in-house or hired team development — since it's difficult to operate on fixed costs in this type of environment.
 

How Are Costs, Time, and Scope Accounted For in a Firm-Fixed Engagement Model?

The firm-fixed engagement model is a classic. It helps align outsourced devs and businesses to the same goals, and it keeps the entire project on-budget and on-time. So, how does this work in the context of scope, flexibility, and time?

 

Which Project Work Best With the Firm-Fixed Model?

Traditionally, the firm-fixed engagement model has been primarily leveraged by outsourced teams. That still rings true. In-house teams have little to gain from firm-fixed, since it locks you into a less-agile framework for project development. With in-house teams (both salaried and sourced), it makes sense to use agile models that emphasize iterations, continuous adjustments, and consistent re-works. Everyone is on-site, deeply integrated with your company, and juggling multiple high-impact projects.

Outsourced teams exist in a different space. Firm-fixed helps you align everyone to a clear-cut goal with hyper-predictable cost structures and timelines. You may not want your outsourced team to have the potential to scope creep your project, add costs onto the dev cycle, or miss that ever-so-important deadline. Firm-fixed bakes project requirements directly into the contract.

So, when we look at projects, firm-fixed works great with zero-to-launch projects that have an identified scope. These are things like websites, portals, small software programs, and extensions or updates on apps. Firm-fixed lets you cut through the grease, identify requirements, and get results all within a predictable budget. However, zero-to-launch projects that have a mid-horizon timetable (think +1 year) may not work well with firm-fixed, since you lose agility and the ability to rapidly adjust project requirements to changes in the marketplace or consumer behaviors.

To help clarify the value of the firm-fixed engagement model, let's look at some recent statistics from PMI's Pulse of the Profession — which surveyed +3,000 project managers, 200 senior execs, and 510 PMO directors:

In other words, almost half of projects go over budget, over the timetable, and over scope. That's a big problem! Firm-fixed provides you with an easy-to-use model that circumvents these types of common project issues. Sure. You lose some agility on the front-end, but for zero-to-launch projects that can be completed in under 1 year, firm-fixed is a more affordable, approachable, and predictable model than Agile.

Your Model; Your Way

Creating, launching, and maintaining amazing IT projects isn't easy. We can help. At Mobomo, we specialize in best-fit project execution. Whether you want a rapid-fire project on a firm-fixed contract or a long-term behemoth that's agile and purpose-driven, we can deliver incredible projects that impress boards, amaze customers, and win revenue. Contact us to learn more.

Categories
Author
Subscribe to General