From challenges to achieving goals – building a complex solution takes time and effort in order to seize all opportunities and deliver a high-quality product. Thinking about all the aspects you have to handle when developing software or making changes to existing ones can be a little overwhelming. Especially when a solution that used to work doesn’t fit your needs anymore and bottlenecks give you sleepless nights. Picking the right partner to help you manage this is a hard nut to crack. Maybe it’s high time to ask other companies about their own experience and recommendations?Read more
We’ve learned our lessons, made mistakes and won battles. Now, we’re here to help you and pass some wisdom and practical tips about mastering the CTO’s role.
If you have already decided on IT outsourcing, the main question you may ask yourself is: should I choose offshore, onshore, or nearshore software development? While considering all of the options, you will probably always consider quality versus cost. This is a natural way of thinking, and you are not alone.
Making decisions about IT outsourcing is nothing new. According to a Statista report, this sector generated revenue of $66.5 bn globally in 2019 alone. This shows how huge the market is and that tech companies are not afraid of moving some responsibilities to other countries.
If you are a CTO or project manager in this group, you have to choose the best value-for-money outsourcing alternatives. The options you have include onshore, nearshore, and offshore software development. What do these terms mean? You will find brief definitions below, but fortunately, we have prepared more than just that. Read on to learn more about opportunities related to these three types of outsourcing.
What is nearshore software development?
Basically, nearshore software development is outsourcing work to a neighboring country or another not too distant location. For example, UK-based companies frequently choose software development teams located in Poland.
Advantages of nearshore software development
- Better communication – by choosing nearshore software development, the time difference won’t be more than 2 hours. Thanks to being located in similar time zones, it’s easier to maintain communication between the internal and external teams.
- Similar cultures and languages – thanks to nearshoring, both teams don’t have to face cultural or language problems. Neighbors can usually better understand local workers and avoid communication mistakes.
- Competitive prices – the average local wages of programmers, for example, in the United Kingdom and Poland differ a lot. This difference may be a big enough reason to choose nearshore software development.
- A huge choice of options – by passing on some work to nearby countries, you extend the pool of professionals. Of course, you need to assess their technical skills, but you are not limited to employees on the local market.
What is offshore software development?
Offshore software development means outsourcing work ‘beyond the shore’, far from the home country. For example, if a tech company in North America chooses to cooperate with a team from Europe or Asia.
Advantages of offshore software development
– Real cost savings – the most appreciated benefits from offshore software development are financial savings. You may find information on forums, for example, that some companies can achieve even a 70% cost reduction. This refers mostly to North America, where the wages of developers are the highest.
– Skilled workers – instead of searching for candidates on the local market, you can have quick access to programmers in distant countries. An interesting report prepared by HackerRank may serve as a great guide on where to look for them. It presents 50 countries with the best programmers. The coding skills in this research were rated according to work accuracy and speed.
– English-speaking professionals – in some countries, you may expect very high proficiency in English from software developers. To carry out research you can use a report prepared by EF, in which you can find the countries with the best English language skills. It shows that out of the 14 best English-speaking countries, Poland is among the top 10 European countries.
What is onshore software development?
Simply put, onshore software development is domestic outsourcing. Hired employees could be from the same city, or any other part of the same country. In this case you shouldn’t expect cost savings, but rather the possibility to manage projects on time with extra workers.
Advantages of onshore software development
– An Easily reachable team – with the external team located in the same country, communication should be smoother. This is possible thanks to the same working office hours.
– Culture and language matching – with onshore software development, you don’t have to worry about communication problems. Workers from the same country and speaking the same language have the best chance of getting along.
– Interviewing programmers in person– instead of working through a project manager, you can invite and test programmers’ skills yourself.
– Savings on traveling – having workers close to home doesn’t require traveling to a third-party company. This is actually the only cost-saving possibility when choosing onshore software development.
Remote software development on the wave of growth
The development of IT outsourcing is a result of a growing demand for IT services and a talent shortage. For example, in 2019, unemployment rates for the US tech sector fell to a lowly 1.3%. The labor market is in high demand, and finding IT professionals isn’t a piece of cake. This is confirmed by another piece of research conducted by Indeed, according to which 86% of hiring managers and recruiters find it challenging to source and hire technical talent. Furthermore, over a third (36%) think it is “very” challenging.
What’s also interesting is that in some regions that are the world’s biggest tech hubs, such as London or New York, finding a developer without help from HR agencies is an extremely demanding task.
Domestic markets have become a competition between local tech companies, and as a result they are forced to look for alternatives. Outsourcing therefore seems to be an inevitability for being able to manage projects. Even a report prepared by Statista reveals this. Over 45% of respondents from IT companies say that the reason for IT outsourcing is that it provides access to skills that are not available in-house.
Top reasons for technology outsourcing worldwide 2018
Offshoring: Quality versus Cost
Successful offshoring will be the result of a thorough analysis before choosing a service provider. But the choice won’t necessarily be the same for each company, mainly because different tech businesses face different constraints. Some of them will have more problems with finding programmers who are skilled in a given technology, while others will be hampered by budgets.
Regardless, all CTOs and Project Managers who consider offshoring will need to create a checklist in order to make the right choice of external company. And we have an example one for you. Those elements, when well-analyzed, increase the chances of a successful cooperation with the external team. Those factors should be prioritized in line with the company’s goals and limits.
Key decision factors:
Company’s location – this will impact communication and meeting options. Consider what time-zone flexibility you can accept and for which projects.
Project Quality – this category may cover a few areas. For example, paying attention to customer requirements, on time and on budget service delivery, or previous client recommendations. All of those elements will show you whether a project is likely to be delivered according to your standards.
Technical skills – without skilled workers, any project might be a failure. Check up on workers’ technical certificates and their involvement in the IT community. You can also verify GitHub profiles to see employees’ coding skills.
English proficiency – language skills may affect communication matters. That’s why you should ask about workers’ English certificates or the possibility to arrange online interviews with project managers. You can also check whether the outsourcing company has previously worked with English-speaking countries.
Experience – you need to check the team’s experience in a particular type of software technology or industry. Thanks to that, you may expect a piece of advice on similar functionalities for your company’s use cases.
Cost – if you expect some savings, you should incorporate employees’ benefits, insurance, and travel allowance to the chosen countries.
Communication and transparency – key factors of successful remote software development
Whatever type of outsourcing you choose – nearshore, offshore, or onshore software development, you need to take care of efficient collaboration.
This requires engagement on both sides.
The common saying at Scalac is: “we work with a client in two teams, but in reality we are one team in two locations working on one product or project”. With such an approach, both parties are involved enough to solve problems and get the most out of the available technology.
Any challenges the teams face may be smoothly addressed thanks to effective communication. Let us show you a few tips on how it may support the remote software development process.
- Plan working methods
Agree who will be a contact person on your and the external company’s side. Both sides need to confirm acceptance procedures, paths and working methods. At this point, you should start setting the rules of cooperation. Then you can always refer to the agreed arrangements at later stages of the project in case one side doesn’t stick to them.
- Take care of transparency
You need to create a culture that makes the collaboration clear. In order to achieve that, you should ensure that both parties are on the same page. For example, facilitate introductory meetings to show the bigger picture of the project. Arrange feedback calls to sum up the results of the cooperation at certain stages.
Use productivity tools that enable tracking of tasks and working hours of the external team. Thanks to these, both the client and the outsourcing company can have a clear view of the progress.
- Communication tools.
Passing information about specifications, requirements and bugs in the code requires smooth communication. You will find many apps that help with arranging online meetings or video chats, facilitating project management, and sharing documents. Most tools are quite similar when it comes to their features. That’s why software development companies prefer to use one or two of the same type. For this reason, you should confirm with the outsourcing company which tools they use and, if necessary, have them agree to use your internal apps.
Where to find high-quality software developers at a reasonable price?
The choice of software development companies is as wide as the sky. But over recent years, some countries have become real leaders in delivering software. This has happened mostly because they meet several of the criteria from the above list. To give you an example we should mention Poland.
#1 Coding skills and achievements
HackerRank classifies Poland as the third-placed country when it comes to coding skills. In the same study, Polish programmers ranked first in Java assessments. They were also listed in the top five for other mainstream programming languages like Python, Shell, and Ruby.
The Scala language is getting more popular in Poland as well. On LinkedIn, there are over 3,200 profiles of Scala developers located there. There are even professional companies like Scalac that offer programming services based on this language. You can check out this top software development company on Clutch.
We should also remember about some famous Polish minds in the tech world, who are working for the leading US companies. For example; Nathan Blecharczyk, the Chief Security Officer for AirBnB; Leonard Bosack, the co-founder of Cisco; or Piotr Szulczewski, the co-founder and CEO of the Wish platform.
#2 Environment for skills development.
In addition to this, two of Poland’s largest cities, Warsaw and Krakow, were also included in the top 50 cities on the Tholons Globalization Index. This means that, thanks to emerging innovations, the available startup ecosystems and digital transformations taking place there, this country is a great place to develop coding skills.
English is also the second language that most Polish people learn from primary school. They also tend to travel a lot and have a more Western mindset. These factors probably all contribute to a great command of English among Poles.
#3 Adjusting to the clients’ needs
Software development services have become a Polish national specialization. There are over 700 Polish software development companies on Clutch.co, which is the leading ratings and reviews platform for IT services.
This position was also reached thanks to a great flexibility from Polish teams in terms of cooperation. For example, if North American companies start working with Polish teams then they have to make some accommodation for the different time zones. However, there is still enough overlap of working hours to enable a collaboration and to set up meetings. External teams usually adjust to the clients’ work time without it being a problem for them.
Due to the difficulties of finding IT professionals in most technologically-developed countries, outsourcing software development is now often a must, or at least the best alternative option. As workers around the globe can have a similar skill set to local experts, remote cooperations will soon be a world-wide standard. The growing demand for new technologies will only speed up this transformation.
What’s interesting is that such collaborations have stopped being perceived as just a method for cost reduction. Today, it is simply the preferred way to manage IT projects on time.
If you have already decided to outsource tech work, be sure to take your time over choosing the outsourcing option that best fits your company’s needs. This will help you avoid communication issues and, therefore, project delays. Hopefully, this article will help you to make a sensible decision.
Sometimes, buying an already existing solution for your company is not enough. It doesn’t have the features you need, or it doesn’t work well with your tech stack. Or maybe existing options on the market are very limited, and you need software built from scratch. Since you don’t have the time or personnel necessary to build this kind of tool yourself, you have decided to ask a software development company for help. You have prepared a list of requirements for your solution, picked a software company, and booked a meeting.
Now, it comes to the most critical part – picking a cooperation model. The consequences of choosing the wrong type of contract for your business can be severe, from having no way of changing or replacing features, through ending up with a rushed or unfinished product, to going way over your budget. Therefore you must think carefully about the type of contract that will suit your needs best.
At Scalac, we offer three different cooperation models:
- Time & Material
- Fixed Budget
If you are wondering which of these cooperation models would be best for you then you’re in the right place. In this article, we will take a look at the three aforementioned contract types and how they work.
We’ll also mention which types of projects work best with each model in order to guarantee that you will receive your ordered product on time, that it does exactly what you wanted, and without straining your budget (or nerves!).
What is the Fixed-Price model?
A Fixed-Price cooperation model works just as it sounds. You pay a lump sum of money to the developing company in exchange for specific results being delivered. It’s one of the most popular cooperation models because a fixed-price contract makes companies feel safe and secure. They have a set budget and thus are guaranteed not to pay anything more than that for the project. If a company needs to strictly plan their budget and expenses, this cooperation model admittedly sounds attractive.
What’s more, there’s a “set in stone” deadline by which time the client is “guaranteed” to be presented with the ready product. And with a detailed plan including goals and milestones, they can easily track the progress of the project. There’s no need for the client to supervise the project either, so everything sounds clear and predictable. If your project is a small one, with clearly defined features and little risk of things changing, a Fixed-Price model might be what you need.
How does the Fixed-Price model work in practice?
Let’s say you need to order a cake for a parent’s birthday. You asked them what type of cake they would like, and they definitely want a chocolate chip cake. So you call a bakery and order a chocolate chip cake. The bakery then asks how big the cake should be and gives you a price for the chosen size. You pay for the cake that you want and the bakery delivers it on the due date. This is exactly how Fixed-Price cooperation models work – it’s all pretty straightforward when it comes to simple products. However, this type of contract also has several drawbacks.
Imagine a different scenario. You have already ordered a chocolate chip cake, but then your mother calls and says she would prefer a strawberry sponge cake instead. Can it have a different text on the icing too? You call the bakery to change the order, but they refuse. Since they have everything ready for the chocolate chip cake, they can’t change the order. They can only make a second cake, for which you will have to pay extra. They could add the text to the original cake, but that will also cost you extra.
Project models work in a similar way – if you have a detailed plan and a list of guidelines that you are certain won’t change, a Fixed-Price model is an option to consider. However, Fixed-Price contracts also have a number of flaws.
Fixed-Price contract disadvantages
At some point during your project, you might learn that you won’t need one of the features identified in the contract, but you will need a different one. You also need a newer version of API, and support for the new system. With a Fixed-Price cooperation model, changing the scope of work requires additional procedures and usually the formal flow too. For bigger changes this is justifiable, but for small adjustments the overhead on the formal flow makes the work much more expensive. This is because a task that only takes a developer a few hours has to firstly be discussed with management, some risks assessments have to be added to the estimate, then quality assurance, a code review, and deployment, etc., have to be completed too. That means you will have additional paperwork and will also need another meeting with the development team just to discuss the changes, which might endanger the deadline (and your budget).
Before choosing a fixed-time contract you need to schedule a meeting with the development team first, during which you will discuss all of the project specifications. These must be crystal clear to both you and the developer, so you need to plan down to the finest details. You also need to discuss all actions that the development team should take along with possible risks and pitfalls, so bear in mind that you might need several meetings just to have everything specified and accepted. Otherwise, it might be that the final product isn’t exactly what you hoped it would.
There’s also another problem that can occur with fixed-time models. That is the more complicated the project is, the higher the chance that problems will arise. Regardless, the software company is bound by the deadlines and the budget is set in the contract. In a rush to adhere to the schedule, the development team might cut corners and produce a barely usable product.
When can you safely choose a Fixed-Price contract?
- It’s a small or medium sized project or an MVP
- You have clearly defined your needs and expectations to the developers – and by clearly we mean you’re able to outline the user’s path step by step and you have some experience in writing user stories
- The project requirements won’t change
- You have no need or time to have meeting sessions with the development team
- There’s little risk of development problems happening so you can hand over all control to the developers
- You have a limited budget for the project, or you need to get the project budget approved first
- You are not interested in the time taken but in deliverables, which means that sometimes the project is finished faster but you are still charged the estimated amount
What is the Time & Material model?
The Time and Material model works on a completely different principle than the Fixed-Price model. In Time and Material, rather than pay a fixed sum right at the start, you pay the software team for the hours of work needed to finish a given project and for all of the materials they use. This type of cooperation model is useful when you cannot accurately estimate how much the project will cost or how long it will take to complete, so there’s no set price or rigid deadlines for the team.
What are the biggest advantages of T&M contracts?
The most significant advantage of a T&M cooperation model over Fixed-Price models is that you retain much more control over the project. You can also change elements of the project when needed. If you don’t yet have a detailed vision of the product as a whole, the Time and Material model is also a great pick.
With this type of contract, you can decide in which direction the project should go as it progresses. If there’s a sudden need to rework some parts of the project then simply add new features, or if an unexpected issue arises then the T&M model allows you to adjust the work schedule as required. The development team can also start working straight away, even if they (and perhaps you) don’t know all of the project details yet. Those can be discussed in later meeting sessions.
How does it work in practice? The whole project is divided into smaller tasks that each have an estimated time, workforce, and cost. When you agree with the price quoted, the development team can start immediately. During the project, there will be several meetings with the team during which you can add suggestions and ask for modifications. This way, at the end of the project, you will receive a high-quality product that exactly fits your needs.
Things you should consider before opting for a T&M contract
It all sounds great, but the main thing that might worry you here is the budget. How can you control the amount of money spent on a project without a defined price set in the contract? And if you are paying the team for the hours they spend on your project, won’t the final cost turn out to be much higher than the initial budget?
Controlling the budget of a Time and Material cooperation model is actually much easier than you might think. Each task in the project comes with an approximate cost, so you can estimate the project cost in advance. To make controlling the budget more manageable, you will also be sent regular detailed reports about how much time the development team has been working on a given task, how many people were involved, what materials were purchased, and any other extra costs.
Controlling the progress of the project might be a bigger problem. A Fixed-Price model allows you to leave all of the work to the developers until the product is ready.
Time and Material, on the other hand, requires constant supervision of task progress, materials used, and budget spent, as well as frequent meetings with the development team. Monitoring is especially important since there’s no definite deadline in the contract, and you don’t want a six month project to turn into a year. You should also keep in mind that, unless there’s some bonus in the contract to be paid if the development team finishes ahead of schedule, there’s little incentive for them to finish the project early.
We work on because most of the clients we are working with have problems in stating their all requirements upfront.
When should you choose a T&M contract?
- It’s a complicated or long-term project
- You don’t know the full scope of the product, only a basic description
- The requirements or needs are likely to change
- You want to have full control over product creation and development
- You need maximum flexibility
- You want to pay for spent time only, as compared to a Fixed-Price model it is the most cost-effective solution for long-term projects with changing scopes
Fixed Budget/T&M with cap
If you are still worried about exceeding the budget for the project, there’s a third cooperation model we can use called Time and Material with a cap. This is the same as a regular T&M contract but with one change, which is that the contract specifies an upper limit of cost that you will not have to pay more than. If the cost of the project rises above the threshold, the development company will cover the additional outlay. This way, you can have all the benefits of a Time and Material contract without the risk of the project cost being far higher than expected.
Fixed Budget/T&M with cap is very well suited for companies that have a very dynamic change of priorities, but still need to keep control over their budget. The key difference between typical Time and Material and T&M with a cap is that Scalac takes care of budget control. Scalac monitors the costs, reports how far we are with the progress, and identifies risks if the scope of the project is not delivered in line with the provided plan. The key difference with the Fixed-Price model is the fact that Scalac allows clients to introduce changes to the scope of work dynamically and recalculates the available budget accordingly. If the budget needs to change, Scalac reports this as soon as possible and reacts on-the-fly to the client’s decisions. This model is the most collaborative and provides the greatest value to the client.
Fixed Budget projects have the same benefits as the Time & Material model, plus:
- our Project Manager takes care of budget control
- they are also in charge of managing the work-load to keep all members focused and at full speed as much as possible
Both cooperation model types have their advantages and drawbacks, so each one works best for different types of projects. If you have a small project with detailed guidelines or when you are sure that no changes will be needed, a Fixed-Price contract is a good option. You will know what the cost of the project will be in advance, and your product will be ready on the due date. However, you need to be prepared for unexpected issues or errors arising that might either postpone the deadline, result in additional costs or leave you with an unfinished product.
For larger or long-term projects, a Time and Material contract would be a better choice. It offers flexibility and control of the product creation, while also helping you to stay within budget. There’s no precise final price or deadline date though, so you need to keep an eye on both the costs and project progress. T&M also relies on frequent contact between your team and the developers, so you’ll be spending a lot of time in meetings.
If you are still in doubt about which project model would be best for you, we’re here to help. Contact us today and we’ll find the cooperation model that will work best for your needs.
Cloud computing, remote work, digital transformation, and startups. These are precisely the things I’m going to be talking about in this article. No bolt of lightning struck me with this idea, just a talk I had the pleasure to listen to one beautiful Monday while drinking my morning coffee. You can find it here. Mat Gren, Head of Business at Scalac, in a comprehensive conversation with Pawel Gieniec, CEO at Cloud Admin (Scalac’s client for almost three years) on the technological shift that has accelerated enormously from February 2020, when COVID-19 turned the world upside down.
So let me fill you in with the context of their discussion and take the conversation a few steps further. Let’s dive in!
What you need to know about cloud computing
Before we start, let’s first cover the basics.
On-premise vs. Cloud
The difference between Cloud computing and on-premises software is quite significant. A company can either host everything in-house in an on-premise environment, or in a cloud environment, with a third-party provider hosting everything for you. However, you can also rent a colocation service in a company and still be on-premise. In the cloud you do not need to manage physical machines, the provider gives you the ability to operate on them (e.g. by setting up a virtual machine). After all, the important thing with Cloud is scalability on demand. You just say “I want X more machines” and they give you X more machines. You don’t have to worry about the availability of resources.
Private Cloud vs. Public Cloud
Nowadays, most enterprises adopt cloud computing to store their data and run applications without building and maintaining any further on-premise IT infrastructure. Enterprises have different options for implementing cloud computing. The cloud computing implementation models can be divided into two broad categories — public cloud and private cloud (actually there are two more types: hybrid and community cloud, but in this article, I will be focusing on the first two). An enterprise can opt for a private cloud to utilize computing resources exclusively through dedicated hardware, software, and network. Private cloud is primarily a solution for regulated sectors like finances, where all possibilities of access by unauthorized users must be eliminated
On the other hand, the enterprise will have to share computing resources with other subscribers if it opts for the public cloud. The public cloud service provider will make hardware, software, and support infrastructure available to the business. But the company will have to share it with others. That’s why it’s crucial that enterprises well understand the differences between a private cloud and a public cloud.
Case Study: Building a Successful Business on the Public Cloud
Pawel Gieniec used to work at Zynga as a Principal Software engineer and the CTO of Draw Something Franchise. Zynga was the first and the fastest company to prove that you could build a successful business on top of a public cloud. They were 80% of AWS back in 2010-2011, to the point that Amazon refused to sell them any more servers because it tapped Amazon out.
Zynga is a great example that you can build a successful company on top of a cloud. “I think it was CityVille where we launched and within one month went from a few thousand people playing into a hundred million people. So that is what I mean by rocket ship”. So how does the cloud work in cases like this one? The cloud might not always be the only solution, but it gives a lot of flexibility. You can scale it right away and go from a few thousand users playing a game to 100 million in 30 days. In Zynga’s case, it was all on AWS, consistently ranked first among cloud infrastructure services.
What do cloud computing, remote work, and digital transformation have in common?
Digital Transformation – relying on cloud infrastructures – is the new normal
According to Pawel, at the beginning of the COVID-19, the public cloud represented three percent of the IT industry. Ninety-seven percent were either on-premises data centers or private clouds. In December 2019, Andy Jesse, the CEO of AWS, announced officially that AWS was getting into the data center market with AWS outputs. There are sometimes reasons why companies can’t leverage the public cloud, so now Amazon can ship you servers to install into your data centers for you to leverage AWS services.
However, when COVID-19 shook the world, the internet was hitting a record level of traffic. This accelerated people’s adoption of either moving out into companies dedicated to managing data centers or into the public cloud. But at the same time, people realized that relying on on-premise data centers had a problem; they couldn’t buy masks. Why? Because the servers were not ready to handle this amount of traffic and scalability, especially quick one is definitely not the strongest point of on-premise services. There were problems with buying the right chemicals to disinfect data centers if somebody got sick.
In general, the data centers weren’t designed to handle a global pandemic. When companies built them, they thought only about natural disasters such as floods, earthquakes, tornadoes. To avoid those dangers, they spread their servers across the country or countries. However, a global pandemic was something they hadn’t anticipated. In this situation, it turned out to be the very opposite of a cost-effective way to manage your data.
Cloud computing and the future of remote work
Implementing cloud computing within an IT infrastructure makes it easier to enjoy the benefits of remote work. On-premise systems often require complicated security profiles for data to be accessed by a third party. With cloud-based data hosted externally, it is easier to give access to a third party user. This makes remote work, and any kind of outsourcing easier.
Some cloud services that you’re definitely familiar with are Google Drive or Dropbox. These are examples of cloud storage spaces for data synchronization – files that are stored in these systems are available to the account owner from any device connected to the Internet. And you can easily share them with others.
Employees can access documents and data that they need by using dedicated credentials (to maintain security) while still giving them the flexibility of working from wherever they want. This can be especially useful when you have multiple office locations. But what’s most relevant is that cloud computing is great for scalability and growing your businesses. You can quickly scale up or down without losing the money you otherwise would have invested in hardware or software. This is also ideal when you have a restricted physical office space. We believe that the size of your office should not determine the size of your projects.
CD vs Spotify – The future is now
The thing with cloud computing could be compared to keeping media locally on hardware such as CDs. Most of us do not listen to music on them that often anymore or do not use CDs at all. We turn on platforms such as Spotify where the resources – songs – are in the cloud, without any influence on our local, limited memory in smartphones. We also watch Netflix – without the need to carry flash drives with movies or buying additional equipment other than the computer we use for all the other things.
Finally, there’s software. No more Microsoft Office or Adobe installed locally for most of the private users. Also, very popular and trending in the small and mid-sized companies. The software subscription payment model is the most popular one these days as it lowers the cost of the software and enables frequent updates without the need to buy and install new versions.
Remote work – from Blockchain to COVID-19
Around the world, more people than ever are working remotely. While the COVID-19 pandemic has triggered a massive migration away from the traditional workplace, the evolution of remote work began way before it. All the way from the world’s first offices to the social and technological shifts that have spawned a remote revolution.
A short history of remote working :
- The first personal computers hit the scene in 1975.
- In 1979 IBM allowed five of its employees to work from home as an experiment.
- By 1983, roughly 2,000 IBM employees worked remotely.
- Also, in 1983, the internet was born. According to Flexjobs, between 2014 and 2018, the number of fully-remote US companies jumped from 26 to 170.
In the meantime, in 2009, Nakamoto implemented Blockchain technology as a core component of bitcoin, the first-ever cryptocurrency. According to Pawel Gieniec, this might have had a significant impact on remote work, or rather on the media image of remote work.
I think that one of the things that have probably made a significant impact is blockchain. With teams that are building any kind of technology on top of a blockchain, they’re just naturally distributed, and I think that mentality of ‘hey you need to have you know an office or like multiple offices right where people can come in and talk’ – it’s no longer there.Pawel Gieniec, Cloud Admin
What Blockchain started in the remote work department, COVID-19 has taken to the next level. But as you can see, it has only sped up a process that was already happening. Nevertheless, some people are still skeptical about remote work, especially when working with a remote team extension. In reality, these are more myths than real fears that business leaders have. For example, the myth of startups that are afraid their company culture will suffer.
I think the startup mindset there’s a lot of you know people that hire friends of friends to help them out with one task or help them build some MVP, so I don’t think that’s any different you know whether you utilize an external company or some friend network.
Pawel Gieniec, Cloud Admin
Does every cloud have a silver lining?
While Cloud computing is not the answer to every problem, it still has a lot to offer. Sometimes people get the wrong idea of its capabilities, whereas the main obstacle often lies in strategy rather than in the cloud itself.
According to Gartner, most leaders, when asked about their cloud strategy, admit that they don’t have any formal cloud strategy or that their plans are mostly focused on adoption/migration and implementation.
A cloud strategy is critical for every organization, regardless of where it is in its cloud journey. Moving to the cloud without a cloud strategy results in ad hoc adoption patterns, higher costs, disjointed management, security vulnerabilities, and overall dissatisfaction with cloud outcomes. Whereas a solid cloud strategy can reveal what unfulfilled potential may lie on the horizon for an organization, on top of all the technical benefits.
So if you’re thinking about investing in Cloud Solutions, get in touch with Scalac today. We can help you decide whether it’s the right solution for you. One that can match your needs and help you develop a comprehensive strategy that will cover your short-term and long-term goals.
Stay competitive thanks to the digital transformation.
How Covid-19 Showed Us The Importance Of Big Data In Medicine
Big Data and modern programming technologies have been indispensable for years, affecting almost every area of our lives – from commerce, finance marketing to aviation, and crime prevention. The biggest potential of Big Data and new technologies can be seen when it comes to reducing the costs of doing business, allowing faster access to information, and improving management.Read more
Say that you’re going to work on custom software development. You have an amazing idea, but when it comes to execution…
Custom software development is not always a bed of roses unless you find the right software development company for your project.
You may fall for recommendations, reviews, and ratings, but you should also trust another R factor – Research. No matter what you choose, it’s good to have a list of 5 features to consider when making up your mind. And we’ve created exactly that for you.Read more
Since functional programming evolved from lambda calculus and has its roots in academia, it was initially discussed in scholarly contexts. It’s no longer the case. Even though significant technologies associated with functional programming (such as Lisp or Scala) were created at universities — FP is making its way to the general “software development discourse,” and some might say that it’s taking it by storm.
Despite the rising interest, however, not many articles on the web seem to tackle the benefits of functional programming for business. Let’s face it: hacking a new technology in spare time is great, but there’s always a practical side to business when it comes to trying out new things and having a good reason for that. And that’s precisely what we’re about to cover in this piece.
Here’s what functional programming is, and why does it matter for your business.
What is functional programming in the first place?
Functional programming (FP) is a programming paradigm, a certain way of thinking about software development that’s based on a few defining principles. In the case of FP, these key principles are as follows:
- Binding everything in pure mathematical functions. The purpose is to look for simple, repeatable actions that can be abstracted out into a function and then built upon to create more complex features.
- Immutable, unchangeable data — which means that you should rather create new data structures, not altering the ones that are already in place. For example, if you want to modify data in an array, you need to add a new array with the updated value instead of making changes to the “original” one.
- Declarative code. The main focus here is on what to solve, rather than how to do it.
- Statelessness. Functional programs should perform each and every task as it was for the very first time, without any knowledge of what happened (or not) earlier in their execution.
- Recursion. There is no “for” or “while” loop in functional languages, iteration is implemented through recursion. Basically, recursive functions repeatedly call themselves, until the base case is reached.
Functional programming vs OOP (Object Oriented Programming)
Speaking of programming paradigms, you might already be familiar with another one that’s still more popular: object-oriented programming (OOP). This doesn’t mean, however, that FP is not gaining any traction. Both functional programming and object-oriented programming are unique in their own ways.
Here’s functional programming vs OOP at a glance to help you grasp the differences:
|X||Functional programming||Object-oriented programming|
|Focus||What you’re doing||How you’re doing|
|Parallel programming||Supports parallel programming||Not suitable for parallel programming|
|Side effects||Its functions have no side effects||Its methods can produce side effects|
|Application state||Flows through pure functions||Is usually shared and colocated with methods in objects|
|Key elements of the code||Variables and functions are the main elements of the code||Objects and methods are the key elements|
What about programming languages, then?
Pure functional programming languages, such as Haskell, are specially designed to serve this particular paradigm and accept only pure functions. Interestingly, you don’t need to use a pure functional programming language to bring FP principles to your code.
At Scalac, we’re big advocates of functional programming and, which shouldn’t come as a surprise, we mainly use Scala for this purpose. There are at least a few good reasons for that:
- The language is extremely versatile and offers advanced features, clean code, and both functional and object-oriented programming in an open-source, practical package that leverages Java’s environment.
- Speaking of — Scala has emerged as one of the most powerful Java alternatives. Actually, one of the reasons why Scala was created in the first place was to address various concerns developers had with Java. Nowadays, Scala provides interoperability and compatibility with Java, allowing the developers to keep their Java libraries, and leverage the advantages of JVM.
- When comparing it to Python, on the other hand, Scala’s maintenance is simply much faster. Despite providing the fluency and flexibility of a dynamic language like Python, it’s still a strongly statically typed language. The performance also tends to be much more efficient, especially in a multi-threaded environment.
- Because of its functional aspects and flexibility, Scala is also useful for expressive code and parallelism. Basically, with a functional approach and no mutation, there are no race conditions and parallelism gets a lot more straightforward. Then, lambda expressions are also helpful when communicating some aspects of parallelism.
But, the question remains:
Why should you use functional programming (and Scala, for that matter)?
For some reason, this programming paradigm still seems complex for many. When taking a closer look at the benefits of functional programming and languages associated with it, you might have a different impression.
To start with, adopting functional programming helps you break down every application into smaller, simpler pieces that are both more reliable and easier to understand. It’s mostly because functional code tends to be more concise, predictable, and easier to test. How come?
- Since pure functions don’t change any states and depend only on the input given, they are much easier to grasp.
- When there’s less code, there are also fewer bugs — not to mention that actual testing and debugging gets much easier with immutable data and pure functions that take only arguments and produce output.
- With the outputs depending only on the arguments passed to the function, the software can also behave more “predictably”.
- FP adopts Lazy Evaluation which avoids repeated evaluation (basically, the value is evaluated and stored only when it is needed) and supports other Lazy Functional Constructs like Lazy Lists, Lazy Maps, etc.
- Functional programming also means efficient parallel coding — there’s no mutable state and no state-change issues, which supports easy reusability and testability.
- Speaking of efficiency, functional programs consist of independent units that can run concurrently and can be more efficient as a result.
Since Scala supports functional programming, these benefits apply to it as well. In fact, the combination of features in Scala makes it possible to write programs that are concise, elegant, and much easier to debug & maintain.
As a result, increasingly more companies switch to both functional programming and Scala, including well-known tech giants like Twitter or LinkedIn. Interestingly, Scala also made it to the top 10 languages that developers want to learn these days.
The rising interest from both companies and developers are contributing to the recent growth of functional programming and the adoption of Scala as the main language for many applications — also in a business setting.
What do functional programming & Scala mean for your business, though?
There’s no doubt that knowing the principles of functional programming can broaden one’s horizons and introduce new ways of thinking about software development. But what’s in it for the companies?
To start with, code quality. When it comes to functional programming — very often, you can do more with less code. It’s much more concise, which essentially means fewer bugs, and shorter time (and/or fewer people) to actually write it. Plus, it’s a lot easier to grasp what the code does, explain it, and even onboard new team members who can almost immediately join the project and start working on it. In the process, Time to Market often gets shorter.
What’s also worth mentioning is that the interest in functional programming and languages that bring its principles to life stems from being tired of limitations posed by other programming paradigms and technologies. As already mentioned, Scala as a modern language has plenty of useful features that you won’t find in Python and Java. Even implementing it can be a big savings cost of the bottom line.
What’s more, there are already some business cases that both functional programming and Scala have been applied to successfully. Health care, accounting, banking, advertising — are just a few exemplary industries.
For the time being, functional programming seems to work best with apps aimed at concurrency or parallelism, carrying out mathematical computation, and whenever there are many different operations performed on the same data set. Scala is a good fit if you have a lot of data or complex data structures and algorithms, but FP languages are also often used for artificial intelligence applications like machine learning, language processing, or modelling of speech and vision. Pretty impressive, right?
With the rising interest and so many benefits of functional programming, how come it’s not yet as widespread as it should be?
At the end of the day, businesses rather choose the technology based on the skills of their team or the availability of developers, who are more likely to represent more traditional approaches to software development. That’s precisely why it matters not only to educate developers about FP but also give them tools to apply it in practice.
For now, “the movement” is all bottom-up: it’s starting from developers who are tired of being limited by other programming languages, become interested in functional programming, and then teach their colleagues about it.
As these developers start creating libraries and frameworks that solve specific business problems across multiple areas (such as backend development, analytics, distributed development) with the use of functional programming — eventually decision-makers will also get excited about FP. And, the more companies are interested in functional programming, the more developers skilled at it they want to hire. It’s a chain reaction from there.
To facilitate the shift to functional programming, drop some of the jargon around FP and lower the barriers to entry, there are initiatives and projects like ZIO — a library for asynchronous and concurrent programming based on pure functional programming. Taking advantage of it is said to help in solving common business problems, and ensuring higher success rates of projects. This, in turn, brings more attention to functional programming, in the business world as well.
What’s also great about ZIO is that it’s inclusive for all sorts of developers. It’s still fairly new, but it’s expected to be a great venture in the long run, mostly due to all the open-source support it gets. It might be difficult to take advantage of ZIO when developing enterprise-level software just yet, but more and more companies are already testing it in production for smaller projects. And that’s only one of the reasons why the future of functional programming definitely is bright.
Dig into functional programming yourself
Increasingly more companies are prepared to train development teams on how to use FP and solve business problems with functional programming, including Scalac.
Switching to functional programming can be done whenever there’s a new module to implement and thus, can be done gradually. Start small, and see how big of a difference the main aspects of functional programming can make to your business. As per usual, we’re here to help.
One of the biggest language learning apps in the world, Duolingo is serving hundreds of millions of users every single day. Most of the app’s backend was written in Python, yet the tech team has decided to rewrite one of Duolingo’s core features in Scala.
With this article, you’re going to find out:
- why Duolingo chose Scala
- how Scala helped Duolingo create a better product
- why Scala can be the right choice for your company
Want to learn more? Let’s dive in:
Duolingo before Scala
If you’ve never learned a language with Duolingo, here’s a quick summary of how it works:
As you can see, the app’s users learn through short lessons consisting of different types of exercises.
Here comes the question: which exercises, and in what order, should the users see?
Duolingo’s Session Generator is the module that makes these decisions for the users creating adequate educational sequences.
This core feature has been around since the very beginning of Duolingo. The startup, as we already know, was gaining popularity pretty fast, thus growing rapidly.The hectic pace was both a blessing and a curse. Duolingo’s tech team had to act fast and didn’t always have the time and resources to optimize all the processes accordingly. And this led to significant technical debt.
For instance, the Session Generator’s architecture featured many hard dependencies. This means that if any of those failed, the whole module would stop working. In other words, many features of the module affected the performance of other features. As you can imagine, this makes potential bugs much more likely.
Because of that, the Duolingo team decided to redesign the module’s architecture and eventually rewrite the Session Generator. Here’s how they decided on the language:
Moving to Scala
As in many companies, Duolingo’s backend was originally written in Python, one of the world’s most popular programming languages. It’s a common choice, as it’s easy to understand for developers with different kinds of experience.
There are, however, some challenges that come with Python, one of them being the speed.
This language tends to be visibly slower than Java or C, while Java is also considered rather slow and verbose. What’s more, Python’s dynamic typing can be the cause of many runtime bugs.
To avoid these issues, the Duolingo team decided to move their product to Scala. Contrary to Python, Scala is a statically-typed language. It’s widely used in other complex big data apps like for example Kafka that was developed by LinkedIn and is used to handle real-time data feeds. Not surprisingly, it turned out to be a good fit for Duolingo’s Session Generator as well. The team claims that they were looking for a more modern programming language. They also think that Scala is very mature in the back end so it fits the bill.
Implementing Scala in Duolingo
JVM and Functional Programming
There was no need to reinvent the wheel. As Scala is built on the Java Virtual Machine, developers could use existing Java libraries. One of the biggest changes was the shift towards functional programming. Andre Kenji Horie, Duolingo’s senior software engineer, is a big fan of this solution. According to him, around 99% of Duolingo’s codebase is functional. He claims that it makes things much easier to debug, much easier to maintain.
Many developers have the impression that Scala seems to have learned from the mistakes of other languages. Here’s how the Duolingo team perceives it:
- More concise – While Java is known for being elaborate and rather slow, Scala does a lot to make the language less verbose. Thanks to it being a functional language, the developers can use simple one-liners in many cases too.
- Less prone to bugs – As we’ve already mentioned, Scala’s static typic makes it easier to catch bugs with a compiler. Less verbosity makes the work smoother, too. Contrary to Python, Scala is much less prone to runtime bugs.
- Saves a lot of time – Andre Kenji Horie has stressed that writing code in Scala is significantly faster than programming in Java. In the same amount of time he’d use for coding alone, he can also write unit tests for Scala. This makes the developers more confident about the quality of their work.
- Easier maintenance – When compared to Python, the development speed is similar, yet Scala’s maintenance is much faster. Andre mentioned that after moving to Scala he suspected that refactoring would take him around an hour, like in Python. To his surprise, it only took around one minute.
- Efficient performance – As you already know, Scala is running on a Java Virtual Machine and is doing very well in a multi-threaded environment. In other words, it means that it can do a lot of things at once. Scala’s efficiency also means that Duolingo can use 10 times fewer servers to handle the same amount of traffic, which again is a huge saving.
Of course, there were some challenges along the way. The team has described the two main pain points:
- Java integrations – Some of the integrations were not compatible with certain Scala-specific features.
- Documentation – As Scala is a rather new language, finding some of the libraries required extra effort.
Scala learning curve
What’s more, many people claim that Scala’s learning curve is quite steep. In this case, improving readability and optimizing the product’s maintenance process was far more important, and here’s where Scala is doing really well. When asked about the learning curve, software engineers from Duolingo say that it was actually a lot easier than anticipated. It proves that even though the language is new, learning it is not an obstacle.
To sum up, the team is happy with Scala despite the tiny downsides. Andre Kenji Horie has said in a Software Engineer Daily podcast that There are some small things here and there in the language but […] it is not a big deal. He claims that pain points didn’t come with Scala itself but were more related to changing from one language to another. For instance, when they had a function that was used in Python but not in Scala, they needed to find a workaround.
Note that this is only related to the onboarding phases. In general, the team appreciates how Scala offers a lot of useful features that are not present in Python or Java.
Duolingo and Scala: the results
The service turned out to be much more robust after the rewrite. It’s easiest to see in the speed test results. The latency before the rewrite was 750 milliseconds, while after implementing Scala it went down to as little as 14 milliseconds. Quite impressive, isn’t it?
To top it all off, the rewrite proved to be significantly more stable. With the old infrastructure, the average downtime was around 2 hours every quarter. After switching to Scala, the first few months boasted zero downtime. Obviously, it probably won’t last forever, yet it still looks very promising.
The team claims that Scala meets their needs as it’s very mature in the back end and, as we’ve mentioned before, makes a great fit for big data applications.
Last but not least, the shift to Scala has improved morale among developers. They feel more confident deploying the code, as they don’t have to fear they’ll break the entire app. The improving testing suite that is used in Scala makes their work much more pleasant. Considering unit tests are prepared by developers who test individual code before integration, issues can be found at an early stage. Thanks to that, they can be resolved without impacting the other parts of the code.
Scala as the right choice for your business
Does it sound like Scala could be the right fit for your product? If you’d like to learn more about implementing Scala in other global companies, you’re sure to enjoy this Zalando case study. Of course, if you have any questions about implementing Scala,we’re always happy to help, as we’re of the biggest Scala development companies. Feel free to get in touch via live chat on the website!
The article is based on the following sources:
A growing number of big companies have swapped cumbersome monolithic applications for distributed systems. And in virtually all cases, they’ve boosted customer satisfaction, reduced costs, and increased revenues.Read more
As Zalando kept growing to become an ecommerce giant, at some point they have decided to switch from Java to Scala. Although it’s a major move that required a lot of effort, they managed to do it in less than three months.
Want to see how they did it? Wondering if this might be the right choice for your company? Keep reading to find out more!
Java vs. Scala – the main differences
We’ll start with a quick introduction so you can see clearly what are the main differences between Java and Scala:
- Amount of code – This is the main difference you’ll surely notice at first sight. Scala is a drastically more concise language than Java. The number of lines is visibly reduced, thanks to the use of type inference, function passing and several other factors.
- Parallelism – Scala is a much better fit for parallel programming, as it’s designed to express patterns in a very concise manner.
- Objects and functions – While Scala is both functional and object-oriented (we’ll cover that in more detail later), you need to keep in mind that functions are acting as objects in Java. Scala treats every function as a variable, which means than one Scala function can accept another. This is one of the most impressive features of this language.
- Syntax – This is one of the reasons while Scala’s learning curve can be so steep. Although concise, the syntax seems a little off-putting at first, which is why some people consider Java more readable. This might be a problem for these who want to get started with Scala.
Why Zalando chose Scala
Alright, so why exactly did Zalando decide to look for a Java alternative, then? Here’s why they thought Scala might be a better choice for some of their needs:
- The company had years of previous experience with the Java Virtual Machine – Javier Arrieta, one of the Senior Software Engineers at Zalando, had a whopping 18 years of previous experience working with JVM. This solution is fast, efficient and quite convenient for debugging as well. Java worked fine, but there was one problem: the amount of code needed to ensure stability. The team thought that it would also be nice to use lambdas for transforming collections.
- Scala works well with Java libraries and frameworks – This made the transition from Java to Scala much more convenient. The developers didn’t have to let go of all the libraries they’ve already been used to. They could also stick to Play, which is used for both Java and Scala development. This framework is intuitive, extensive and trustworthy, as it’s backed by Lightbend (formerly Typesafe).
- It combines functional programming and object-oriented programming – Why choose one when you can have both? Scala presents a hybrid approach, as it combines both object-oriented (OOP) and functional programming. The possibility to choose one or the other paradigm, depending on the situation, makes Scala a really flexible choice.
- Scala is great for parallelization – This is one of the main advantages of functional programming. What’s more, Scala comes with a Futures API, which makes parallel programming much smoother. You can use this solution instead of sticking to traditional methods like locks, callbacks and threads.
What kinds of challenges come with Scala
Although the Zalando team is still positive that moving to Scala was the best choice they could make, there are some challenges they had to face:
- Compilation times – Advanced languages features in Scala make the compilation time longer. Luckily, there’s a solution to this issue. Zalando team turned to incremental compilation. This trick helped them solve the problem.
- Language problems – The same thing in Scala can be written in many different ways, which is both a blessing and a curse. There is no canonical style guide available and the code can get unreadable quite. When implementing Scala, it definitely pays off to implement some sort of in-house style guide. This will help you achieve consistency.
- Possible operator overloading – In Scala, the operator can have a different implementation depending on the argument. This case of polymorphism can lead to confusing constructions.
- Learning curve – As we’ve already mentioned in the Java vs. Scala comparison, Scala’s syntax can seem highly complicated to those who want to learn it. It’s a hybrid language, which is a double-edged sword: it makes work easier, but you need to consider more aspects to understand how it works.
How Zalando introduced Scala
The team has to admit that Scala’s learning curve is pretty steep. All developers had to be introduced not only to a new language, but also new frameworks, new build tool and, above all, functional programming concepts.
So, how do you tackle such a complex project? Of course, you need to start by providing high-quality educational materials. The team at Zalando picked Scala courses from Coursera, which turned out to be a great fit for their needs.
The developers proceeded to learn through prototypes and greenfield projects. They were creating systems for a new environment, without integrating them with other systems yet. Another method used to introduce Scala was the layered approach. All these measures helped the team learn new skills in a controlled environment.
Internal workshops worked quite well, as many senior Java developers were willing to learn Scala. Actually, all-Scala developers are quite a rare phenomenon – most of them have transitioned from another programming language. When it comes to exact numbers, 40% of engineers and Zalando expressed interest in learning Scala.
In Zalando’s Dublin office, most services and data pipelines are written in Scala. The Irish team is using that language to develop the Customer Data Platform.
How the developers at Zalando adapted to Scala
It is also worth mentioning that there were two main types of Scala adoption in the company:
- Using Scala as Java – For developers who already had years of experience working with Java, it was almost certain to happen. You could say that they’re using Scala as an improved version of Java, with all the lambdas, pattern matching and case classes involved.
- Functional programming nerds – The second group, on the other hand, really got into Scala and all the exciting new opportunities that come with functional programming. They treat Scala like an entirely new programming language and are more open to trying new things.
It’s good to keep this pattern in mind, as it’s quite likely that introducing Scala will take a similar turn in your company. Some developers may prefer to stick to their own habits and only adopt certain features of the new languages, while some may be particularly excited about implementing a new solution.
What Zalando loves about Scala
Now that Zalando has been working with Scala for quite some time, they can definitely list some of their favorite things about it:
- Types – The team at Zalando absolutely loves types. They help them understand what kind of value they’re working with, whether it’s the customer’s password, their name, or maybe their email address. They prefer using either tagged types or value classes to manage this data.
- Referential transparency – It’s about the substitution model. Referential transparent computation allows the team to substitute a function with parameters, which makes work so much easier. It’s also incredibly helpful for testing a program.
- Using monads for function composition – One of the main advantages of Scala is how it allows composing functions to create more complex ones. Monads one of the most popular ways to make that happen. Thanks to them, many operations can run sequentially.
As you can see, the Zalando team is very happy with using Scala instead of Java. They love to explore the wide possibilities that come with the hybrid of object-oriented and functional programming. Why not have a closer look at their process and implement a similar solution in your company? Who knows, maybe Scala is the alternative you were looking for. The case of Zalando proves that it can be successfully implemented in just a couple of weeks.
The article is based on the following sources:
Check out also: