Code For Cash: Month 8 Report

Introduction

Truthfully, I have been dreading writing this report– and also dreading publishing it. This month we had negative progress, and that’s the last thing I want to publish. Not only is it somewhat embarrassing, but it’s also, possibly, negative signaling to customers and contractors who may take it as a sign that the end is near. There are many things to be optimistic about, and I’m here to move Code For Cash forward.

What do we do, again?

  • We are a community of freelance (and fte) software developers
  • We are a job search tool that is niche-focused on software developer jobs
  • We do agency-style software development

Revenue for month 8

Total revenue: $23,387.04
Recurring revenue: $3,000

Let’s compare revenue to last month.

MRR: $3,000 vs. $4,200: -28.5% M/M increase in MRR
Total Revenue: $23,387.04 vs $66,500: -65% M/M increase in total revenue

The total revenue drop was expected, and is not actually a disappointment; last month, I mentioned that we saw a higher than average spike in revenue due to completing milestones on several projects. But, the MRR drop? Oh god, what a total bummer.

What caused the MRR drop? Client who was on a high-MRR plan canceled service. Why? This high-value client kept emailing and calling over the weekend; I usually dropped everything and answered, to the dismay of my friends/family. This time I decided not to– I was burned out. Essentially, client fired me. ENTIRELY my fault for not communicating and setting expectations properly.

The good news

We sold 392 books. We got up to #3 in the Kindle bestsellers category for “Software Development”. However, this came at a cost. We cranked up the advertising and it cost on average $2.85 for someone to download a book. Just guessing: If 50% of the people who buy the book, end up opening it, and then 10% of those people end up actually reading it, that means it costs about $57 to acquire a reader. I actually feel like these economics are promising…in fact, they’re way, way better than Reddit ads.

More good news

We are in “trial” with many coding bootcamps; their students are getting tons of value of leveraging us as a tool in their job search.

Accountability – last month’s goals – how’d we do?

Find a predictable channel for acquiring hiring manager customers.

This didn’t go great. Tried tons of different channels, but haven’t discovered any scalable traction channels yet. Believe it or not, the best client/hiring manager channel we currently have is the one I wrote about extensively in the book… Craigslist. But it’s not exactly scalable without violating their TOS. Here are some other channels we tried…

  • Hiring a Harvard Business School person to write a case study for us
  • Emailing people
  • Cold calling people
  • Reddit ads
  • Printing 500 copies of the case study and distributing around the Flatiron (startup) district of Manhattan
  • Distributing copies of the case study at an AWS event
  • Blogging

We are still working on developing a scalable strategy. This is the most important thing for us to do. We already have a predictable (expensive) channel for sourcing developers, which is currently paused, because the bottleneck in our business is original projects. When we have too many original projects, we need more developers. Right now that’s not the case.

In lieu of finding a scalable strategy for acquiring hiring manager customers, we focused on something we can control: spidering more developer job boards and adding them to the database.

Bad job leads are in red.  Good job leads are in blue.

Untitled_spreadsheet_-_Google_Sheets.png

Miscellaneous updates

Slack is really at the core of our community. Why?

  • We do job alerts via Slack. (You customize your alerting preferences, including positive and negative keywords, via the webapp).
  • We have cool Slack extensions. /keywords @username lets you see someone else’s skills; /skill aws,python lets you see the @usernames of members who do both AWS and python. Finally, /timelogs @username lets you see your time chatting with @username, inbillable increments. (This is the coolest new feature – a serious time saver!)

Unfortunately, Slack was randomly killing some of our services due to reaching the integration limit, so we ponied up the extremely expensive monthly fees. Yes, we now have “upgraded” Slack.

This has changed the cost of delivering the service, so we changed our fee structure. We immediately raised the price for individual users to $200/month. This had two effects:

  • Way fewer people are signing up.
  • The few people who are signing up at this price point are extremely high quality and I can put them to work immediately on client projects.

Ultimately, we may be able to reconcile the costs of delivering the service and an appropriate profit margin and lower our monthly fees soon (I’m sure this is going to inspire exactly none of you to signup, but oh well. Transparency.). The $200/month was a bit of a knee jerk reaction, but it’s working okay. Remember, the cost of delivering the service also includes us paying human intelligence workers 10¢ for each job, to do manual review and add metadata that isn’t always explicitly present in the listing (1099, w2, onsite, remote, flag if we accidentally pick up a non-tech related jobs, etc.). Once we have a big enough corpus we may be able to do better machine learning and reduce those costs… but for now, the costs are

One more cool thing:

We have a client called WorkReduce. They’re an adtech company and they take jobs that require a human workforce and lower costs for companies by distributing them remotely.

