There are 2 main challenges in Scala software development: the specialists are difficult to find and their services are not cheap. At the same time, these are 2 main reasons for building the product with offshore Scala developers. When timing matters, you need to cut costs and the programming talent is scarce, it’s high time to look for an outsourcing provider.
Scala has good chances of becoming a leading technology in the enterprise in the nearest years. This also means that the demand for Scala developers will only rise, even though it ranks 32nd in 2016 TIOBE Programming Community Index. We’ll see whether the supply will meet the demand soon but finding Scala specialists is not the main challenge. It’s also important to choose experienced developers you can trust to build your product. So let’s go over the main criteria for selecting offshore Scala programmers.
Indeed.com job trends: Scala and related technologies
Portfolio and references of Scala developers
Many big brands choose Scala for developing their software. It’s an excellent choice if you have a big project and need to think about infrastructure cost. It’s been used to build the high load systems of Twitter, The Guardian, UBS, Sony, Novell, Netflix etc. Twitter has started migrating to Scala from Ruby at some point for a reason. Yellow Pages were able to considerably reduce the number of servers after they’d adopted this programming language.
This means that Scala developers you’re thinking of hiring are likely to have experience in building high load and high-performance software. Their portfolio can say a lot about the expertise they can offer you, so study it very carefully. In addition, you may ask for references or try to find some feedback on their work in the community forums.
Functional programming background
Scala engineers need to be well versed in functional programming. Without this basic skill, reactivity won’t be of much use. Therefore, you may check whether they are familiar both with theoretical and practical aspects of functional paradigm. Here are some questions you could ask at the interview:
- What is Monad/ Functor/ Applicative functor/ Monad transformer?
- What is a higher-order function? How can they be combined?
- What is a side effect? Why do you need to avoid them?
- Can you explain Try, Option, Either and Future? What side effects do they encapsulate? What do they have in common?
- What is Union type?
- What is immutability? What are the benefits of immutability?
- What is pattern matching and how to use it?
- What is adhock polymorphism, typeclasses and why are they useful?
- What is tail recursion?
These might seem like basic theoretical things in functional programming but any Scala programmer who can write a good code will know them.
Developers’ expertise in Scala
You’ll hardly find a developer who has started his career with Scala. As a rule, they already have extensive experience in other languages like Java, and at some point decide to level up and learn Scala. You might look at their previous experience in other programming languages but keep in mind that this is not enough to write good Scala code right away. Check if they know such basic things:
- What is Option in Scala? How is it used?
- What is the difference between Null, Nil, None and Nothing?
- What is Future/ Promise?
- How does collection work in Scala?
- Explain the difference between ‘concurrency’ and ‘parallelism,’ and name some constructs you can use in Scala to leverage both.
- In which cases do you use Play framework?
- What are the benefits of Scala over Java?
Another important aspect of programming is the code style. Knowing the language is one thing but the ability to write a coherent neat code is what every development client should look for. People on the project might change, in some time you might need to continue the work on your code. So make sure other developers will be able to pick it up and support your product in the future. It’s especially critical when you don’t have your team in-house and work with offshore specialists.
It’s worth noting that programmers who have been coding in Scala for a while tend to be active in the Scala community. When you have to solve some problem, your fellow developers will be the first people you’ll address. Eventually, you start giving back to the community too. So it’s a good idea to find out whether the specialists you are considering for your project are active on Stack Overflow, for example.
Another way to go is to ask to review their code on GitHub. If you’re not a tech person you may hire a specialist to do that.
Finally, the programmers you are interviewing have to be familiar with reactive databases. This is an indispensable part of Scala programming which helps you to achieve the main thing you’re looking for in this technology – unprecedented performance.
Experience in Scala libraries and frameworks
Scala can’t be written in isolation, it’s usually combined with various libraries and tools. If the developers you’re interviewing have practical skills in this language, they will know a few things about Play Framework, Akka, Spark etc. As for the libraries, you might want to check the their knowledge of ScalaZ, Cats, Slick, Lift, Monocle, dispatch.
The frameworks and toolsets will actually differ depending on the product you intend to build. For a web interface, your developers will use Play framework and Slick for database access. For the low-level interfaces like TCP and UDP, you’ll definitely need Akka. If you want to develop a high load financial system (like the banking platforms discussed in this post), the programmers need to know Akka and have very good understanding of distributed software programming. In Big Data projects, they will work with Spark framework.
As Play is apparently the most widely used Scala framework you may ask a couple of questions on it, like:
- What is dependency injection?
- How do views work in Play? How does views compilation work?
- How does routing work?
- What is layering architecture?
- How to parse Play and JSON?
- How to work with assets in Play framework ?
- What is sbt-web ?
Communication with offshore Scala developers
Effective communication with your offshore developers is what will really define the success of your project. You need to take into consideration such aspects as the type of cooperation, the size of the team, the location of the development provider, time difference, cultural peculiarities etc. It’s also worth checking developers’ level of English.
Even though Scala is often used for big waterfall-like projects, we’d still recommend to take Agile approach and use Scrum as the main development methodology. It lets you to always stay in touch with the team and control the quality of your software. Therefore, your Scala developers need to feel comfortable with iterative work. Ask them about the workflow in the previous projects and how they maintain communication as a remote team.
Another factor which will define the type of your relationship with offshore Scala developers is the type of cooperation. In most Scala projects, there’s either a tech specialist on the client’s side or they want to supplement their team with more developers. This outstaffing model allows to mitigate the outsourcing risks. It’s a difficult technology and at some point, the code gets so complicated you can’t check its quality. Therefore, oftentimes important technical decisions are taken on the client’s side. However, if you find the developers who will meet all the aforementioned criteria, you can easily move the whole project offshore.
All things considered, you’ll have to go through a lot of thinking before choosing an outsourcing provider. With the standards set, it’s going to be much easier. We believe that Scala is the technology worth the time and effort. There are some great Scala teams in Eastern Europe that can develop quality software for a reduced cost. We hope this list of criteria will help you to find the right fit.