In the United States, the Information Technology (IT) and Software Development sectors have been bridging the gap between company growth and lack of manpower using outsourcing. Outsourcing sends work to technology professionals who are not employed in-house by the company. However, they are capable of completing the tasks at hand and often have freelancing rates that they then charge the company whose services they completed. There are three kinds of outsourcing:
Onshore outsourcing - using a software development provider located in your own country. In the United States, this often works by using a firm in another state. For instance, a company located in Silicon Valley may outsource some customer service workers in Texas.
Nearshore outsourcing - finding a firm to fulfill IT or software development needs in another country, however one that is only a relatively short distance away so the time zones are comparable. In the United States, many companies outsource to agencies located in Central America.
Offshore outsourcing - using programmers and IT managed overseas in a different time zone on the other side of the world. IT work is very affordable in Asian countries such as India and China.
Nearshore outsourcing and software development combines the benefits of onshore with the cost-effectiveness of offshore. Reducing the physical distance between the teams allows for more effective communication and less of a cultural barrier. In return, there are less delays in projects and teams are able to work during the same hours, meaning less monetary loss for the company.
Costa Rica is one location that proves nearshore outsourcing is not only beneficial to tech companies in the United States. Thanks to the nearshore outsourcing opportunities that are flowing into the country, the country itself is able to grow and thrive. All-in-all nearshore outsourcing has all of the benefits of hiring in-house employees and outsourcing work to freelance workers. Plus, it helps the economies of not one, but two countries grow simultaneously.
At Number 8, we believe in the up-and-coming tech hubs that benefit from nearshore developing. If you’re interested in learning more about Number8 and what we do, give us a call at (502) 890-7665, or check out our information page here!
[caption id="attachment_4344" align="alignright" width="400"] The following diagram shows a Node.js server lifecycle.[/caption]
Other platforms and applications normally have an Application Starting Point event, function or file, where code is run linearly with a well-defined beginning and end. Node.js is different: events are defined and attached to a server port, where they wait to run code until an event is triggered. “Node.js runs single-threaded, non-blocking, and asynchronously.”
This makes Node.js very fast and memory efficient due to the way that the server handles a new request.
It does not create a new thread, instead it starts running asynchronously and is always ready to handle the next request. This consumes less memory and makes the server fast, but it is important to understand when this is useful and when it may not be the best approach for a given set of business needs. This approach does not work as well as other options when the application needs to perform a big, long, complex calculation but becomes very powerful when it is required to perform several actions at the same time or handle a high traffic load (horizontal scaling).
It is important to note that the Sleep function will make the main single thread sleep, therefore putting everything to sleep! Apart from being fast and asynchronous, Node.js is also lightweight thanks to its modular approach. Node.js code can be seen as defined modules on ports. Common frameworks are heavy and contain all the references possible to use within that framework even if they aren’t used in a particular implementation. On the other hand, since Node.js defines modules, the references are only loaded when they are deliberately included (they need to be included with the ‘require’ keyword).
FrontEnd + BackEnd
Popularity & Community
After exploring some of Node.js’s characteristics, it shouldn’t be surprising to know that even big companies increasingly are choosing to use Node.js in production environments. Some examples: Netflix, LinkedIn, Walmart, Uber, PayPal and many more. Being popular and active in various production environments and companies makes Node.js a technology that has one of the most important advantages for any technology under evaluation, the community. Node.js has a very large and fast-growing community, thanks to its efficiency and its unique abilities. This helps because if an environment running Node.js presents an issue or needs diagnostics or maintenance, it is highly probable that someone else has already encountered the same issue, and the solution can be easily found and digested.
A big community for a given technology means that there is a lot of support and documentation on the web, which can drastically shorten the time-to-resolution.
A big community gives rise to another advantage, Node.js has a package manager (NPM) available to facilitate downloading and using third party libraries. There are countless extensions in these libraries that offer solutions to most problems that a developer might face, reducing the learning curve or development time of the project.
The workplace is changing more rapidly than ever. In 2017 we've seen progress in narrowing the wage gap, a shift from offshore to nearshore outsourcing for agile software development, and the rise in popularity of nontraditional benefits. Things will undoubtedly continue to gain pace in 2018. Here are some of our predictions for top workplace trends we will see in 2018 and beyond.
Higher Turnover from Burnout
Full-time workers in the U.S. work an average of 47-hours a week, with 40% of workers saying they work at least 50 hours. The availability of communication via technology means employees are forced to work in their off hours without additional compensation. This trend directly relates to the increased trend in workplace burnout which HR professional attribute to almost half of annual workforce turnover. This trend is set to continue into 2018 for companies that fail to create wellness and flexibility programs that encourage employees to take time off for their health.
Artificial Intelligence in the Office
Artificial intelligence is the next big technology trend. Apple, Google, Facebook, Amazon, and Microsoft are all incorporating AI into their upcoming devices and services in order to create "smarter products." In particular, businesses will be using Chatbots more and more to handle operations including on-demand customer support, data mining, personal assistance, and human resources. Internet retailer Overstock.com uses an HR chatbot called Mila that alerts managers when their employees are sick. Meanwhile, employees at Intel use an HR virtual assistant to answer questions about benefits and pay.
Emphasis on Human Interaction
Companies will continue to explore the effects of interpersonal relationships between workers. We've already seen this trend in action this year as IBM shut down their remote worker's program and the new Apple Park in Cupertino, designed to increase worker relationships and collaboration. Companies are hoping increased socialization in the workplace helps boost office morale while fostering creativity.
In order to "higher up" and fill the growing skills gap in the workforce, companies are investing resourcing in "upskilling," or providing current workers with additional training and education that allow them to fill higher positions. The National Federation of Independent Business reports that 45% of small businesses can't find qualified candidates. Meanwhile, 60% of all employers have open positions that remain vacant for twelve weeks or more. Employers hope the process helps workers stay relevant in positions automated in the future.
An Aging Workforce
The Baby Boomer generation is living longer. The number of people 65 and older should triple by the years 2050. Meanwhile, a higher quality of life is keeping them in the workforce longer. About three out of every four Americans plan to work past retirement age. Projections expect the aging workforce to cost companies in the form of equal opportunity, retirement benefits, and healthcare. Meanwhile, younger employees will have a harder time advancing in their careers as senior employees maintain their leadership positions.
At Number8, we keep our finger on the pulse of both past and future workplace trends. We think keeping up with this news helps us implement the things that work in our business practices. We do this for increased job satisfaction for our employees while providing services that satisfy our clients' needs. If you’re interested in learning more about Number8 and what we do, give us a call at (502) 890-7665, or check out our information page here!
Described concisely and directly, Unit Tests is Quality Assurance (QA) for the core of your software. The main difference between Unit Tests and regular QA is that Unit Tests are not done by a user interacting with the software directly. In fact, they are done by a programmer with code.
When we develop software, it must meet an objective or main requirement.
The core of the software is the code that relates directly to that objective.
The core is essential. If it does not function correctly, the software has no purpose.
Examples of software cores:
Online Payment - the code that processes the credit card or web payment method given by the user.
Hotel Booking Engine - the code that associates the user’s information to the hotel room and saves this to a database.
Scientific Calculator - the code that performs the actual calculations and returns a result.
When a software is declared 'done,' Quality Assurance (QA) tests the software to assure it satisfies its objective.
In a controlled environment, QA tests every core function possibility, making sure nothing breaks and everything works as expected.
The core is outlined clearly with every one of its cases for QA to test continuously.
The number of tests QA needs to perform can grow rapidly...
For instance, take a basic calculator (a relatively simple, single page application) that uses 4 basic functions (ADD / SUBTRACT / MULTIPLY / DIVIDE)At first, QA needs to test the calculator's 4 basic functions...
However, to ensure quality, QA needs to test every possible combination of functions at one time.
One feature at a time:
Two features at a time:
ADD / SUBTRACT
ADD / MULTIPLY
ADD / DIVIDE
SUBTRACT / MULTIPLY
SUBTRACT / DIVIDE
MULTIPLY / DIVIDE
Three features at a time:
ADD / SUBTRACT / MULTIPLY
ADD / MULTIPLY / DIVIDE
SUBTRACT / MULTIPLY / DIVIDE
SUBTRACT / DIVIDE / ADD
Four features at a time:
ADD / SUBTRACT / MULTIPLY / DIVIDE
For a basic calculator application that has four functions, QA needs to run 15 tests continuously to ensure it works properly.
Each scenario should be tested with its own input and all outputs need to be verified.
Now imagine another a new function is added to the app, for example, the trigonometric function sine. You have to test all the above functions again, but this time with the sine code added.
With the addition of 1 function, the number of tests increases from 15 to 31. The addition of 1 function doubles the number of tests to perform and forces QA to repeat tests.
A typical scientific calculator includes at least 13 functions: add, subtract, multiply, divide, percent, sine, cosine, tangent, square root, nth root, exponent, log, factorial.
That yields a grand total of 8191 different test cases to perform!
This amount of QA is not feasible for a person to perform.... enter unit tests.
Unit Tests are QA for the software core done by machine calculations, therefore free of human errors.
Unit Tests will send inputs to the software core and evaluate the result.
The fact that it is done by code helps test a big number of cases and vary the inputs accordingly.
Typical Unit Test Structure
Code to be tested.
Evaluation of results.
In the ‘Given’ section the programmer declares the inputs that will be passed to the feature tested. This can be a single number (like the calculator) or a different input, like a database object.
In the ‘It’ section, the programmer details the function or code that will be run and tested.
In the ‘Should’ section the results are evaluated and the Unit Test passes or fails.
Unit Tests include objects called ‘Mocks’ which resemble a database record. The programmer hardcodes the Mock’s attributes values, but it is important to note that the attributes are the same as a database record attributes, making it able to be tested.
Unit Tests are not fancy, unnecessary code
Unit Tests run quickly while verifying outputs correctly.
They are scalable and fit for applications with multiple requirements.
When a new variable is added, tests that verified the old cases can be reused.
Unit Tests are not a luxury, but an advanced way of doing QA by code that is needed when the software that wants to be tested has too many cases for a human to consider.
Plus, they are free from a human error, like passing a wrong input or interpreting the result incorrectly.
Unit Tests make QA more efficient while making it harder for its members to enter, as they will require a programming background.
At Number8 our programmers implement necessary code to ensure your software products can handle all functions and develop as needed. If you are interested in learning more about our development process or if you think you are qualified to join our team, then give us a call at (502) 890-7665 today!
The tech industry is one of the most important contributors to the Northern California economy. In order to continue developing high paying jobs, information and technology companies outsource operations to streamline processes and cut down on costs. Traditionally, Silicon Valley managers have looked to India for their outsourcing needs. However, there are various cultural issues when outsourcing to India.
Drawbacks of Offshore Outsourcing
Communication Issues - It's hard enough translating programming concepts to clients and establishing milestones. You are bound to run into issues communicating with programmers who speak a different English dialect on top of that.
Time Loss - There is almost an entire day's worth of time lost between San Francisco and Mumbai. When working with developers in India, take the loss of time into consideration when establishing project parameters. While the idea of planning a day ahead of schedule sounds great in theory, in practice we know that unexpected issues always require up-to-the-minute communication with programmers.
Spaghetti Programmers - The vast majority of coders in the Indian outsourcing market train to churn out work as quickly as possible. The term "spaghetti programming" refers to the code they produce; it loops round and round into a jumbled mess and if anything goes wrong, it's very difficult to trace steps back and fix it.
Hidden Costs - An abundance of cheap, quick labor produces systems without structural integrity od proper checks. A system like this will eventually crash, leaving people in charge of small to medium-sized projects scrambling to fix it. Project managers end up spending the same amount of manhours they originally outsourced fixing the problem, sometimes doubling the cost of operations.
Nearshore Outsourcing: Solving Offshore Issues for Silicon Valley
Despite the issues that come with offshore outsourcing, Northern California businesses still need to reach their demands for tech talent. The United States systematically fails to produce homegrown programmers and coders. Without these workers, operations halt and business growth stagnates.
Operations managers in Silicon Valley are turning to nearshore outsourcing to bridge the gap between the lack of tech talent and their business's needs. Nearshore outsourcing finds talent in countries close to the U.S. such as Honduras and Costa Rica. There are various advantages to nearshore outsourcing.
Benefits of Nearshore Outsourcing
Smaller cultural margin - The culture in India is very hierarchical; because of this, workers tend not to take initiative on projects. They hesitate to think beyond their instructions. In many ways, the culture in Latin American culture closely aligns to that of the United States. Additionally, the English dialect studied in Central America is closer in line with that of the United States, whereas in countries like India they learn the British dialect. It may seem like a small difference, but the difference in dialect is a major barrier to effective communication.
Agile development - Nearshore programmers in Central America train in the methodology of Agile software development. Under the values and principles of agile software development, operations evolve though self-organizing cross-functional teams and collaborative effort. That means when something goes wrong, there's no starting from scratch. Agile development is about motivated individuals working in real time and creating working software that evolves with business needs.
Lower costs - Nearshore combines the cost efficiency of outsourcing with the convenience of real-time communication. Higher productivity cuts down on overall costs and requires less backtracking. Furthermore, with nearshore outsourcing, supervisors in charge of development projects are able to directly oversee their teams. Flights from Northern California to Central America are quick and relatively cheap.
At Number8, we help Northern California tech businesses connect with agile software developers in Central America. Our teams--both foreign and domestic-- provide cost-effective services minus the difficulties and risks that come from offshore outsourcing. If you’re interested in learning more about Number8 and what we do, give us a call at (502) 890-7665, or check out our information page here!
GET STARTED TODAY
We’d Love To Schedule A Time To Talk.
Provide your information to talk with a number8 Relationship Manager about your development needs today and feel what it’s like to be listened to before being sold a solution.
number8’s onshore office is located in Louisville, Kentucky where our Account and Relationship Managers work hard to provide all of our clients with exceptional customer service. We also have consultant offices located in Escazú, Costa Rica and San Pedro Sula, Honduras that give us a strong local presence allowing for top-level recruitment, technical training and low employee turnover.