WorkReduce did something interesting: they have one task that they pay humans on the order of 75¢ per task. It’s taking a page that previews multiple sizes of ad creatives, taking screenshots of it, cutting up the screenshots in Photoshop so that each size creative is a separate picture, and then uploading them into Salesforce. We were able to automate this for them, and they paid us a small upfront fee for integration into Salesforce as well as a per-task fee (25¢) for each successful task.

Let’s look at the benefits of this:

  • Developers can get paid a minimal upfront fee and also receive passive income (50%+ of developers I know are looking for passive income while also bringing in guaranteed money… solves a huge problem)
  • Company lowers their costs and increases automation. Company gets to market faster and with lower capital expenditure. Company becomes valued with 10x SaaS-style valuations instead of 1x service company valuations.

I feel like this is extraordinarily win-win-win.

We’re calling it Software as a Service as a Service, or SaaSaaS. We’re also in the process of building a serverless-marketplace for this– one new team member is working on this subsidiary initiative fully for SAFE, at 2x his normal hourly rate.

Next steps for us? Figuring out exact costs to deliver monthly service and decrease monthly fee so that we see a reasonable, but not exorbitant, margin of profit.

If you love this and want to read historical updates

– Month 1 https://www.indiehackers.com/forum/post/-KZTIFbGtOSKQUNrIsml

– Month 2 https://www.indiehackers.com/forum/post/-KajWVSRfUmTvlh1X9AS

– Month 3 https://www.indiehackers.com/forum/post/-Kfb7VxafAaHNPvgdvD7

– Month 4 https://www.indiehackers.com/forum/post/-Ki5j8MHQh0pkRm-DcpL

– Month 5 https://www.indiehackers.com/forum/post/-KkWE6UWbr2bDqar8BRb

– Month 6 https://www.indiehackers.com/forum/post/-Kn-QcExpR5_YJuwAQkU

– Month 7 https://www.indiehackers.com/forum/post/-KpQZV7B3INpJ8336_nH

Lock-free algorithms overview and (semi-) lock-free stack implementation

By Vladimir Pavluk.

In this article I would like to discuss the topic of lock-free algorithms, and particularly, a lock-free stack implementation. In fact, this implementation is lock-free only by name; there is a lock, it just is not obvious, and the question “why” will be clearly discussed further. All examples are given in the C programming language.

For those unaware of lock-free concepts, I’m going to briefly describe the matter in question and why is it useful. In multithreaded applications, it is very common that several concurrent threads require access to a single resource (memory, object, etc.): a processing queue would be a good example. To keep this shared data consistent we need to keep it from simultaneous uncoordinated changes. Usually, the means to coordinate such access, or synchronize it, are implemented using various kinds of locks: mutexes, spinlocks, etc.), which fully lock access to the data in question when one of the threads accesses it and unlock after the changes are completed.

I won’t go into differences between mutexes and spinlocks… just want to mention that the principle stays the same whatever kind of locks is used.

Contrarily to the lock principle, lock-free algorithms use atomic operations like CAS (Compare And Swap) to coordinate concurrent access and keep the data consistent. As a consequence, lock-free algorithms are usually faster than their mutex-based counterparts, and at every stage, the lock-free algorithms guarantee forward progress in some finite number of operations. And that would be ideal if it weren’t highly complex to make a correct implementation, starting from so famous ABA problem and ending with possible access to free memory segments and program crashes. So, solely because of the complexity, lock-free algorithms are still not used everywhere.

But that was just a preamble, so let’s dive into the topic. I’ve encountered a lot of lock-free stack implementations all over the Internet. Unfortunately, a lot of them are undoubtedly non-working.  Some of them are “naive” (the implementation is called “naive” if it does not take into account the ABA’ problem), and only few are really working and useful.

So let’s see why it is so and why finding problems in lock-free algorithms is a riddle.

One of the biggest problems in lock-free implementations is the dynamic memory management. We need stack nodes to be allocated on the heap, and if we don’t want memory leaked, to be deleted when they are not used anymore. Obviously allocation rarely causes issues, but deleting nodes can present a real problem. Let’s take a look at a “naive” implementation of a lock-free stack in the C programming language:

