Why Northern California Tech Companies Turn to Nearshore Outsourcing

Northern California: A National Tech Hub

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

 
northern californiaDespite 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.
    • Less time overlap – While there is an entire day’s difference between Silicon Valley and Mumbai, there is only an hour difference between San Francisco and Costa Rica.
    • 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!

My Xamarin Experience

xamarinDifferent Options

When developing software, whether it’s for a fun project or a formal business project, a requirement can be met by many different options and technologies. After a while of looking at many, it is natural to think which is the best option for the requirement.

Let us consider the options for building a mobile application.

Sometimes the best option is determined by the compatibility of the implications of the option and the technical strengths of the development team. (I’ll cover implications a little later)  The first option to consider when building a mobile application are native applications, but it immediately raises a warning – when the code for a platform is done, the code will need to be transcribed to another platform.  Second, every native technology has its own implications. So to have a successful mobile experience in all native platforms, a developer for each platform is needed.

Even if there was a developer for each platform, is it worthwhile to develop a native mobile application for each platform instead of modifying a web page so it can be viewed in any device?  This is an important question to consider so here is a comparison chart for key characteristics.

CharacteristicNative ApplicationWeb Page
InternetAfter downloading the app, it can work in offline or online modeOnly works with internet connectivity
PerformanceNative components are lightweight and fastPages tend to be heavy and work somewhat slower
Push NotificationsCan send push notificationsCan’t send push notifications
Hardware AccessAccess to camera, speaker, flash, etc.Does not have access to hardware
AccessibilityOpening the app with a clickOpening browse and typing URL
User ExperienceNatural feels and smoothUnnatural and, in some cases, slow

Based on this comparison, it appears that a native application offers a wider range for creativity and service options. If the development team handles all the implications for every platform then it might be a good idea to develop a mobile app natively for each platform, considering that native applications have the best performance and assuming the business is willing to pay a higher cost.

Let’s talk more about those “implications”.


Implications

When dealing with software frameworks and APIs, each framework works naturally with the programmer at least interacting with (in others mastering) certain technologies or programming languages. This comes naturally if the framework is an extension for another technology.

For example, consider Node.js, a JavaScript runtime. When using Node.js, being a JavaScript runtime, the code will naturally be programmed in JavaScript language. Therefore, working with Node.js framework implies the programmer knows, or can at least interact with, JavaScript language. We’ll call these framework dependency implications.

Following are some implications for some mobile application frameworks.