void push(void *data) {
  struct node *n = malloc(sizeof(struct node));
  n->data = data;

  do {
    n->next = head;
  } while(!compare_and_swap(&head, n->next, n);
}

void *pop() {
  struct node *n;
  void *result = NULL;

  do {
    n = head;
  } while(n && !compare_and_swap(&head, n, n->next);

  if(n) {
    result = n->data;
    free(n);
  }

  return result;
}

This implementation is called “naive” because it assumes that if CAS succeeds, we’ve got the data we intended to get. In fact, there are a lot of scenarios where head is the same as at the beginning of the iteration, but implies completely different data.

Let’s imagine the situation when one of the threads saved the head into its n variable, and took n→next, but have not yet called compare_and_swap. Then the thread yields control to other threads, one of which pops and deletes head, the other pops and deletes head→next, and the third one pushes new element on stack, and the memory allocates at the address of the old head (which was freed by the first thread). Then the control passes back to the first thread.

Now head will be the one compare_and_swap expects in n, but n→next will be pointing to the memory which was freed by the second thread. So when the pop operation succeeds here, head will be pointing to that deleted memory area, and the program will sooner or later crash.

Many sources call this problem an ABA’ problem. This name mirrors the sequence we see in the data, which is A, then B, then A’ (which looks like A, but in fact is not actually A). This is a real hassle for those starting to dig into lock-free algorithms implementation! The most common way to solve this problem is having a tag in addition to the data, which changes with each push, so even if the pointer to the data is the same, the tag will be different, which in the case of ABA’ would be what distinguishes A from A’.

This implementation is also prone to the other type of problem: the memory deallocation problem. To demonstrate it, let’s assume the situation where one of the threads saves head to n and yields control to other threads. The other thread successfully popped from the stack, so head is changed and the previous head element is deleted. When the control returns back to the first thread, n will be pointing to the freed memory area, and the attempt to take n→next will address the invalid memory, which is obviously not good for a program and can lead to a crash.

This problem can be solved different ways. Some use the hazard pointers list, which stores the pointers that can’t be deleted at the time. Some temporarily replace the head with some ‘magic’ value that prevents reading and deleting it from the other thread. But the implementation that I suggest uses the fact that access to the stack is done via a single element – top of the stack (head). So relative to the other containers like queues or lists, the gain from a lock-free approach is not that huge.

That is why I suggest a combined approach to the stack: the lock-free writing (pushing), using CAS, and spin-locked reading (popping) which prevents concurrent simultaneous reading. Spin-locked popping in a single thread means that we’re protected from accidentally accessing deallocated memory, and that also means that while we’re reading, we can’t remove and then insert removed elements, which means that the ABA’ problem is also solved. In other words, I suggest the semi-lock-free algorithm, which is lock-free in its easy part, and using lock in its most error-prone part.

One possible implementation is as follows:

void mt_stack_push(struct mt_stack *top, void *data) {
  struct mt_stack *tb, *old;
  tb = malloc(sizeof(struct mt_stack));
  tb->data = data;

  old = top->next;
  tb->next = old;

  while(!__sync_bool_compare_and_swap(&top->next, old, tb)) {
    usleep(1);
    old = top->next;
    tb->next = old;
  }
}

void* mt_stack_pop(struct mt_stack *top)
{
  struct mt_stack *current;
  void *result = NULL;

  // Acquire the spinlock
  while(!__sync_bool_compare_and_swap(&top->stack_mutex, 0, 1)) {
    usleep(1);
  }

  current = top->next;

  // We can't pop and delete one element, because it's read-locked
  // But it can change because the push operation is lock-free
  while(current && !__sync_bool_compare_and_swap(&top->next, current, current->next)) {
    usleep(1);
    current = top->next;
  }

  if(current) {
    result = current->data;
    free(current);
  }

  // Release spinlock
  while(!__sync_bool_compare_and_swap(&top->stack_mutex, 1, 0)) {
    usleep(1);
  }

  return result;
}

This implementation was tested along with a correctly-implemented purely lock-free algorithm and the algorithms using spin-lock and mutex locking. The time of the execution for all of the mentioned algorithms is following (and fluctuated only insignificantly with the number of runs):

mutex:
real 0m1.336s
user 0m1.173s
sys 0m3.628s

lock-free:
real 0m0.533s
user 0m0.792s
sys 0m0.046s

spinlock:
real 0m0.520s
user 0m0.630s
sys 0m0.018s

semi-locked:
real 0m0.353s
user 0m0.360s
sys 0m0.075s

The fact that lock-free and spinlock algorithms differ so little is explained by the fact that stack has a single point of access (top), which I mentioned before. So why is the lock-free approach slower? Because of the all the guards against deleted pointers and the ABA’ problem that I mentioned.

The conclusions follow: before implementing a lock-free algorithm, an analysis should be performed to determine whether or not the container allows multiple access points and simultaneous access from several threads. It is possible that in this particular case (like in the case of the stack), lock-free algorithms will only add hassle, not providing any significant gain in performance.

This article also shows how mixed locked + lock-free approaches could be reasonable in implementing thread-safe concurrent algorithms.

What is serverless and why does it matter

Until 2007, web hosting was a huge expense for companies.  If you wanted to make a website or server that handled any serious amount of traffic, you pretty much had to rent your own server.

1U data center server

You then had to put it in a data center, where it would be installed by some sad guy with a ponytail1.

1: Just jealous that my hair fros and I can’t grow a pony tail or man bun.

If you had the budget, you could use a company like Rackspace, where you could either rent their servers or share a server with a few people.

Then, the “VPS” (Virtual Private Server) revolution came in 2007.  Amazon launched Amazon Web Services.  Basically, anyone could spin up a server and pay Amazon an hourly fee, rather than having to buy the hardware and rent access to a rack in a data center.  This reduced hosting costs substantially, especially in the beginning.  It’s cheaper to rent a few servers by the hour than to own your own hardware.  Once you are spending millions per year in server expenses, people still evaluate the option of owning their own hardware, but the VPS/hourly rental innovation changed the game entirely.  Amazon competes in the space with Google Cloud, Salesforce (Heroku), Digital Ocean, Microsoft Azure, etc.

Another benefit to this is that it’s easier to scale up: if your app suddenly becomes an overnight success, you can triple the amount of server usage with the click of a mouse, rather than having to order hardware, drive to the data center, etc.  This reduced lag time from weeks (buying the hardware, installing it, setting it up) to days.. or even a few hours of configuration within the AWS / Google Compute Engine / Azure console.

In 2015 or so, another innovation came: “serverless” functions.  Instead of having to rent a server by the other, where you would then install/deploy your app/website/software, one may just write their app as a series of functions.  Instead of paying to rent the whole server per hour, you instead just pay for the system resources your app is using.  For example, let’s say you have an app that uses 100mb of RAM…. when in use.  Yet the server has 2GB of RAM.    If instead you only pay for the hosting costs of your app while it’s actually being used, you would be paying a fraction of the costs.

Serverless development has a few other benefits too:

 

  • Reduces expenses since you pay for the computing resources you use
  • Easy to measure function execution: instrumentation and measurement is built in to the concept
  • You no longer have to deal with server management.  You don’t have to watch the operating system for vulnerabilities/viruses, you don’t have to upgrade the software, you don’t have to deal with machines that experience hard drive failure.  All you have to worry about is your app, rather than the environment it runs on.
  • Infinitely scalable:  all you have to do is deploy your app to Amazon Lambda/Azure Cloud Functions, and then Amazon figures out how to provision the server resources necessary to execute your app.  The “cloud” reduced “time needed to scale” from weeks to days/hours.  Serverless reduces “time needed to scale” from days to… nothing.  It’s instant!

In summary….

  • Pre-2007: you essentially needed a data center or expensive web host (who had their own data center / hardware) to deploy your code for any serious scale
  • 2007: Amazon launches AWS.  This of course is the same thing as the cloud.  8 years later, pretty much every big company has a “Cloud” strategy
  • 2015:  Amazon launches serverless functions.  2 years later, the hardcore techies are enthusiastic about it and taking early advantage.  Within 5 years this will be mainstream… TV commercials, etc.

 

Thanks to Rich Jones for checking my ponytail comment. Thanks to Justin George for underscoring the importance of the time-to-market differences.

The Art of the Win – How Donald Trump Stunned the World and Became the 45th President of the United States

By Martin Keen.

The presidential election of 2016 has taught us all two important things:

1.) National pre-election polls can be completely wrong.
2.) In America, even if you are just a multi-billionaire real estate magnate, you too can work hard and achieve your dream of becoming the president of the United States.

 