Mobile Application TechnologyImplications
Native Android Mobile App• Java
Native iOS Mobile App• Objective-C or Swift programming language
Xamarin• .Net (C# programming language) • Extensible Application Markup Language (XAML)
Appcelerator• JavaScript • Titanium SDK
Phonegap• Hypertext Markup Language (HTML) • JavaScript Language • Cascading Style Sheets (CSS) Language
Ionic• Hypertext Markup Language (HTML) • JavaScript Language • Cascading Style Sheets (CSS) Language • AngularJS
React Native• Hypertext Markup Language (HTML) • JavaScript Language (ES6 Syntax) • JavaScript XML (JSX) • Document Object Model (DOM)
Sencha Touch• Hypertext Markup Language (HTML) • JavaScript Language • Cascading Style Sheets (CSS) Language • Sencha SDK • MVC Architecture

There is another cost that is not visible at first glance.  Even though the different platform projects have the same core and logic, ultimately they are individual projects. Each project has a different language and application lifecycle and SDKs, so each project will also need its specialized maintenance. This can all add up.  If creating the application natively appears to be too expensive or the development team does not handle all the implications, another strategy can be used.

Using a cross-platform technology has become very popular as a hybrid solution for mobile development, so you can write one set of code that can be used on multiple platforms and can give the user a native experience. There are many cross-platform mobile app technologies, each with it’s own implications. The strategy is to pick technology that has an implication that the development team masters, plus another consideration. Since this is cross-platform, it is important to choose a solution that has a large percentage of transcribing code; the code that can be written once and run natively across the platforms.


xamarin developerMy Experience

When I decided I wanted to develop mobile apps, my first thought was “What native technologies do I know?”

I had used Objective-C for an iOS application.  If I wanted to make a native android or windows phone application, I’d have to learn about project structure and app lifecycle and hope I could program in the language they used. Since I only knew one native technology (iOS) I decided it was better to invest time learning a cross platform technology.

I then thought “Now if I’m going to use a cross platform technology, what implications can I handle the best?”.  Xamarin was a natural choice for me, thanks to the language and application structure.  C# is one of the languages I handle the best, plus the structure was intuitive. An .xml page with its back end code, the application lifecycle was also C-like. I managed to learn XAML and the app structure and lifecycle quickly.

Later, I discovered that Xamarin generated native apps that shared 95% of the common code. I also got to an acceptable level of understanding in android and iOS native applications. Then I decided to test Xamarin’s generated native projects. It seemed that the native applications were greatly structured and coded. I thought “Wow. In theory, it is possible for someone to develop a full native Android app without knowing Java or the android app structure or even having the Android Studio”. Another plus for cross-platform technologies comes from the abstraction layer.  When using Xamarin, the code handles mobile events (like Swipe) in Xamarin’s way.

I can code once and use these events without even knowing how to do it the native way.

I decided it was a good idea to take full advantage of these generated projects and tried making everything in Xamarin, because some things are not implemented on the framework. For example, Xamarin has no radio button tag for iOS applications. Instead of modifying the generated iOS application and using Apple’s radio button, I decided to implement my own radio button in Xamarin, which rendered natively in iOS. This seemed like a good choice that would become an advantage, but I also found a disadvantage, when making a minimum change on a Xamarin project, it must be recompiled to see the changes on the device. This can be time consuming if one wants to test various changes.


Conclusions

I decided to use Xamarin to build mobile apps because it was cross-platform. So most code would only have to be written once. And the projects generated by Xamarin were native. This is not the case on every cross-platform technology. The fact that the final projects are native is an advantage since mobile characteristics can be used.

Still, I studied native projects for Android and iOS to be able to modify the generated projects if something can’t really be done on Xamarin (I realized Xamarin does not support everything for every platform). Again, this can be done because Xamarin generates native projects.

In other words, I take advantage of Xamarin to reutilize code and generate fully native platforms to the extent it permits me, but I also know how to do it without Xamarin in case I really need to modify a native project. Xamarin’s implications are my strengths in programming. This is how I determined Xamarin was the best option for me when it comes to developing mobile applications.

It is important to note that the best option is a balance between the technical strengths of the development team and the implications of the technology. Xamarin with native platforms background was the best option for me, but I have a C# background.  Another developer could have worked faster with Ionic if, say, the developer is a master in AngularJS.

The Art of Coding: 6 Practices the Best Software Developers Use

software developersProgramming languages have been around for quite some time. When the first recognizable computer was created in the 1940s, programmers wrote hand tuned language programs; however, it was quickly realized that this approach to programming took quite a bit of effort and intellect. The 1950s saw the design of the first programming languages. Over the next 40 years, many languages were developed for software developers including: FORTRAN, COBOL, SQL, Ada, Eiffel, Wolfram Language, and C++.

The Internet Age of the 1990s brought the next historic period of history in regards to programming languages. During this era, programmers saw a rapid spread of functional languages, “rapid application development” languages, and scripting languages. After years of optimization and implementation, scripting languages grew to be the most prominent languages used on the World Wide Web. During this time, and over the last 20 years, Haskell, Java, Ruby Rails, and PHP grew in popularity and laid the foundation for the coding languages software developers use today.
In this day and age, programming languages are continuing the evolve and the most notable languages of the 21st century include C#, Java, CSS, and Swift. Software developers are working to make all development languages open source and increase functional programming support in mainstream coding languages.

Every software developer has a preference when it comes to the programming language they use. Regardless of if a developer is using CSS, C#, Java, Ruby Rails, or PHP – coding is an art. Like other arts, coding requires certain practices to ensure that the finished product is as perfect as possible. There are certain practices the best software developers use when coding. We’ve outlined six practices to follow and ensure coding is the best it can be in both form and function.

6 Practices the Best Software Developers Use

1. Keep Indentation Consistent

It is very important to pick an indentation style and stick with it throughout programming. There are multiple established approaches to indentation style, but the style a software developer chooses is not what matters. What truly matters is that the indentation style chosen is consistent. Consistent indentation practices produce coding that is easier to navigate through and allows developers to quickly address issues. If a software developer contributes to a project that has already established an indentation style, the best practice is to continue following that style.

2. Clear Commenting & Documentation

Thankfully, in the last 5 years, Integrated Development Environments have improved greatly. IDEs make it extremely easy to comment in the coding a software developer is creating. Comments help other software developers clarify what functions are meant to do within the coding which is extremely helpful in open source coding efforts or group efforts to develop software. There are many IDE options out there for software developers to choose from and there are also many tools used for commenting. While commenting can be helpful in coding, it is important to avoid obvious comments that could risk unnecessarily cluttering the backend of hte software.

3. Avoid Deep Nesting Techniques

Nesting code through tabbing can help to organize lines of coding, but deep nesting often makes code harder to read instead of easier. Deep nesting is the practice of using multiple tabs to organize lines of coding, but is often more confusing than clarifying. By reducing the amount of tabs in coding, software developers improve readability. This, in turn, allows coders to easily access and navigate code in a situation where an error needs to be fixed or a change needs to be made.

4. Limit Line Length

Like consistent indentation and avoidance of deep nesting, limiting the line length of coding can greatly improve readability. A great example of properly execute line length limitations can be found in newspapers. The human eye can more easily read tall, narrow columns of text instead of long, horizontal lines. A good practice is to apply this same methodology to coding, so the programming language is easy to read.

5. Organize Folders & Files

If a software developer wanted to, they could write an entire program in one folder; however, it would be a nightmare to navigate and keep up. The best practice is to use a framework or create a system based off of an existing folder and file structure. With an organized set of folders and files, maintenance and management of a software developer’s program will be much easier. An organized folder and file system will also be beneficial to other software developers who may join the project.

6. Complete Code Refactoring

“Refactoring” is a technological term for “cleaning up” and every software developer should practice refactoring code. The main goal of refactoring is not to fix bugs or add functionality. Instead, refactoring improves the readability, cleanliness, and quality of the recently developed code. The best time to refactor code is the day after it’s been written. This way the coding is still fresh and familiar to the software developer. After refactoring, it will be much more readable and reusable months later. A common saying in the world of software developers is “refactor early, refactor often”.

More often than not, software development is a group effort and it is important to implement the best coding practices for overall success. These six coding practices are a great place to start for software developers looking to improve their code quality. No matter what program language a software developer decides to use, these practices will improve the quality of the coding. By following the practices outlined above, the completed programming will be easy to navigate, change, and understand. This, in the end, will ensure success for the program functionalities and the team involved in maintaining and debugging the code days, weeks, months, and years into the future.

At Number 8, we are an experienced team of nearshore software developers who exercise the best practices in regards to writing and maintaining code. If you are interested in learning more about what we do at Number 8 or are looking for a job as a software developer, contact us today! Call us at 502-890-7665 or visit our Contact Us page here.

Kanban Versus Scrum in Agile Software Development

Kanban versus Scrum in Agile MethodologyThere are always new and different ways of software development. To stay relevant and efficient, it’s important for software developers to be informed about all the different varieties. The Agile Method of software development is widely accepted across teams. However, there are different processes within the Agile Method that are more or less appropriate for different projects. Below we break down the main differences between two popular forms of Agile: Kanban versus Scrum.

Agile Method

The basis of agile software development is that it can adapt over the course of a project. Instead of in-depth planning at the beginning of a project, agile methodologies allow for feedback and change. There are 12 core principles of the Agile Method that reiterate the idea of flexibility including:

Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage

Working software is the primary measure of progress

At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly

The main focus of agile is to produce a well-functioning product. So, in order to get there, companies enforce frequent face-to-face communication, teamwork, and accountability.

Within the realm of the agile method, there are other varieties of software development including Kanban and Scrum. You should choose between the methods depending on what kind of software that your team is working on at the time.

Kanban

Inspired by the Toyota Production System and Lean Manufacturing, the Kanban method follows visual queues to frame the development processes. The processes are adjusted based on what to produce, when to produce, and how much to produce. Kanban promotes small scale changes to already implemented processes so that developers can overlay the method on top of established workflows.   

As the Kanban blog explains: “Kanban is a technique for managing a software development process in a highly efficient way.”

Scrum

One of the most popular frameworks for the Agile Method, Scrum manages complicated software development. The method follows a set of rules that never change, including the roles of developers and the processes they use. These processes include “sprints.” Sprints are fixed-length iterations that usually span from one-two weeks. This structure allows for accountability, project visibility, and flexibility.

Kanban Versus Scrum

Both Kanban and Scrum help to simplify difficult developmental processes by breaking them down into smaller, more comprehensible parts. But, each method has its positives and negatives.

Scrum is more rigid than Kanban. Scrum requires teams to adopt a completely new way of developing software. Everyone will have to learn about the ceremonies, specific roles, and the iterations. Whereas with Kanban, teams will more or less be able to follow the same framework they are accustomed to.

When it comes down to it, there is no real winner in the fight Kanban versus Scrum. It all depends on your team and the project you’re working on. Both methods are efficient and successful and it should be up to you to decide which you enjoy implementing more.

At Number8, we all work to stay on top of the latest news in software development. Because we follow the agile method, we deliver top quality products. To learn more about the methods that we use, read our informational page here. And give us a call today at (502) 890-7665 for help with your latest project!

Common Mistakes Agile Software Development Teams Make

Common Mistakes Made When Using the Agile Method In recent years, agile methodology has become increasingly popular among tech development teams in part because of its adaptability. Teams are attracted to the flexibility within the agile method because it addresses the difficulty of trying to solve a complex problem through predetermined processes by allowing those processes to change throughout the course of the project. Rather than having to remain within a strict set of guidelines, teams are able to embrace more creative ways of problem-solving.

Since the agile method is still a relatively new approach for many teams, there are a few mistakes that occur consistently. If you are thinking of adopting the methodology, here are a few frequent mistakes to be cautious of:

Fear of Failure

One of the benefits of using the agile method is the freedom to fail. It seems counter-intuitive to strive for failure, but often it will guide you toward success. If you focus all your energy into believing every project will be a success, you could potentially waste time. It is important to admit when something isn’t working so you can instead bring your attention to finding a solution or a new approach.

Overcrowding

Teamwork is extremely valuable when it comes to tackling a new project. However, having too many people working on the same thing can quickly become counterproductive. You should assign employees to a project based on its estimated time-frame and how demanding the work may be. Sometimes a project only needs one or two people; others may require the brain power of your whole team. Be attentive when working with large teams. Don’t let employees lose their voice or have their ideas overshadowed by their coworkers. Working in a team should promote collaboration rather than competition. 

Not Consulting with Clients

A client’s opinion should be just as important as any team member’s. Not including your client in the development process could allow for problems that will force your team to back track and lose valuable time. Ultimately the success of your work is dependent on the satisfaction of your client. Without involving their input, you could create a product that fails to fulfill their needs. After each new progression, you should be checking with your client to ensure they are in agreement with the direction of the project. 

Waiting Too Long to Test

Efficiency does not always look the same. In terms of agile development, the focus should be on building a quality product and ensuring its capabilities rather than on creating a product quickly. You may save a few hours if you eliminate testing in the beginning, but they are sure to catch up with you when the product fails to function properly later on.

Lack of Skepticism

Using the agile method is attractive not just for its flexible qualities, but also because it is new. It is important to remain critical and thoughtful when using new software development approaches. Just as the waterfall approach is starting to be scrutinized a little more heavily, the same will surely happen to the agile method. Take a note of advice from the agile method itself and remain flexible. Analyze each assignment on an individual basis and decide what method would be most appropriate based on the details of the project. Don’t just believe a project will succeed solely because its development has been based on agile principles.

Number8’s Agile Method Software Development Team

At Number8, we’ve been in the business of software development for almost 20 years. Our on-shore and off-shore developers are familiar with the agile method and mistakes are both few and far between. If you are in need of an agile method software development team, contact us today. We can provide high quality IT talent to your business no matter the size or sector.