On Tuesday, November 8, Donald Trump managed to pull off what could quite possibly be the greatest political upset in United States’ history. By earning 290 electoral votes against Hillary Clinton’s 232 electoral votes¹, Mr. Trump became the nation’s 45th president-elect.

 

Many political strategists were calling for a substantial win for Clinton. President Obama provided his support on the campaign trail. Her millions of supporters were also hoping to finally put the first woman into the Oval Office. As the former Secretary of State, Hillary Clinton was poised to be the rightful successor to President Obama and continue the course that had been laid out by the Democratic Party. But alas, that was not to be.

 

On the night of the presidential election, the map of the United States progressed to primarily being covered in red. The mood inside the Clinton camp headquarters changed from the jubilant excitement of an expected victory to a tone of somber and stunned disbelief. Donald Trump had defeated Hillary Clinton and won the presidential election.

The question is: How did he do it?

 

Trump achieved his amazing accomplishment primarily by setting himself apart from all of the other candidates. Not only did he appear to be different from his political opponents in both the Republican and the Democratic parties, he positioned himself to be the candidate that was unlike any other candidate in recent history. There were many factors that contributed to Trump’s incredible victory. The factors that served him well were those that allowed for him to be seen as unique.

 

Psychometrics

 

According to reports, the results of the 2016 U.S. elections were greatly influenced by a data analysis model. This particular model was created by Cambridge University student Michal Kosinski eight years earlier. While he was studying for his Ph.D. at Cambridge University, Michal Kosinski explored the idea of applying psychometrics². Psychometrics is a scientific field which focused solely on measuring basic psychological traits from data generated by Facebook users. He further developed a Facebook app, named “MyPersonality”. The MyPersonality app basically served as a questionnaire which utilized questions extracted from a similar psychometric model named “The Big Five”.

 

¹ CNN.com, http://www.cnn.com/election/results/president

² MichalKosinski.com, http://www.michalkosinski.com/

 

Users of The MyPersonality app were presented with an option to share their respective Facebook data with Michal Kosinski and his team of researchers. Surprisingly, many of the users actually did share. Within a short time frame, Kosinski had in his possession one of the largest data pools. It was a combination of Facebook profiles and psychometric scores. Thus, making his research an exercise in the unheralded potential of big data.

 

The resultant effect showed that, for every action on Facebook, a precise deduction was possible. With the collation of more data and time, Kosinski and his team of researchers were able to create a more precise model. By 2012, they were able to predict the ethnic background of a user of the MyPersonality app with a frightening accuracy of 95 percent. They could also predict the political party to which they had affiliations with, averaging 85 percent from a sum of just 68 likes.

 

After rejecting an offer in 2014 from the parent company of Cambridge Analytica, Strategic Communication Laboratories, Michal Kosinski did not think of it until Cambridge Analytica was contacted to aid the “Leave.Eu” Brexit campaign led by Nigel Farage in the United Kingdom. At that same time, American politics came calling as well. Cambridge Analytica was credited by Ted Cruz for being responsible for his campaign surge. As such, Donald Trump’s team followed suit subsequently.

 

At the beginning of the election campaign season, Cambridge Analytica came up with a model capable of predicting the personality of virtually every American adult. This particular model had similar features to Kosinski’s earlier method, which he developed in 2008 at Cambridge University.

 

The big data company purchased data from different sources. The data ranged from the type of magazines which people bought to information about cars and pets. The aggregate data was further used by Cambridge Analytica to create politically-inclined insights, which would be used in sending messages targeted towards specific voters.

 

However, instead of targeting the whole country, Cambridge Analytica focused only on 17 states. It believed that these states could be contested by Donald Trump. It further separated the population into 32 different types of personalities. With the aid of this framework, Cambridge Analytica was able to make specific deductions. For example, those who preferred American-made cars were more likely to be potential supporters of Donald Trump.

 

This model had so much precision in helping supporters of Donald Trump with their campaign. It aided them in knowing what homes would be receptive to specific messages. Without any reasonable doubt, this was the main reason why Wisconsin & Michigan were solely focused on by Trump’s team during the last week of his campaign. It’s a strategy that clearly worked well.

 

Tough Talk

 

When Trump first made his announcement that he would be running for the office of the presidency, he decided that all of his speeches were going to count. He focused on topics and areas that were highly concerning to Mr. and Mrs. John Q. Public. He began with his stance against illegal immigration. Securing America’s borders has always been a national issue.

 

However, other politicians have treaded lightly around this subject. While maintaining an effective security protocol around the country’s borders has always seemed to be a concern, the majority of presidential candidates have skimmed around the topic somewhat lightly. They have not wanted to appear to be off-putting to other countries and the cultures of their citizens. America is, after all, the great melting pot.

 

But Trump decided to take a markedly different approach to address the topic. He specifically called out the border situation between the United States and Mexico. He professed that there were many factions of illegal immigrants that want to come to this country for the sole purpose of committing severe, felonious crimes. Trump was direct in his approach and right to the point. None of the other candidates would have even dared to speak about the border situation in that manner. Some saw this as Trump’s expression of possible racist views. Many of his opponents actually distanced themselves away from him so that they would not be seen in a negative light.

 

But actually, this was an incredible, strategic move made by Trump. He stood completely alone by making this stance on national security. Most Americans were not accustomed to a presidential hopeful who spoke in such a direct manner. By doing this, Trump began to lay the groundwork for his self-marketing strategy. He was ensuring that the majority of the attention placed on this year’s presidential election would be focused on him. People were intrigued by his tough talk, and they wanted to know more about his plans. They also wanted to find out what he would say next. From this, Trump was able to build a strong momentum to garner high attendance rates for his rallies. During the debates, he was clearly the standout candidate. Donald Trump ensured that all eyes were focused on him and him alone.

 

A Man of Action

 

As a compliment to his stance on the nation’s border security, Trump also professed a radical course of action to keep America safe. He introduced the public to the wall. Trump’s plan to construct a stable barrier between the United States and Mexico was a plan that the other candidates would not have touched. With his plans for building a wall across our borders, Trump wanted to show that he was more than just a political candidate who talks about change. As an internationally known real estate businessman, he has both the knowledge and the experience to create grand structures. He also has a multitude of construction teams at his disposal. Whatever you may think about the man, Trump has the years of experience that proves that he knows how to put up a wall.

 

Whether or not an actual wall will be constructed on our borders is a matter that we will have to wait to be seen. However by presenting the mere concept of this proposed solution to an area of national security, Trump allowed for himself to be completely different from every other politician. He had become a serious man of action.

 

The Outsider

 

Unlike the majority of men and women who run for public office, Donald Trump has never held a political position. He also has never served in any branch of the armed services. In the terms of the Washington, D.C. brass, he was definitely a true outsider. Many political strategists thought that these would be the major factors in preventing Trump from having any chance of winning. In actuality, they helped in making him a viable candidate.

 

As long as there has been a stable form of government in our country, there has also always been a certain level of dissatisfaction with the government from its citizens. Career politicians have a general stigma of hypocrisy. It has been a common belief that politicians will say whatever they need to say in order to get elected. Once they get elected, then they will just do whatever they want to do.

 

Since Donald Trump was not a career politician, he was not surrounded by the same stigma of hypocrisy as his opponents. While someone else in his position may have felt intimidated by going up against experienced candidates, Trump saw this as his golden opportunity. His campaign was based on the foundation of infusing new blood into Washington. By doing so, he would be able to bring about important and real changes to the country. He turned a possible negative situation into a strong, positive force. He was the ultimate outsider.

 

Donald Trump beat the odds and became the next president of the United States. He used his business experience, his strong words, and his belief in himself to stand alone and win. Just like Frank Sinatra, Donald Trump did it his way.

 

What’s It Like to Submit Your SBIR Proposal to NASA?

By Martin Keen.

Smаll buѕіnеѕѕеѕ are аlwауѕ on thе lookout fоr орроrtunіtіеs. The federal gоvеrnmеnt is a grеаt рrоvіdеr of opportunities fоr thе ѕmаll guуѕ. Hоwеvеr, ѕmаll businesses tурісаllу do nоt have the resources оr еxреrtіѕе оn hаnd tо nаvіgаtе their way thrоugh fіndіng, соmрrеhеndіng, аnd thеn winning government соntrасtѕ. Or ѕо thеу thіnk. Yes, it can bе a tеѕt оf уоur wіll (and wits) to find сеrtаіn types оf fеdеrаl work whеn you are a ѕmаll buѕіnеѕѕ; ѕреndіng уоur vаluаblе tіmе and hаrd еаrnеd money on kееріng аnd grоwіng уоur buѕіnеѕѕ. Fortunately, thеrе іѕ one рrоgrаm оut thеrе for thе ѕаvvу and іnnоvаtіvе small business (іn a variety оf іnduѕtrіеѕ); the Smаll Buѕіnеѕѕ Innovative Research prоgrаm.

Small Business Innovation Research, better known as SBIR, are the four words that every independent science and technology company should know. SBIR is the federal program established to bridge the gap between new inventions and innovations and the departments of the United States government. Founded in 1982, the SBIR program was designed specifically and directly to small businesses. Its primary mission is to encourage small businesses to create new products and process implementations in order to provide support for the missions of the departments of the United States government. By encouraging small businesses to participate in the country’s research and development (R&D) endeavors, the SBIR program helps to stimulate the development of new technologies. The new technologies assist the governmental agencies in achieving their specific R&D goals of the country in many areas, including health, national defense, and space exploration.

The SBIR prоgrаm іѕ administered bу thе U.S. Smаll Buѕіnеѕѕ Administration and twelve fеdеrаl agencies раrtісіраtе іn ѕреndіng оvеr $2 bіllіоn in funding. Thіѕ prоgrаm provides ѕmаll, hіgh-tесh соmраnіеѕ a great ѕhоt аt соntrіbutіng to thе nаtіоn’ѕ research аnd dеvеlорmеnt, аnd еvеntuаllу commercial grоwth еffоrtѕ. Thіnk оf the SBIR program аѕ bеіng оnе lаrgе rіvеr оf fundіng with all thе аgеnсіеѕ bеіng ѕtrеаmѕ оf funding оf thіѕ rіvеr.

The National Aeronautics and Space Administration (NASA) has established its program for the truly tech adventurous. The URL for their website is https://sbir.nasa.gov. Participants who choose to undergo the submission process are considered to be contractors. The three phase program offers contractors, whose technical proposals are accepted and approved, monetary awards in the form of grants. With the increase in the exploration of space being conducted by private industries, NASA has largely been perceived as taking a back seat in the modern age of the space race. In essence, it is an ideal time to bring scientific technical innovations to the federal government.

If you think that it’s not easy to receive NASA approval for your technical proposal, then you are absolutely right. It’s not easy at all. NASA has designed a stringent plan of protocol that must be adhered to precisely In order to have a successful submission, you must follow all of their instructions precisely. Here is what you need to know in order to submit your SBIR proposal to NASA.

Getting Started

Before you can begin the process of submitting your proposal, your company must be registered with the System for Award Management (SAM). The URL for SAM is https://www.sam.gov. SAM is the primary repository for contractor information required for conducting business with NASA. It is maintained by the Department of Defense (DoD). A contractor must have a SAM.gov registration in order to receive any type of award from NASA.

Right about now, you are probably thinking about any type of costs that might be associated with this additional registration. There is nothing to worry about concerning additional costs. The registration with SAM.gov is absolutely free. However, in order to receive your SAM.gov registration, you must also be registered with a few other departments. This is one of the many great joys of getting involved with the United States federal government. In order to work in any capacity with one department within the government, you must have an established association with a multitude of other departments. By this manner, you will always have more than one set of watchful eyes on you and your company.

In order to be completely registered with SAM.gov, your registration does require a Dun and Bradstreet (DUNS) number. DUNS stands for Data Universal Number System. It is a nine-digit number that is assigned by Dun and Bradstreet Information Services. It is primarily used to identify unique business entities. The website for Dun and Bradstreet is http://www.dandb.com.

But wait…there’s more. You must also have a CAGE code that needs to be fully validated in SAM. CAGE stands for the Commercial and Government Entity code. It is a five-character ID number that is used extensively with the United States federal government. The CAGE code is a unique identifier that is assigned to suppliers to various government or defense agencies. The code provides a standardized method of identifying a given facility at a specific location. It is assigned by the Department of Defense’s Defense Logistics Agency (DLA). As a contractor, if you do not already have a CAGE code, you will be able to be assigned a code during the SAM registration process.

The Three Phases

  • Phase I is the opportunity to establish the scientific, technical, commercial merit, and feasibility of the proposed innovation, and the quality of the contractor’s performance.

Phase I work and results should provide a sound basis for the continued development, demonstration and delivery of the proposed innovation in Phase II and follow-on efforts. Successful completion of Phase I objectives is a prerequisite to consideration for a Phase II award.

The SBIR Phase I contracts last for 6 months with a maximum funding of $125,000.¹

¹ The SBIR and STTR programs have 3 phases, https://sbir.nasa.gov/content/nasa-sbirsttr-basics

  • Phase II is focused on the development, demonstration, and delivery of the innovation. Only contractors awarded a Phase I contract are eligible to submit a proposal for a Phase II funding agreement. Phase II projects are chosen as a result of competitive evaluations and based on selection criteria provided in the Solicitation.

Phase II contracts last for 24 months with a maximum funding of $750,000.²

  • Phase III is the commercialization of innovative technologies, products, and services resulting from either a Phase I or Phase II contract. Phase III contracts are funded from sources other than the SBIR program.

The competition for SBIR Phase I and Phase II awards satisfies any competition requirement of the Armed Services Procurement Act, the Federal Property and Administrative Services Act, and the Competition in Contracting Act. Therefore, an agency that wishes to fund a Phase III project is not required to conduct another competition in order to satisfy those statutory provisions. Phase III work may be for products, production, services, R/R&D, or any combination thereof that is derived from, extends, or concludes efforts performed under prior SBIRfunding agreements. A Federal agency may enter into a Phase III agreement at any time with a Phase I or Phase II awardee.

There is no limit on the number, duration, type, or dollar value of Phase III awards made to a business concern. There is no limit on the time that may elapse between a Phase I or Phase II and a Phase III award. The small business size limits for Phase I and Phase II awards do not apply to Phase III awards.²

² The SBIR and STTR programs have 3 phases, https://sbir.nasa.gov/content/nasa-sbirsttr-basics

Submіѕѕіоn Requirements

NASA uѕеѕ еlесtrоnісаllу ѕuрроrtеd buѕіnеѕѕ processes fоr the SBIR рrоgrаm. A contractor must hаvе Internet access аnd аn е-mаіl аddrеѕѕ. Pареr ѕubmіѕѕіоnѕ are nоt accepted.

The Elесtrоnіс Hаndbооk (EHB) fоr submitting proposals іѕ lосаtеd аt http://sbir.nasa.gov. Thе Proposal Submіѕѕіоn EHB wіll guіdе the companies thrоugh thе steps fоr ѕubmіttіng an SBIR рrороѕаl. All EHB ѕubmіѕѕіоnѕ аrе thrоugh a secure соnnесtіоn. Thе communication bеtwееn NASA’s SBIR program and thе fіrm іѕ рrіmаrіlу thrоugh a соmbіnаtіоn of EHBѕ аnd e-mail.

The Submіѕѕіоn Prосеѕѕ

Contractors must rеgіѕtеr іn thе EHB to begin thе submission process. Companies аrе еnсоurаgеd tо ѕtаrt the proposal рrосеѕѕ еаrlу, tо аllоw fоr ѕuffісіеnt time tо соmрlеtе thе ѕubmіѕѕіоn рrосеѕѕ. It іѕ rесоmmеndеd thаt thе Buѕіnеѕѕ Offісе, оr аn authorized rерrеѕеntаtіvе dеѕіgnаtеd bу thе Buѕіnеѕѕ Offісіаl, be thе fіrѕt реrѕоn tо rеgіѕtеr fоr thе company. The company’ѕ Employer Idеntіfісаtіоn Numbеr (EIN)/Tаxрауеr Idеntіfісаtіоn Number is rеԛuіrеd durіng rеgіѕtrаtіоn.

Fоr ѕuссеѕѕful рrороѕаl ѕubmіѕѕіоn, contractorѕ shall соmрlеtе аll fоrmѕ оnlіnе, uрlоаd thеіr tесhnісаl рrороѕаl іn an ассерtаblе fоrmаt, and have the Business Offісіаl аnd Prіnсіраl Investigator еlесtrоnісаllу endorse thе рrороѕаl. Elесtrоnіс endorsement of thе рrороѕаl іѕ hаndlеd оnlіnе with nо аddіtіоnаl ѕоftwаrе requirements.

What Nееdѕ to Bе Submіttеd?

Thе еntіrе proposal іnсludіng Fоrmѕ A, B, C, thе brіеfіng сhаrt, and оthеr firm lеvеl forms muѕt bе submitted vіа thе Submissions EHB lосаtеd оn thе NASA SBIR wеbѕіtе.

I. Fоrmѕ A, B, and C аrе to bе соmрlеtеd оnlіnе.

II. Thе tесhnісаl proposal іѕ uploaded from your соmрutеr vіа thе intеrnеt utіlіzіng the ѕесurе соmmunісаtіоn protocol.

III. Companies muѕt submit a brіеfіng chart оnlіnе, whісh іѕ not іnсludеd in thе раgе соunt.

IV. NASA Rеѕеаrсh Lісеnѕе Aррlісаtіоn – Only if thе uѕе of Terminal Velocity Aerospace (TAV) іѕ рrороѕеd.

V. The certifications, audit іnfоrmаtіоn, рrіоr аwаrdѕ addendum, and соmmеrсіаlіzаtіоn mеtrісѕ ѕurvеу аrе required аnd to bе completed оnlіnе. These are not іnсludеd іn thе раgе соunt.

Tесhnісаl Prороѕаl Submіѕѕіоnѕ

NASA соnvеrtѕ аll technical рrороѕаl fіlеѕ tо PDF fоrmаt fоr еvаluаtіоn. Therefore, NASA requests thаt tесhnісаl proposals be submitted in PDF fоrmаt or MS Word. Note: Embеddеd animation оr vіdео, аѕ well аѕ rеfеrеnсе tесhnісаl papers for “further reading” will not bе соnѕіdеrеd fоr еvаluаtіоn.

Wіthdrаwаl of Prороѕаlѕ

Prіоr tо thе сlоѕе оf submissions, рrороѕаlѕ mау bе wіthdrаwn vіа thе Prороѕаl Submіѕѕіоn Elесtrоnіс Hаndbооk hоѕtеd оn thе NASA SBIR website (https://sbir.nasa.gov). In order tо withdraw a рrороѕаl after the dеаdlіnе, the designated Business Offісіаl must ѕеnd wrіttеn notification vіа еmаіl to ѕbіr@rеіѕуѕtеmѕ.соm.

REI Systems is a leading provider of web-enabled business solutions for the federal government and the commercial sector.  In 2016, REI was awarded the Agency-Wide Technical and Advisory Support Services (A-TASS) contract with NASA.  It provides NASA with system operations and management for data management and analysis support, program operational support and system development.