Author: Michael Outhier

  • Salesforce Implementation Guide 2023: What you should know

    Salesforce Implementation Guide 2023: What you should know

    Overview

    In this article, we’d like to talk about the process of Salesforce implementation and share some practical tips that will allow you to make this process as seamless as possible. Our attention to this software is absolutely not occasional and can be explained by the high interest from the side of our clients in introducing this customer relationship management software at their companies.

    What is Salesforce?

    We won’t exaggerate if we say that the cloud-based CRM Salesforce is one of the most well-known and widely used customer relationship management systems in the world. It offers a wide range of tools that help businesses close more deals, increase the quality of their services, and, in general, leverage more opportunities to increase their profits. The Salesforce company was established in 1999 and since then, it has been continuously enhancing and modernizing its software to make it relevant for every business regardless of its type, size, and industry. 

    Based on our experience, we can say that the demand for Salesforce implementation service is not falling over time. More and more businesses are interested in exploring the capabilities of its software tools that help to ensure the desired level of automation and personalization.

    In 2022, for the ninth consecutive year, Salesforce was awarded as the #1 CRM provider by the International Data Corporation (IDC) in its annual Worldwide Semiannual Software Tracker. Amid this recognition, the company is continuously evolving and modifying its CRM platform in full accordance with the ongoing tech trends. For example, 2023 has become a year of AI. The company has announced a row of AI-powered innovations, including the introduction of the first generative AI for CRM in the world – Einstein GPT.

    Why should you implement Salesforce?

    Any CRM system is intended to help businesses better organize their interaction with clients by enhancing their work with customer data. Many years ago, all these processes used to be performed manually which resulted in a huge number of mistakes, missed opportunities, and lost profits. Salesforce implementation can help you avoid all these issues and enjoy a row of benefits.

    • Access to valuable customer data from any device and at any time;
    • Better time management;
    • Increased revenues;
    • Enhanced customer loyalty and satisfaction;
    • Improved team collaboration;
    • More reliable reporting.

    To better understand what you will get if you decide to implement Salesforce, it will be useful to have a look at the following figures revealed in the Salesforce.com Customer Relationship Survey.

    The companies that started using Salesforce experience:

    • 30% jump in lead conversion
    • 28% increase in sales revenue
    • 45% surge in customer retention

    The use of Salesforce Sales Cloud can bring a 160% YoY increase in email click-through rates. Salesforce Marketing Cloud can drive marketing production time by 75% and boost conversion rates by 16%. Meanwhile, by applying the tools of Salesforce Service Cloud, it is possible to save employees’ time by 30% and increase their satisfaction by 70%.

    All these figures look quite impressive. However, to have the possibility to achieve such results, you need to make sure that you have chosen the right approach to Salesforce implementation and that you know how to get prepared for it.

    Our Salesforce team has expertise in working with multiple companies with different needs and requests which helped us to elaborate our Salesforce implementation best practices and approaches.

    Who can conduct Salesforce implementation?

    There are three main approaches to such projects.

    • In-house implementation. This model is a rather rare thing. However, it is possible to choose it if you have all the necessary inner resources. Though such projects may require lower investments in comparison to those cases when you work with external partners, you should understand that it may become a very time-consuming and challenging process if your employees do not have enough skills and experience.
    • Cooperation with external partners. The majority of Salesforce users choose this model as it has a lot of advantages. Professional teams can customize and implement a CRM solution significantly faster and more efficiently than in-house specialists. However, it is not easy to find the right partner with the required experience.
    • Hybrid model. As you can guess from its name, this approach presupposes that your in-house specialists will share the responsibilities together with your implementation partner. For example, while external experts will plan the implementation process and migrate the data, your in-house specialists will be responsible for training other employees and maintaining your CRM. This model provides great flexibility but it requires efforts from your side to organize all the processes in the right way.

    Salesforce Implementation: Key steps

    Step 1. Consulting and planning. When our clients come to us, we need to study their business needs, analyze their goals, and find out how Salesforce can help to achieve them. When we understand the primary objectives (for example, to increase the number of sales or reduce sales cycles), we can start thinking about the required integrations and customizations which will help to fully adjust the functionality of the CRM software to the needs of a particular company. We also should know the budget of our client in order to make sure that the project will stay within it.

    Step 2. Configuration and customization. When everything is discussed with a client and approved, we can proceed to tailoring the solution in accordance with the set requirements. While configuration presupposes modifying the capabilities of Salesforce that it has by default, customization is a more serious task as it includes development. As a result, the second option requires bigger investments but it can bring better results. Nevertheless, the exact approach will be discussed in each case individually. Sometimes, customization is not required even when a company is ready to pay for it.

    Step 3. Integrations. Your CRM systems should be seamlessly integrated into your wider software ecosystem. Moreover, it should smoothly interact and exchange data with other systems that you rely on in your work such as a document management system, ERP solution, and e-commerce platforms. 

    Step 4. Data migration. It is vital to transfer your existing data into Salesforce without losing anything, as well as without causing system downtimes or failures. To make this process absolutely comfortable for your employees, our team will need to analyze your legacy system and data structure.

    Step 5. User training. It is very important to make sure that all your employees know how to deal with your new Salesforce solution and especially with all the added custom features. It is recommended to organize training and we can also help with this task.

    Step 6. Salesforce-based system launch. When your solution is well-tested and functions as it is supposed to in the development environment, it can be placed into the user acceptance testing environment where you will be able to see how it works and whether you are satisfied with the results. When you accept the result of our work, we will launch your system in the production environment. After that, your CRM solution will become available to your staff.

    Step 7. After-launch maintenance and support. We can also offer our help in supporting and maintaining your solution. These services may include regular monitoring of the system performance, addressing all the detected issues, as well as introducing updates and enhancements based on the users’ feedback.

    How to make sure that your Salesforce implementation project will be successful

    And to cut a long story short, let us share a few recommendations that will help you to successfully reach your goals with Salesforce implementation.

    • Stay flexible. Salesforce implementation projects can be rather complicated processes that may require a lot of planning efforts. Nevertheless, due to a lot of factors, it may turn out that you need to introduce some updates in your project and change your approach. You should be ready to do it even after the beginning of the project realization.
    • Make communication your priority. When we are talking about communication in such projects we mean not only your interaction with developers. It is also important to make sure that the opinions of your employees who will work with Salesforce are heard. You need to take into account their preferences and thoughts.

    Choose a reliable partner. Though this tip may seem to be too obvious, the right choice of Salesforce experts is a very weighty component of your success. You should look for a team that will deeply study your needs and will be interested in bringing real value to your business by adjusting your Salesforce-based solution to your requirements.

    At Amberteq, we strongly believe that our goal is to help businesses conquer new peaks by means of powerful solutions that will help them address their existing issues, instead of creating new ones. We know how to achieve the highest efficiency of Salesforce cloud-based software and how to seamlessly implement it and integrate it with other systems that you use at your organization.

    Just contact us to discuss what we can do for you!

  • Why is it critical to upgrade .NET applications to a later version?

    Why is it critical to upgrade .NET applications to a later version?

    Overview

    “Why change anything if it works?” If the answer to migrate or not to migrate from an older .NET version was that simple, this topic would not come up. But it constantly does. Why? Because nothing stands in its place. Things change, technology runs forward and gets better and better all the time. It becomes harder to get oldies – engineers actively familiar with older technologies, while new developers are hot on the newer tech. 

    Same with DevOps people, QA and support engineers, and other technical experts. And overall, the cost of maintaining an outdated, worse-performing, less cost-efficient software stack is not something an organization can wave away. So, when and how to make this decision and make it rationally?

    Why change anything if it works?

    This is the number one question technological and business stakeholders ask when approached with a suggestion to upgrade an application or service written in .NET some years ago. And honestly, this is a very relevant question. After all, any type of software development is a costly initiative, and it should bear good reasons to undertake any effort if you have a working application. But as usual, it is not that simple. Let’s take a look.

    Now, we think the most critical differentiator in handling this question is the following one: “Do you plan to change anything in this application? Or is it purely in the maintenance mode and no software changes are planned for it?”. And based on your response, let’s review two paths here.

    Applications in maintenance mode only

    These are .NET applications, for which no additional development is planned. They are deployed and used by business customers and there are only two main concerns: uptime and security.

    And before approaching these two topics, let’s consider the key aspect here: Microsoft .NET Support Policy.

    On Microsoft .NET and .NET Core Support Policy page, we can read the following things:

    “Every Microsoft product has a lifecycle. The lifecycle begins when a product is released and ends when it’s no longer supported. Knowing key dates in this lifecycle helps you make informed decisions about when to upgrade or make other changes to your software. ”

    It is also important to be aware of this statement from the Microsoft .NET Support Policy page:

    “Major .NET versions are released annually in November. Each .NET release is defined as either Standard Term Support (STS) or Long Term Support (LTS), at the beginning of the release.

    STS releases are released in even-numbered years and LTS releases are released in odd-numbered years.

    The quality of all releases is exactly the same, the only difference is the length of support. LTS releases get free support and patches for 3 years.

    STS releases get free support and patches for 18 months.”

    The provided information is followed by this diagram:

    diagram

    The next piece comes from the Microsoft .NET Framework Support Policy:

    “Many products both within and outside Microsoft rely on .NET Framework. Beginning with version 4.5.2 and later, .NET Framework is defined as a component of the Windows operating system (OS). Components receive the same support as their parent products, therefore, .NET Framework 4.5.2 and later follows the lifecycle policy of the underlying Windows OS on which it is installed.“

    And one more piece is taken from Microsoft Overview – Product end of support page:

    “Once a product reaches the end of support, or a service retires, there will be no new security updates, non-security updates, or assisted support. Customers are encouraged to migrate to the latest version of the product or service. Paid programs may be available for applicable products.”

    Takeaway: Once the .NET Framework / .NET Core / .NET version of your application reaches the end of its lifecycle, no more functional and security patches will be issued by Microsoft, and also no support will be given in case anything goes wrong. And that’s, of course, not the best case to be for mission-critical software.

    It’s worth mentioning that for .NET Core 1.0 end of support was on June 27, 2019. For .NET Core 3.1, it happened on December 13, 2022, and for .NET 5,  it was on May 10, 2022. At the same time, the newer LTS .NET 6 version (3 years of patching) will reach its end of support only on November 12, 2024 (source).

    Our suggestion: Upgrade your .NET to at least version 6 to be on the safe side, avoid security risks and be open to receiving support if needed.

    If you are looking for a reliable partner to migrate to a newer version of .NET, our team will help you to plan your successful upgrade with minimal risks, and financial and time investments.

    You can also check out a case from our practice: Updating web modules written in ASP.NET Core 2.1 to ASP.NET 6.0.

    Actively developed applications

    And if you actively develop your .NET application or service, some other issues and problems arise when you stick to an older, outdated, deprecated, or obsolete version of it.

    Availability of software developers

    As it turns out, software engineers, architects, DevOps, and other technical specialists tend to be in larger abundance when you mention modern technologies. People like feeling relevant and on the edge, plus – they expect higher salaries when they show knowledge of the most modern languages and tooling.

    That’s why, year after year, it will become harder and harder to find programmers, who still develop solutions using .NET Core 3.1 or earlier versions, or .NET Framework 4 and its older versions. They become an extinct species, their availability is highly rarefied and they might also be an “older generation”, who would expect higher remuneration to support an older code.

    Also, these days, it is more and more acceptable to have an outsourced team of collaborative developers overseas, who either complement your in-house team or serve as the core development team for the company. And there, clearly, people also tend to strive towards more modern development stacks, so it is easier to find such a team for a newer .NET version, than for the one dead for 3 years or more.

    In a brief, do yourself a favor, and invest some amount of effort to migrate your application to a modern, Long Term Support (LTS), 3-year lifespan .NET version, like .NET 6. It would make it substantially easier to find relevant developers and also bring your development stack to a higher level, which is known to increase developers’ productivity, team velocity, and overall quality of the code.

    Ease of finding answers and samples

    Here we have a very interesting question: is it easier to find answers and samples for coding needs when you’re looking for these things for an older or  newer .NET version? 

    On the one hand, of course, if you’re dealing with Release Candidates, like it was in the case with .NET 7 just a few months ago, probably it would be harder to find answers when anything goes wrong. But closer to the release, and thanks to the open-source nature of the .NET Core framework, the number of answers, tutorials, sample codes, and StackOverflow threads explodes.

    For example, let’s take a very interesting .NET 7 feature – the ability to call an existing .NET library from React code running in the browser. If you follow the link, you will see a great community contribution of code samples and GitHub projects:

    community contribution of code samples and GitHub projects

    All the trials to find a code sample or assistance from the community for something happening in .NET Core 2.0 or .NET Framework 3 would most probably result in frustration and failure to reach the set goal.

    Performance, performance, performance

    When reviewing the “What’s New” sections of different .NET versions, it became obvious that from version to version, Microsoft and the open-source community worked hard on making .NET more and more performant.

    Just let’s have a look at the major versions:

    What’s New in .NET Core 2.0 – 9 occurrences of Performance, including Build time speed-up, incorporation of a new JIT compiler technology called tiered compilation (also known as adaptive optimization), state-of-the-art cryptography hashing RFC2898 15% performance improvement, significant socket performance increase.

    What’s New in .NET Core 3.0 – also 9 occurrences of Performance improvements. Among them, we should mention now default JIT tiered compilation, ReadyToRun binaries improving startup performance, Garbage Collection Large Page support, added APIs that allow access to certain perf-oriented CPU instructions, and new built-in high-performance JSON support.

    This is followed by .NET Core 5 performance improvements, including Garbage Collection (GC), System.Text.Json, System.Text.RegularExpressions, Async ValueTask pooling, Container size optimizations, and others.

    And one more version here is .NET 6, which states to be the fastest full-stack web framework that lowers compute costs if one is running software in the cloud. A list of these improvements can be found in this Performance improvements in .NET 6 blog post.

    A second glance at .NET 6 What’s New shows yet another plethora of performance enhancements, with statements like “Performance is a key focus of .NET 7, and all of its features are designed with performance in mind”. Read the Performance improvements in .NET 7 blog post for getting more details.

    I hope the overall conclusion is clear: A business that wants to be on par with its competition, spend less on expensive hardware, and be wide open for an explosion of usage, should heavily review its commitment to developing using the most state-of-the-art performance technological stack. In short – move at least to .NET 6.

    Support of modern cloud technologies

    One additional, but in my opinion critical, aspect of the modern application stack is all about developing cloud-native, containerized, easily scalable, and highly performant services and applications. The keyword here is “Containers”. 

    Any company developing a Software-as-a-Service or a Cloud-hosted application oriented to high parallel execution by thousands if not millions of users strives toward developing containerized, scalable services, be it pure Microservices Mesh, or independently deployable services in a Service Oriented Architecture. 

    And here is where .NET Core goes very much in the right direction. There are so many advancements in support for .NET on Linux and Windows containers, in x64 and Arm64 processors, with more and more precise and efficient resource management, that it is hard to list them all.

    The screenshot below demonstrates the number of references (22 to be precise) to the term Container in .NET 6 What’s New:

    the term Container in .NET 6

    And in .NET 7.0 the count even rises (29):

    the term Container in .NET 7.0

    Last, but not least is observability. Modern services and applications, having a multitude of individual components and distributed calls path, require sophisticated health monitoring, performance observability, and APM (application performance monitoring) support. Modern versions of .NET Core can help us with this. 

    For instance, .NET 7 added support for OpenTelemetry:

    “The goal of observability is to help you better understand the state of your application as it scales and the technical complexity increases. .NET has embraced OpenTelemetry while also making the following improvements below in .NET 7…”

    Conclusion: If the company is serious about deploying its highly scalable containerized application to the cloud to ensure growth and cost efficiency, the .NET modernization becomes a must.

    by Alexander Stern, senior content contributor at Amberteq

  • Total cost of ownership (TCO) considerations when migrating legacy systems to the Cloud

    Total cost of ownership (TCO) considerations when migrating legacy systems to the Cloud

    Overview

    Many companies have a “gut feeling” that it would be worthwhile to migrate their legacy systems to a public cloud. With that, it is hard to predict the actual changes and the accompanying financial costs and benefits of this step. As a result, decisions are stalled, precious time is lost and potential financial and competitive gains are not achieved.

    In this article, we offer you to have a look at some of the key financial considerations to be taken into account, researched, and decided upon, which will help an organization affect the stakeholders and drive the necessary decisions.Although the discussion here is fully applicable to any Public Cloud, be it AWS, Azure, or Google Cloud, for the sake of simplicity we will use the Microsoft Azure TCO calculator as the tool of choice.

    TCO breakdown of an On-Premises legacy system

    This article uses Microsoft Azure TCO breakdown of an IT system, as described in the following table, which gives a cost center with its short description, and provides an example of it in the case of an on-premises IT system setup.

    Cost centerDescriptionOn-Premises Example
    Data centerHere we mainly include the installation required to put in place the necessary IT hardware, i.e.: racks for servers, storage, and networking devices, a place for them, all physical connectivity required, and also the electricity cost to power it all. A cooled-down secure room, where rack stands are placed, on which servers and other devices are mounted, connected to electricity and networking, including monitoring of the room and its content.
    StorageAny and all devices, where HDD or SSD disks reside in high performance and redundancy RAID configurations, the necessary tapes for archive and backups, and finally the necessary connectivity to servers and networking.HDD RAIDs plus some SSDs for servers and network file systems, and an organizational backup solution.
    NetworkingIncludes all the necessary hardware and software for internal and external networking, with sometimes more advanced secure and peer-to-peer channels.Some local switches and routers, applications load balancers, external routers, and a VPN gateway, with their licensed software – all this can be the networking setup of an on-premises IT system.
    ComputeHere we include core platform services: Operating system licenses, Database licenses, Virtualization software licenses, and any other software licenses needed to run a system.An example can be a VMWare for running Linux machines plus a Windows Datacenter for running virtual Windows machines. And finally, an SQL Server license matches the legacy system performance requirements.
    IT LaborThis includes IT administrators required to set up and maintain the data center, hardware, and software, keeping it running, up-to-date and secure.We could be talking about an IT department with Hardware and Networking specialists, Linux and Windows administrators including virtualization administration, and SQL Server DBAs.

    It is clear that to set up a fully functioning data center, required to deploy and run a legacy on-premises system, the business needs to make a very high upfront investment to purchase the needed spaces, required hardware, and software and then use IT specialists’ hours to ensure that it all runs smoothly and sustains the legacy system production load over time.

    With that, any kind of future growth can become very costly, as it would require additional racks to accommodate new hardware, additional software licenses to allow the growth, and additional expensive IT people to maintain it all.

    And yes, we know that after these expenses have been made, it can become even harder to find good reasons to move over to the Cloud. With that, there are very interesting hybrid setups, which help preserve the already made investments, together with opening up business growth horizons without heavy upfront costs, while also gradually migrating any outdated hardware, software, or IT expertise to the Public Cloud world.

    And now, let’s review a matching TCO breakdown of a Cloud-hosted IT system.

    Comparative TCO of a Cloud-hosted IT solutions

    The basic differences between the on-premises TCO breakdown and a Cloud-hosted one are the  following:

    • Data center is fully managed by the Cloud provider, and, as a result, there are no direct expenses required for purchasing spaces, racks, and hardware, paying for the physical security and electricity, or the IT expertise to set it up and run.
    • Similarly, Storage hardware and Virtualization software are fully managed by the Cloud provider, making it even less complicated to set up and run an IT system without any costly purchases and complicated configurations.
    • IT expertise shifts over from being hardware oriented towards managing the relevant platform and software services, like databases, virtual networking, deployment pipelines, and so on.

    As an interesting example of On-Premises vs Cloud-hosted TCO breakdowns, we used the Microsoft Azure TCO Calculator with the following system needs:

    • 50 Linux VMs managed by VMWare virtualization software
    • 50 Windows VMs managed Windows Hyper-V software
    • Microsoft SQL Server – 2 servers
    • PostgreSQL – 2 servers
    • Storage – 60 TB HDD with 120 TB backup storage
    • Networking of 15 TB throughput

    Azure TCO calculator uses assumptions based on industry averages accredited by Nucleus Research for estimating electricity, storage, IT labor and other average costs.

    As a result, it shows cost savings of about $1,300,00 over 3 years! 

    We think such numbers demand further investigation and are worth the time invested in understanding whether it is true and how to reach such savings in your own activities.

    Below you can see the screenshots of the Azure TCO report, which shows the cost savings per the outlined breakdowns over 3 years when migrating the same set of servers, storage, and databases from the on-premises data center to Azure.

    the Azure TCO report
    the Azure TCO report
    the Azure TCO report

    Hybrid solutions: On-Premises plus Cloud-hosted

    As dramatic as it sounds, we still believe that it is not a simple decision and even less simple migration path to make such a shift in an organization’s IT system. After all, a lot of investments have been made to establish the current data center, purchase hardware and software and hire the relevant IT experts.

    So we would also like to discuss the Hybrid solutions, which are rightfully there as the first step of migrating an organization to the Cloud.

    Let’s take a look at the following hybrid options:

    • Establishing a Cloud presence and developing  new IT services already fully in the Cloud.
    • Creating a Cloud account and then setting up some initial services: storage, database, or analytics, together with a VPN between your on-premises network and the Cloud-hosted virtual network fully owned by your Cloud account.

    This might allow a company to reduce hardware, software, and maintenance costs for these services while preserving the security and compliance of the organization.

    Effectively, the idea here is to identify the IT areas of your legacy system, which incurs the highest costs in terms of hardware, software, and IT administrating services, and then run some research followed by a pilot to see if moving it completely over to the Cloud would resolve it all, at least in the long run.

    Recommended evolutionary decisions and actions

    We think, the number one decision to be made is: would the organization benefit in terms of operational costs and human resources from moving over to the Cloud in the long run or not?

    If, after due investigation and pilots, you come to the conclusion: “yes, it would”, the next step is to determine a realistic plan for the step-by-step migration, agreed upon by all the major stakeholders, and then start implementing it task after task, project after project.

    Maybe, initially, you would need to acquire the necessary expertise, by hiring knowledgeable and experienced IT people and Solution Architects. We would also suggest using Cloud provider support engineers who will give workable advice relevant exactly to your organization and your case.

    And then, it is also very advisable to see how to re-use the already made investments of data centers, hardware, software, and IT people to correctly amortize the costs, preserve the right talent and prevent unnecessary service downtimes. There are good solutions for all of these.

    It is also important to point out that modern Cloud providers have a huge portfolio of ready-to-use services, be it fully managed databases of any flavor – SQL or NoSQL or Graph, a multitude of big data and analytics solutions, sophisticated IoT, ML, and AI services, and many others. 

    This means that when entering the world of the Public Cloud, organizational IT departments and software development teams open up to a wide world of modern software architectures. This allows much faster innovation capabilities with speedy time to market and all-in-one place learning and support services to help.

    That’s why part of the evolution is not only the migration of legacy systems to the Cloud but also establishing of an innovative culture and increasing business agility and competitive advantage.

    Conclusion

    Let’s summarizethe key ideas of this text:

    1. Public Cloud can substantially decrease costs in the long run.
    2. There are intermittent steps when migrating legacy systems to the Cloud, including sophisticated hybrid solutions.
    3. Cloud opens a new world of innovation with faster time to market.

    Taking these points into account makes it even more important for an organization and its IT department to define the necessary steps of analyzing the possible cost savings, available migration paths, and desirable future strategies connected with moving to the Public Cloud.

    by Alexander Stern, senior content contributor at Amberteq

  • What is software scalability? Why does it matter?

    What is software scalability? Why does it matter?

    Overview

    Business begins with a specific set of information system requirements. However, as a company grows, the issue of scalability of its software systems grows in importance.  

    An insufficiently scalable solution can cause serious issues in the future. Even if the system works reliably today, there is no guarantee that it will work the same way in the future. One of the most common reasons for a decrease in efficiency is an increase in workload. For example, the system has grown from 10,000 simultaneous users to 100,000 or from 1 to 10 million. It can also be the processing of significantly larger amounts of data than before.

    Scalability – the ability of the system to adapt to dramatic changes in task performance and increasing demands (increasing volumes of data, number of users, etc.). In this case, we are not talking about replacing hardware and software, that is, any structural changes, but about increasing its performance. 

    So, scalability is a characteristic of a system or application that indicates their ability to continue to perform well under increasing or growing workloads. A system that scales well can maintain or even improve performance or efficiency even as operational requirements increase. 

    A scalable system must adapt flexibly to the addition of resources. The communication subsystem must cope with the increasing number of nodes in the system, and the performance of the distributed system should increase in proportion to their number. Scaling by size implies the ease of connecting additional users and resources. 

    The scalable system must be managed, allowing for upgrades and modifications.

    The flexible software system allows you to connect additional modules to the existing functionality, giving new opportunities. So, the same program with different modules can be used in different enterprises and perform different functions. 

    While the lifecycle of technologies may change in unexpected ways, it is critical to be able to develop software solutions, expand their applications, and integrate them with other systems – both existing and planned. 

    Types of scalability

    There are two types of scaling: vertical and horizontal. 

    • Vertical scaling-increasing the performance of an application by adding resources within the existing hardware. For example, increasing RAM or replacing a processor with a more powerful one. In this case, scalability is limited; it is very easy to reach a ceiling.
    • Horizontal scaling – increasing application performance by distributing the load between the existing and new hardware. As long as it is possible to increase the number of servers, it is possible to increase performance and provide comfortable work for more users.

    Features of vertical and horizontal architecture

    OptionVertical SystemsHorizontal Systems
    MemoryLarge sharedSmall dedicated
    StreamsMany interdependent threadsMany independent threads
    Interconnections (Межсоединения)Strongly bound InternalWeakly bound external
    RASPowerful RAS single systemPowerful RAS using replication
    Central processors (CPUs)Lots of standardLots of standard
    Operating systemOne copy of the operating system for many CPUsMultiple copies of the operating system (one copy per 1-4 processors)
    Layout (Composition)In the same closetPlacing a large number of servers in a rack
    Placement densityHigh density of processors per unit floor areaHigh density of processors per unit floor area
    EquipmentStandard and specially developedStandard
    ScalingWithin a single server enclosureOn the scale of multiple servers
    ExtensionBy installing additional components in the serverBy adding new nodes
    Architecture64-bit32- and 64-bit

    Vertical systems are better for some types of applications and horizontal systems for others, but in many cases the best choice of architecture depends on the size of the task. The table below shows examples of applications for which vertical or horizontal architecture is optimal.

    Application types for vertical and horizontal architectures

    Vertical SystemsHorizontal Systems
    Big databasesTransaction databasesData warehousesIn-depth data miningApplication serversHPTC applications (not partitioned)Web serversFirewallsProxy serversWorking with streaming mediadirectoriesXML ProcessingJSP applicationsSSL encryptionVirtual private networks (VPN)Application ServersHPTC (Partitioned) Applications

    Key scalability parameters

    Today, the key parameters for scalability are:

    • support for multiprocessing

    Symmetric multiprocessor systems (SMP) are increasingly being used for vertical scaling, because in this case no platform change is required, i.e. operating system, hardware, and administration skills. To this purpose, the use of massively parallelized systems (MPP) is also possible, but so far their use is limited to special tasks, e.g., computational. When evaluating a DBMS server with a parallel architecture, it is advisable to pay attention to two main characteristics of an extensible architecture: adequacy and transparency. When evaluating a DBMS server with a parallel architecture, it is advisable to pay attention to two main characteristics of an extensible architecture: adequacy and transparency.

    The adequacy property requires that the server architecture equally supports one or ten processors without reinstallation or significant configuration changes and additional software modules. Such an architecture will be equally useful and efficient on a single-processor system, and, as the complexity of the tasks to be solved increases, on several or even on many (MPP) processors. In general, the consumer does not have to additionally buy and master new software options.

    Ensuring transparency of the server architecture, in turn, allows you to hide hardware configuration changes from applications, i.e. guarantees the portability of application software systems. In strongly coupled multiprocessor architectures, the application can communicate with the server through a shared memory segment, while in weakly coupled multi-server systems (clusters) a message mechanism can be used for this purpose. The application should not take into account the capabilities of the hardware architecture implementation – data manipulation methods and the software interface to access the database must remain the same and equally effective.

    Quality support for multiprocessing requires the database server to be able to independently schedule multiple serviced queries, which would ensure the most complete distribution of available computing resources among server tasks. Requests can be processed sequentially by several tasks or divided into subtasks, which can be executed in parallel. 

    The latter solution is better, because the correct implementation of this mechanism provides benefits independent of the types of queries and applications. The level of granularity of the operations considered by the scheduler task has a huge impact on the processing efficiency. If the granularity is coarse, for example, at the level of individual SQL queries, the division of the computing system resources (processors, memory, disks) will not be optimal – the task will idle, waiting for the I/O operations necessary to complete the SQL query, even if there are other queries that require significant computational work waiting in line for it. With finer granularity, the division of resources occurs even within a single SQL query, which is even more evident when processing multiple queries in parallel. Using the scheduler ensures that more system resources are involved in solving the database maintenance tasks themselves and minimizes downtime.

    • architectural flexibility

    Regardless of the degree of mobility, standards support, concurrency and other useful qualities, the performance of a DBMS that has tangible built-in architectural limitations cannot be built up freely. The presence of documented or practical restrictions on the number and size of database objects and memory buffers, the number of simultaneous connections, the depth of recursion of procedures and subqueries or triggers of database triggers is the same restriction on the applicability of the database as, for example, the inability to transfer to multiple computing platforms. The parameters that limit the complexity of database queries, especially the size of dynamic buffers and the stack for recursive calls, should be configurable dynamically and do not require stopping the system for reconfiguration. There is no point in buying a new powerful server if expectations cannot be met due to internal limitations of the DBMS.

    Usually the bottleneck is the inability to dynamically adjust the database server program characteristics. The ability to determine on the fly parameters such as the amount of memory consumed, the number of occupied processors, the number of parallel threads of job execution, operating system processes or virtual processors) and the number of table fragments and database indexes and their distribution across physical disks without stopping and restarting the system is a requirement arising from the nature of modern applications. Ideally, each of these parameters could be changed dynamically within user-specific limits.

    Summary

    The scalability property is relevant for two main reasons. First of all, the conditions of modern business are changing so rapidly that they make long-term planning that requires a comprehensive and lengthy analysis of already outdated data impossible, even for those organizations that can afford it. Instead, there is a strategy to gradually, step by step, build up the capacity of information systems. On the other hand, changes in technology lead to more and more new solutions and lower hardware prices, potentially making the information systems architecture more flexible.

  • How does a business analyst help to reduce costs and minimize risk in development projects?

    How does a business analyst help to reduce costs and minimize risk in development projects?

    Overview

    Perhaps your project is unique and doesn’t need a business analyst. Can it be so? Who should be responsible for business analysis in IT projects? And should they? Such questions are sometimes encountered by company executives when they start developing a new software product.

    Many people think that in order to automate business processes or, say, to create a site, all they need to do is to find programmers and explain to them what is required.

    If you’re planning to develop your own site or application, you probably already know who should be on the team. A team usually includes developers, testers, a project manager who will keep track of everything and provide reports, and at least one analyst. And while the other key roles and their importance to the project usually do not cause questions, the role of an analyst and the tasks of this expert sometimes stay unclear to some people. 

    Reasons why customers don’t see any sense in working with a business analyst

    • Adding an analyst to the team increases the development budget.
    • The previous experience of interaction with an analyst was unsuccessful. For example, because the customer did not see the results of the work conducted by this specialist.
    • The customer thinks that the development team will be able to get requirements from him/her directly.

    Business Analysis. Why does it matter?

    Bringing together business logic and technical models is not easy. Even if customers have a basic understanding of the principles of software development and exactly know how they want to automate their business, they will not be able to create a perfect technical task, which would fully satisfy the development team and answer all the confusing questions. The time required to produce such a document would exceed rational limits and the process would take unreasonably long.

    Business analysts act as mediators between the client and the development team. They identify needs and offer effective solutions with minimal risk. 

    A specialist in this area does not need to know the technicalities and subtleties of development in detail. The tasks of a business analyst are to study the subject area and its specifics, understand the customer’s task and propose an effective way to solve it. 

    In order to exactly and correctly understand the requirements for a software product it is necessary:

    • to understand the business schemes and key processes according to which the company works;
    • to find out the roles and functionality of the in-charge specialists;
    • to fix the existing document flow, etc.

    The detailed business model that the business analyst fixes becomes the foundation for software development. It will be the basis for improving, automating, and optimizing the company’s business model for the benefit of the client.

    The modern approach to software development allows effective remote participation of specialists of different profiles in the process of building software solutions. For becoming a full-scale team member, the business analyst, along with the customer and programmers, gets access to various project management and collaboration services.

    For example:

    • general project management can be performed in the Teamwork system;
    • Jira is used to track errors and changes;
    • for detailed documentation, the wiki system Confluence is used.

    A business analyst should: 

    • choose the optimal solution; 
    • prepare requirements for it; 
    • assess which functionality is the most important to the client;
    • prepare and coordinate documentation for developers. 

    Business analyst’s tasks:

    • Introduction to the client’s business. The business analyst explores the area the project is related to.
    • Identification of business needs. The analyst has to define what software solution the business needs and whether it is needed at all, what issues it should solve. After that, the business analyst, along with other team members, proposes their variants for the client. The client makes a choice.
    • Participation in the development of requirements for the system. This expert takes part in discussing and fixing all sorts of subtleties (the number of buttons in the application, their color, the need for a personal account, font, development timeline, start of testing, etc.).
    • Preparation and harmonization of documentation. The business analyst presents a detailed document outlining all the requirements for the system. The client harmonizes it.
    • Assistance in formulating tasks for developers. The business analyst provides documentation to the team leader or team and gives explanations. Answers related questions from the team, and, if necessary, checks the answers with the customer.
    • Participation in product delivery. During the product review process, the analyst helps to resolve disputed issues. This specialist identifies any additional requests the customer may have, and passes them on to the team. The main task at this stage is to allow the customer to make changes to the project so that the initial agreements are not broken. 

    In addition, the task of the business analyst is to think through all the variants of events. For example, a request from a customer often describes only a positive situation. 

    As a result, the business analyst provides optimal two-way communication between the development team and the customer and participates in finding solutions when crisis situations arise.

    Benefits of business analysis

    The business analysis makes the project better. Analysts show points of growth, so the client understands which features of the future product are the most important. This helps discard unviable ideas and saves money and time on development.

    • Lower costs.

    The realization of a project is more difficult than it seems at first glance. Without a business analysis, there is a risk of overpayment. Without a precise specification, developers will encounter unexpected requirements and difficulties. They will remake the same code over and over again, and development will be delayed. Without a business analysis, you run the risk of a non-viable product that will need additional money to refine. In the worst case, the work will have to be started all over again, which can result in a doubling of the budget.

    • Reduced development time.

    With business analysis, developers already know exactly what to do and how to do it before they start a project. A ready-made specification helps plan the work in the best possible way and speeds up development.

    As a result of the business analysis you will receive:

    • A complete project specification, which includes a description of all functions and user features envisioned in the product;
    • A visual prototype of the product, showing the device and features of the user interface.

    The specification is a ready guide for developers, and the visual prototype is a visual manual for designers. With these artifacts, it’s easy to get development started.

    How will a business analyst help the project?

    Description of business requirements:

    • The more precisely the requirements are described, the lower the probability of additional costs is.
    • Without a business analysis, the project is developed according to the Time&Material model, which may lead to great risks. A competently prepared technical task saves the budget and allows you to get a realistic forecast of the product delivery time.
    • The questions that the analyst asks at the specification stage will come from the team within the development process. And in this case, two variants are possible: 
    1. The developers will constantly distract you. When you can’t respond right away, it will affect deadlines and may cause downtime;
    2. The developers will make decisions at their own discretion. And it’s highly likely that in some aspects your opinion will not coincide with theirs. You’ll have to remake the functionality. If you add the analytics stage, the developers will address all questions to the analyst.

    Summary

    Business analytics is aimed at ensuring the following moments:

    • the product matches the customer’s vision;
    • the product helps the business and users achieve their goals;
    • the risk of unforeseen situations is minimized;
    • the project is technically implementable;
    • the team has a single vision of the technical structure of the project;
    • the internal structure meets the requirements related to security, speed, loading and extensibility;
    • the necessity of questions to the client during development is minimized;
    • the amount of rework and modifications is minimized;
    • project success metrics and a system for tracking them are defined;
    • the client understands how users interact with the product, and it is possible to make a reasonable plan for product evolution.

    The combination of these factors determines the success of the project and the satisfaction of the client. The analyst performs some of the tasks together with other team members, and some of them should be performed independently.

    By excluding the analyst from the development processes you take serious risks, especially if you need to develop a complex product. Yes, you can save money by reducing the number of team members, but it will also increase the volumes of reworks, the project’s cost, and the time needed for its development.

    Successful projects can only be created by a team.

  • The importance of documenting your system (and using the documentation)

    The importance of documenting your system (and using the documentation)

    Overview

    There was a time when documenting the system meant adding comments to the code. When a developer needed to recollect how a particular functionality was done, reading the comments in the code was enough. Well, it might make some sense when the system is simple and the development team is small. However, for large projects and big companies, the reality is completely different. There are various teams working in parallel with different modules, and it’s difficult to track all the changes being done and make everyone aware of them.

    As software becomes bigger and more complex, the only resource that can help developers, testers, and product owners to keep track of all existing features, restrictions, and parameters is a good knowledge base, which can be translated into system documentation. However, such documents usually do not exist or, if they do, they are not updated or viewed frequently. Over time, such documentation becomes useless and it’s ignored by the whole company for not reflecting the current design of the projects. Besides, no one gets encouraged enough to “fix” the documentation, since it may sound worthless.

    System documentation not only provides guidance for the whole team and users, making the development and testing easier, but it also becomes excellent training material for the company’s newcomers and new customers.

    This article goes through the classic Five Ws (what, why, when, where and who), plus, a “how” to detail the importance of documentation and actions to keep it up to date with little effort.

    What?

    To begin with, system documentation is a set of documents that details every existing resource of the project, followed by a detailed explanation, dictionaries, and examples. This set of documents can be classified into different areas of the system: product (functionalities), specifications (prerequisites to use it), end-user (tutorials for customers), and processes (companies’ internal patterns and standards). As noted, when properly employed, documentation can provide useful information for every role in the company, and could be compared to an internal “search engine”.

    Documentation normally consists of web pages shared with all collaborators, so they can view, edit and watch modifications. For this reason, this type of documentation sometimes is referred to as “Wiki” by some companies, as a light reference to Wikipedia, where anyone can contribute to the content.

    Why?

    There are many reasons to create and maintain the system’s documentation. First, let’s break the silence: as the software gets bigger and more sophisticated, it’s almost impossible to remember all the pages, screens, settings, parameters, restrictions, and especially the business logic of every functionality. Even if a developer and tester worked on a specific feature in the past, it’s very unlikely that they will remember all the conditions after two or three years, or maybe even less than that. Let’s keep in mind the simple fact that we are humans, and we have a limited “amount” of memory available to remember long-dated events. Documenting the system is a measure to protect the memory from forgetting what was implemented, thus, saving plenty of time trying to remember how the functionalities work. And, as you already know, saving time is saving money.

    Secondly, many software development companies have a similar problem: some specific pieces of code can be understood and maintained only by a specific group of developers. I know it probably rings a bell with you. When a functionality needs to be fixed or improved, it goes straight to a particular developer, who has initially implemented it. This developer, then, becomes the only one who can interpret the logic behind it. This is an effect called “Code Ownership”, which takes to the classic phrase that every development team has probably already heard: “If that developer leaves the company, who is going to work on it?”. Instead of arranging training, workshops, and presentations to spread the knowledge (which consumes time), this effect can be easily resolved by using system documentation. In other words, if the functionality is properly documented, anyone can work on it. It will not only eliminate the Code Ownership effect but will expand the knowledge throughout the development team(s).

    Moreover, documentation helps the company’s newcomers to understand the system’s basics and the aspects of how processes are executed in the company, especially in terms of methodology, estimates, hierarchies, and ceremonies. In this case, it works as training material and may minimize their learning curve, which means that new developers can start working on the software sooner than expected.

    Who?

    This is a company’s particular decision. System documentation can be maintained by developers or testers right after the functionality is modified. As they coded and tested the functionality, they have all the relevant information to add to the documentation, including the restrictions and caveats. No one will have the same background as them, so, the least they can do is expose this background in a form of documentation. After that, this documentation is viewed by the support team (to set the functionality up for the customers), product owners (to prepare presentations), other developers (who will fix or improve it), testers (to validate test cases and write automated tests) and infrastructure engineers (to build hardware/software required specifications).

    Alternatively, the company can “create” the role that will presuppose writing documentation and assign it to a collaborator, who will be responsible for feeding it and checking if the existing documents are still valid. In some cases, documentation might also be updated by product owners, since they are aware of what has been agreed with stakeholders and often give them presentations of new features.

    When?

    As soon as possible! For instance, for product documentation, when any functionality is improved, changed, or fixed, a developer or a tester should be responsible for updating the corresponding section of the system’s documentation. As part of the team’s process, it can be added as a step of the quality assurance or even part of the “Definition of Done”, in case the company uses agile methodologies. This is one of the keys to not letting the documentation gets outdated. If it’s not part of the process, it’s very likely that it will be forgotten and, as consequence, be ignored in the future.

    Where?

    Although documentation can be presented just in the form of simple documents shared with the whole team, there are exclusive (and excellent) tools to document software, which provide good opportunities for collaboration, rich text formatting, cross-linking, instant searches, attachments, and integration with third-party applications, such as version control systems and file storage platforms.

    Documentation is often stored on the company’s local servers which should be backed up with high frequency given the importance of the documents. As an alternative, there are also cloud solutions, that companies can use to build their own infrastructure.

    Most of these tools can be found, evaluated, and acquired online, such as Confluence, GitHub, Nuclino, ProProfs, Notion, and Sharepoint (if the company uses Office365 business).

    How?

    There is no single structure for the company’s documentation. Each company has different projects and processes, which results in different patterns of documenting the system. However, there are some aspects that should be common among them: clear communication, formatting, and glossaries. Using product documentation as an example, it’s recommended to include at least the following sections:

    • Summary
    • Purpose of the functionality (the issues that it solves and set tasks)
    • Features (a list of operations that the functionality provides to the final user)
    • Workflow (how to get to the functionality in the application)
    • How to set it up (settings, devices, drivers, and additional software needed)
    • Parameters (keys, files, or flags that change the operations)
    • Known errors (and how to act if they appear)
    • Technical details (modules, packages, classes, components, and libraries used)
    • Changelog (if applicable)

    Also, it’s extremely important to write the content using clear language, avoiding abbreviations, informal titles, low-level terms (technical), and imprecise information which has not been verified yet. A good suggestion is to have in mind that someone who has no knowledge or experience of working with a system will land on the page and try to understand what it conveys. If specific business logic-related terms are used, do not forget to provide a glossary explaining each of these terms. That’s what cross-linking is for!

    Take advantage of rich formatting: add headers, tables, images, attachments, internal/external links, and text styles to highlight important aspects. A well-documented page is pleasant to the eyes and increases the chances for the readers to understand most – or all – of the provided content.

    Creating hierarchies for the pages is a good practice as well. Every page should be placed under its corresponding section, which can be based on the application’s modules, menus, versions, or other parameters such as region, country, customer, etc. Arranging the pages in a consistent and organized structure helps find the required information quicker. And also try to make use of labels, categories, and tags. They help filter pages and take the users directly to the page or subject they are looking for.

    Types of documentation

    Just a quick reminder that system documentation can be categorized into different areas, such as

    • Product documentation: features and business logic.
    • Technical specifications: hardware and software prerequisites to install the application.
    • End-user documentation: generally used as guidance, tutorial, or training for the final users.
    • Process documentation: methodology, estimation plans, schedules, and standards that the teams use.
    • Hierarchy of the company: it lets the collaborators know who they should contact in any case.

    Conclusion

    There is a misconception that software documentation is needed only when the code is not properly documented. But there is no relation between these two types of comments. Comments on the code often reflect technical details, while software documentation covers all other aspects. Besides, testers, product owners, and support specialists generally do not have access to the code or, if they do, they do not know where they can find the necessary information.

    There is another misconception that documenting software is a “waste of time since no one reads it”. That’s also not true. As mentioned in the “Who” section, different roles may need to have a look at the documentation – tomorrow, next year, or in five years.

    If earlier it was considered that software documentation was optional, now it has become mandatory. If a company seeks to build cross-knowledge teams, remove dependencies and save time, it must allocate effort to create and manage good documentation. It’s not a spend. It’s an investment.

  • How-to: 5 Practical steps of migrating a legacy system to the Cloud

    How-to: 5 Practical steps of migrating a legacy system to the Cloud

    Overview

    Let’s start this article with the assumption that your business has already decided that migrating a legacy system to the Cloud is a must. It can be for the reasons of the ability to sustain an ever-growing demand for IT services, expanding online sales, developing new services to support business workflows, and many other reasons.

    With that, migrating a legacy system to the Cloud can be a daunting task. There are numerous questions, which come up immediately after the decision is made, such as:

    • What Cloud provider to use?
    • Which parts of the legacy system should be migrated to the Cloud?
    • Where to start and what are the practical steps to go through?
    • What risks should we take care of and mitigate along the way?
    • What are the exact KPIs to show that the migration has been a successful move?
    • And many others.

    However, with careful planning and execution, this can turn out to be a relatively smooth process. And in this article, we will provide an outline of the steps required to migrate a legacy system to the Cloud, as well as some tips for making the process less bumpy or even straight as a highway.

    Step 1: Evaluate the business case for migrating to the Cloud

    The first and foremost warning we’d like to issue is not to run after hype or hot keywords. Cloud, Microservices, AWS, Azure, Google, Machine Learning, AI, Quantum Computers, and so on – all of them are real buzzwords today. 

    But there is still a question: will your business benefit from this or any other technology? Will this migration open up new pathways to growth and revenue? Will your key employees support your initiative and go with you? Or, will it all turn out to be a disaster and lead to a waste of resources?

    Invest much more time in understanding, verifying, and planning than in actual execution. Learning, thinking, and discussing are much cheaper compared to fixing errors in the real world, when you have invested money, hired people and then let them go, and lost your clients and revenue.

    So, let’s take a look at the most important question to ask yourself before making a decision to migrate a legacy system to the Cloud: what are the factual benefits your business sees from moving the legacy system to the Cloud from the perspective of key resources (time and money)?

    Big and thick note: You need to decide on a Cloud provider that you will be ready to go with! 

    Yes, the top 3 Cloud platforms – Amazon AWS, Microsoft Azure, and Google Cloud – provide very similar services and features. With that, most of the time, there is a certain affinity between certain types of businesses and these key players. 

    Enterprises that mostly work with Microsoft technologies will almost undoubtedly prefer to continue their relationship with Microsoft. Companies that develop a lot of products in Java, for instance, will have a very natural inclination to go with AWS. While some key players who live on top of Google Services might decide to keep it with the Google Cloud. 

    And no, nothing is put in stone. We strongly advise attentively reviewing different Internet resources and comparing various offerings of the 3 largest Cloud providers, specifically focusing on your needs: Compute (Hardware and VMs), Storage and Databases, Availability Zones, and quite important – Pricing and Cost structure.

    Let’s now dive into some of the key questions any business has to discuss to move forward with identifying the right goals.

    1. Will migration allow increasing the system power without buying expensive hardware?
      After all, Cloud is known for its ability to easily scale CPU, Storage, and other key resources without the need to purchase the hardware, only by paying for the resources you use.
    2. Are you ready for the situation that some of the legacy components can be dropped and you will need to replace them with the Cloud features?
      Today’s Cloud providers try hard to encompass their clients with everything and anything an enterprise might need: hardware, VMs, OSs, Security, Messaging, Databases, and much more. So, businesses can benefit from it as it is possible to replace an outdated database with a modern one and migrate from a problematic Linux distribution to more popular technology.
    3. Are you planning to find new specialists, possibly Cloud partners?
      As Clouds are gaining more and more popularity, people learn these technologies, get certified, become experienced, and are easier approached, compared to specialists who work with some older, end-of-life technologies. However, you still might need to work with those experts who know how to deal with your legacy software.
      Moreover, since a lot of maintenance tasks are now moved over to the Cloud, you might have less need for those specialists who deal with hardware and system maintenance. As a result, you can also reduce staffing costs.

    Once these and other questions are asked, discussed, and brought to consensus it is time to plan the move, taking a wide look at the end goal and diving into the small details, where, as we know, the devil dwells.

    Step 2: Establish a plan for migrating data and applications to the Cloud

    Now when we have a fairly clear idea about our business goals, let’s review how to approach the migration itself. And at this point, it will be hard to create a realistic plan without having the chosen Cloud specialist on board. Be it a consultant, in-house employee, or a Cloud’s own pre-sales engineer, such a person can provide invaluable insight, allowing the creation of a realistic plan with higher chances of success.

    Back to the plan. What we would suggest reviewing is:

    • What layers of the legacy system do you intend to move over to the Cloud?

    It can be a database only or messaging and events, or actually the application logic, or all together. We hope it is clear that there are some extra choices to be made. Every migration step is a technological project and there are some related risks that you should try to mitigate and take care of.

    Migrate database to the Cloud
    Public Cloud Infrastructure
    Migrate app logic to the Cloud
    Migration of messaging to the Cloud
    • How is it possible to ensure the availability of both legacy and new systems during the migration period in parallel?

    This is an interesting and quite complicated question. After all, no business can suffer prolonged downtimes. And usually, one-shot migration of large databases from zero to 100% requires a substantial downtime. An alternative variant is to create a Cloud data store in advance, where both historical data and ongoing new pieces of information will be kept along with the legacy database.

    As a result, all pieces of information can be found at any time in both data stores – the legacy one on-premises, and the new one in the Cloud. This allows, at a certain point, moving operations entirely to the new database in the Cloud. Voila! Now your data is securely hosted in the Cloud and can be easily scaled. And you will have the possibility to enjoy reduced maintenance costs and security concerns.

    Similarly, a special approach can be used in relation to the location of your app. The same application can be served from the legacy location and, once it is already available, from the Cloud, based on some smart API / Traffic routing switch. As a result, the new application can be tested, even in the production environment, but with only a small group of test users (so-called Blue-Green deployment model), and only after it is proven to be stable and satisfactory, the traffic can be fully switched over to the Cloud platform.

    • Last, but far from least, monitoring, alerting, and maintenance, must be established for the Cloud deployed system. 

    It might require studying the peculiarities of new tools that are available on the Cloud, hiring new specialists, and establishing new organizational processes in order to make sure that the Cloud hosted system will be covered with operational monitoring and alerting.

    Step 3: Identify potential challenges and solutions during the migration process

    This is a true brainstorm that is needed here. All hardware, software, and operational specialists who work with the legacy system together with key users, and management must sit together and pour thoughts and worries about what could go wrong during the migration. And shortly afterward, it is necessary to come up with valuable suggestions to mitigate the discussed risks, implement solutions, expand business processes, etc.

     This approach ensures that everyone is onboard, there will be less finger-pointing and finding someone to blame if (or when) something goes wrong. Such migrations are not simple projects. There can be a lot of things no one can predict and foresee, and having an empowered team, who can handle those, is invaluable. It is a must to ensure success.

    Step 4: Manage the migration process and ensure a successful transition to the Cloud

    Now it is time for a good Program Manager. Migration of a legacy system to the Cloud is a full-blown project and can be even divided into multiple projects. They must be outlined with a clear beginning, milestones, and end. Not managing this as a project is a sure recipe for waste of time and money, because it will be extremely hard to push to completion otherwise.

     And as part of modern project management, an agile approach works the best. Short-term goals, burndown charts of tasks, frequent standups to track progress and resolve impasses – all this helps with moving toward the finish line with everyone aligned and onboard. 

    One critical part of this process is constant learning of the ropes – the modern Cloud is a sophisticated forest of services, configurations, and capabilities. Things might not be known in advance, and might not work as expected right off hand. It means that issues must be tracked, understood, and resolved. Clear accountability and responsibilities will ensure that the right people are on the right tasks and they work on them as part of their work duties. 

    One last thing – you don’t have to struggle alone! The Cloud provider’s team will be more than happy to make everything in their power for you to succeed. It means – advice, support, learning resources, discounts, prioritized resolution of your issues, solution architects and engineers at your disposal. Combined interests can go a long way and it’s worth keeping that in mind.

    Step 5: Retrospect and optimize

    Among the benefits of an agile program and project management process, we should name the opportunities for frequent retrospectives: brainstorming on what went well and should be enhanced, what went sideways and should be optimized or fixed in the future, and of course – what knowledge and skillset are lacking and must be pursued and acquired by means of internal education or with the help of external consultants.

    If you want to succeed, you must celebrate successes, if you plan to get more failures, put all of your attention to failures. The lesson is: you need to frequently celebrate achievements, successes, and milestones reached, and do the necessary analysis of the losses and failures to learn from them and improve. That way you’ll grow the culture of achievement and success, which in the end will help to reach the ultimate goal: a legacy system mitigated to the Cloud.

    If you are interested in using cloud services but you are not sure which platform you should opt for in order not to overpay, contact us! At Amberteq, we have an excellent understanding of the specificity of this industry and will be happy to help you find the most feasible option. Before providing you with the most appropriate variant, we will deeply analyze your case and will offer you the variants based on your individual case. 

    by Alexander Stern, senior content contributor at Amberteq

  • How Software as a Service works

    How Software as a Service works

    Overview

    SaaS – software as a service – is a way of delivering apps over the internet. The applications provided by different tech companies are intended for performing a wide variety of tasks, remotely, via computer or mobile devices.

    Hiring and canceling services at any time has never been easier than now, thanks to SaaS (Software as a Service). 

    The introduction of SaaS was a  true revolution in the user consumption model and in the way how brands are making their solutions available.

    Many prominent companies are primarily using SaaS. They take advantage to increase profits and reduce costs.

    In this article, you can find out how SaaS works and what benefits your business can enjoy.

    What is SaaS?

    SaaS is a way to deliver systems and applications over the Internet, to store and manipulate data. A SaaS platform does not require users to purchase, install, and maintain software and hardware, as everything is available online.

    The service provider takes full responsibility for updates and access management, including information security, availability, and performance.

    The difference between PaaS, SaaS, and IaaS?

    IaaS is Infrastructure as a Service.

    IaaS includes:

    • Server infrastructure – specialized equipment that is intended for collecting, processing, and storing big amounts of information.
    • Virtual servers (VPS/VDS) that can be used to install different programs. Sometimes a provider offers servers together with operational systems in order to deploy necessary apps faster.
    • Network settings that ensure the connection of virtual servers with each other, with external servers that are owned by a customer, and with the Internet. Among them we should mention:
      • the availability of servers for each other and the external network, routing of servers’ network connections;
      • load balancers that prevent the overloading of servers by distributing incoming traffic between them;
      • VPN, a technology of encryption of data that will be transmitted by a company from its physical data center to a cloud;
    • User access management. For example, you can restrict access to some particular virtual machines or allow viewing data but prohibit editing.
    • Cloud storage for keeping files, data, and backups. From simple cloud disks that some users deal with they differ by practically unlimited storage space and high speed of getting access to data.
    • Backup and disaster recovery servers that help your infrastructure to stay resilient to failures and data losses when separate units fail.

    By renting IaaS you get virtual servers, network settings, and cloud storage that a service provider is responsible for. At the same time, you get access to an operational system of virtual servers and more freedom in setting up and installing apps.

    PaaS is a Platform as a Service.

    A key difference between PaaS from IaaS is that here you have some particular tools. For example, a database management system, machine learning, big data processing environment, and enterprise IoT. They should be set up in accordance with the company’s needs but you do not need to build them from scratch. It allows for saving developers’ time. For example, engineers do not need to develop a database. It will be enough just to add the necessary information and work with it.

    And in this case, you do not have access to an operational system, settings of virtual servers that a PaaS is based on as well as low-level settings of the platform itself. A provider is responsible for their optimal configuration and you as a client do not need to take care of settings, updates, scalability, and security. You get access only to interfaces of a platform itself.

    PaaS servers help to save time on the configuration of the infrastructure that is required for the company. You can add the necessary set of services. The main issue is to make sure that a service provider already has or will have the necessary solutions in the future.

    SaaS is Software as a Service. 

    It is a fully set up and ready-to-use program that can perform some particular functions. The only difference between SaaS technology and a program on a smartphone or a computer is that software is placed in a cloud. You can get access to it via the internet and the program itself works on virtual servers and doesn’t occupy memory space and resources of your computer or smartphone.

    IaaS and PaaS for SaaS can function as infrastructure and development and deployment environments: software developers use cloud facilities to build, launch and store SaaS apps, and ensure access of users to them.

    If you have a task that can be fully solved by a SaaS platform, it will be cheaper and faster to use it, instead of developing a solution from scratch.

    Benefits of SaaS

    Companies offering this type of service provide better efficiency in routine business processes for clients.

    • Reducing startup costs

    High costs for licensing, maintenance, and IT infrastructure are business practices that are becoming a thing of the past.

    With SaaS, applications can be accessed from any device, whether it’s a desktop computer or a smartphone. It is enough to download the application or register on the software site and connect to the Internet.

    • Access anywhere

    All your company needs to use SaaS is an Internet connection. All software data as a service is stored in the cloud.

    Nothing is lost, unlike the cases with traditional software, which can be affected by computer or smartphone failures.

    • Customizable options

    At any time, your company can buy additional packages or customize the service to further improve its efficiency.

    • Automatic updates

    With SaaS, updating and maintaining are simplified because they happen automatically without increasing the amount of manual work by developers.

    Have you ever been in a situation when you had to wait for a technical specialist to maintain your software? Then you know what a waste of time means. This is something that doesn’t happen when your company uses SaaS.

    • Integrations with other systems

    Most SaaS vendors offer integration with other systems. Using APIs (Application Programming Interfaces), you can augment your software with other features. In this way, you can easily manage the changing needs of the business.

    • Variety of packages

    Your company can offer customers different packages with different features. That way, customers can choose the one that has the best cost-effectiveness in relation to their budget. To change the package, simply upgrade it.

    • Pay only for what you use

    Your company only pays for what you use. You no longer have to pay for a package license that you do not fully use.

    Other advantages of using SaaS: 

    • Time and work optimization; 
    • High accessibility; 
    • Simplified integration and Security.

    What are the best examples of SaaS?

    Google Drive is a type of SaaS. It offers an online file hosting service that you can access whenever and wherever you want.

    Today there are several SaaS that provide movies online so you can watch them at any moment. A prime example is Netflix and its competitors such as Amazon.

    Pipedrive is a technology solution for small businesses that helps to manage sales processes.

    Among other examples, we can name Paypal, LinkedIn, and Adobe.

    The difference between SaaS and traditional software

    The main difference between SaaS and traditional models is the way data storage is organized. Traditional software has to be installed on the client’s computer. With SaaS, the data is in the cloud and can be accessed from anywhere with an Internet connection. So, SaaS is a cheaper option because it does not require paying for licenses or installing software. Updates occur automatically, unlike the traditional model, which requires continuous maintenance.

    SaaS also does not require a large amount of memory on the company’s server, as the SaaS software company is responsible for this. Moreover, SaaS companies can also offer a personalized service according to the needs of each customer.

  • Low-Code vs Traditional development

    Low-Code vs Traditional development

    Overview

    When is it sensible to use low-code solutions? And when should you use traditional approaches to software development?

    Let’s compare the pluses and minuses of low-code and traditional development methods in order to detect which of them will be more appropriate for your apps.

    In this article, we will tell you what low-code is, how it is related to traditional app development methods and how to integrate it into a wider business growth strategy.

    What is Low-Code?

    Low-code is an approach to the creation and modification of apps when a developer adds some elements by using pre-coded modules that are often chosen with the help of a drag-and-drop interface for building the necessary functionality.

    What is traditional development?

    Traditional development (it is also known as custom software development) presupposes coding from scratch (from the beginning to the end). It requires strong professional skills and deep knowledge of technologies and frameworks.

    Low-Code vs traditional development

    PropertyTraditional developmentLow Code development
    DevelopmentDevelopment with manual codingDevelopment with a graphical user interface (visual modeling) 
    ToolsFrameworks and programming languagesApp development frameworks
    Development speedTraditional development requires complex coding and can take 2-8 months.It is possible to create a working app within 1-3 weeks.
    CustomizationWith traditional coding, an app can be customized for particular requirements. The possibility to add new settings to an app is rather limited.
    FlexibilityChanges can be introduced rather slowly. But following the practice of flexible development, apps can become flexible. Low-code apps are more flexible as there is a possibility to introduce changes quickly. All bugs can be detected and immediately fixed.
    DeploymentIt is possible to freely deploy an app on any platform.The deployment doesn’t take long. But you have access only to a restricted range of platforms. Depending on the used tools for working with low code, it is possible to deploy apps only on supported platforms.
    Technical maintenanceIt is difficult to regularly update and support apps. You need to have a special team that will be responsible for updating the code.It is simple to maintain the app. When a company is updating a low-code platform, apps are updated automatically. As a result, for regular maintenance, minimum resources are required.

    Which development method should you opt for?

    In this section, we will enumerate the cases when it will be better to choose low-code development and when it will be more sensible to invest in traditional web development.

    When should you opt for low-code development?

    • When you need to quickly build an MVP (Minimum Viable Product). If you want to create prototypes or introduce a working app to attract investors, we don’t recommend you pay thousands of dollars for creating an MVP. Using low-code development, you can create an MVP that will be associated with low costs and low risks. Low-code MVP development is faster, cheaper, and easier than traditional development.
    • When you are building static websites and web apps. When you are building a static website, there is no need to write HTML and CSS codes. You need just 5-10 hours to launch a static website or web app.
    • When you want to test new ideas. If you have an innovative app idea that can be valuable for your company but you do not want to spend time and effort of your team for making sure that you really need to transform it into a real product, you can use low-code web tools to create your app just within 1-3 weeks.

    Benefits of low-code development:

    • Speed. Developers can create an app faster, using the low-code approach as it doesn’t include some parts of manual programming work.
    • Re-use. Low-code modules can be easily re-used and  transferred between apps, though these actions can be restricted by the requirements to use the same low-code platform.
    • Cost. As the development that is based on the low-code methods takes less time, it can help to reduce general expenses for your business.

    When should you prefer traditional development?

    • When you need to create highly customized solutions. If you need to have features and possibilities that are not offered by standard solutions, you need to create your apps using a traditional approach.
    • When high performance is required. With traditional development, you can optimize every code line for reaching the highest performance.
    • When you need to integrate external services. If you want to integrate your app with other systems or already existing databases, the low-code method won’t suit you.

    Benefits of traditional development:

    • Control. Developers have a higher level of control over the way their code is written and their apps are structured.
    • Flexibility. In traditional development, you can use any programming language and development platform.
    • Deployment. Apps that were developed with a traditional method can be deployed on every platform that developers will choose to support.

    Combine low-code and traditional development methods

    Low-code platforms can’t fully exclude the necessity to have traditional development skills. It’s better to say that these platforms are intended for providing all team members, including developers and non-developers, with the necessary tools and resources that they can use.

    The majority of developers use low-code methods in some parts of their working process. It lets them optimize their work thanks to ready-made app templates and convenient interfaces. They can faster create and scale their apps and integrate them with external applications and services.

    The best way to benefit from the advantages of low-code development is to stop choosing between low-code and traditional methods. Instead of that, you should find the right balance between these strategies. 

    Enhance traditional development with low-code principles. Let your in-house team focus on creating a unique app while repeated coding tasks will become a responsibility of a low-code platform.

  • Major benefits of microservices

    Major benefits of microservices

    Overview

    Microservices are an architectural approach to building applications.

    As an architectural framework, microservices are distributed and loosely coupled so that when one team introduces some changes the entire application won’t be affected. The advantage of using microservices is that development teams can quickly create new application components to meet changing business needs.

    The growing adoption of microservices can be explained by the fact that in certain situations, this approach allows the development of multiple services at the same time, which increases the productivity of the team. In addition, each service can be tested separately. Apps powered by microservices run faster and more efficiently than applications of other types.

    Thus, with the use of independent services and with little or no coupling, the possibility of adapting languages, tools, and frameworks increases. And the risk of failure decreases because if there is a problem in one part of the system, the other parts continue working.

    What are microservices?

    As we’ve already noted microservices, also known as the microservice architecture, is an architectural style that structures a solution as a collection of loosely coupled services.

    The microservice architecture enables continuous delivery and deployment of large and complex applications. It also allows an organization to evolve its technology stack.

    Essentially, this set of services is deployed as a complete application in its own way, and all these services work together to make up the entire application. All microservices follow these patterns: they are organized around business features, they are loosely coupled, they are independently deployable, and they are testable. Namely, thanks to being loosely coupled, microservices can be independently built, deployed, and scaled.

    When should you use microservices?

    It is important to understand how and when to use the microservice architecture. Factors such as business complexity, team structure, and task distribution are relevant points that must be considered. Otherwise, the chance of using the microservice architecture and failing grows considerably.

    Here are some cases when you should use the microservice architecture:

    • When there is a need to scale an individual component or implement it quickly.
    • When you need to rewrite legacy systems in other languages.
    • When the monolith performance at the system and business levels went bad.
    • When the application is big enough to be broken into microservices.

    When not to use microservices?

    Please, have a look at the following cases when it is better not to use the microservice architecture:

    • When the system is not very complex

    It is crucial to make sure that it will be really feasible to create microservices for each part of the system.

    • When the team is small and doesn’t have enough experience

    Building a microservice structure requires a large team that is prepared to perform this task with the necessary level of quality. To maintain and develop this model, it is required to have enough time and skills.

    • When you’re not sure whether you need to implement the microservice architecture.

    The reason for using the microservice architecture should be very clear. Before starting, it is necessary to be aware of the difficulties that will be encountered during the implementation. You should have a well-prepared environment.

    Major advantages of using microservices

    Agility: More agile development and deployment processes thanks to the possibility to work on each service separately.

    Loose coupling: As the services are unique, there is little coupling. This facilitates the entire process of maintenance, monitoring, and implementation.

    Flexible scalability: Every part of the system can be scaled independently. Thanks to this characteristic, you can also benefit from saving your expenditure on infrastructure maintenance.

    Flexibility for deploying heterogeneous technologies: Thanks to the fact that coupling is loose and services are independent, we can have multiple technologies communicating with each other. This gives you the freedom to use different languages ​​for each situation.

    Challenges for using microservices

    If your organization intends to move to the microservice architecture, please, keep in mind that you will need to change not only applications but also the way people work.

    The organizational and cultural changes can be, in part, considered as challenges, because each team will have its own pace of change implementation and will be responsible for a unique service, with its own set of customers. These may not be typical concerns for developers, but they will be critical to the success of the microservice architecture.

    Compilation: It is necessary to spend some time identifying the dependencies between the services. You need to be aware that completing the development of one service may lead to the necessity to build others because of these dependencies. You also need to consider how microservices affect data.

    Testing: Integration testing, like end-to-end testing, can be more difficult and important than ever before. A failure in one part of the architecture can cause another one later, depending on how the services are designed to support each other.

    Version Control: When upgrading to newer versions, keep in mind that backward compatibility may be broken. It is possible to solve this problem using conditional logic, but this can quickly become another challenge. Alternatively, you can go live with several versions active for different customers, but this solution is more complex in terms of maintenance and management.

    Deployment: To make deployment easier, first of all, you need to invest heavily in automation as microservices are rather difficult for manual deployment. Think about the way and order in which the services will be implemented.

    Logging: With distributed systems, you need to have centralized logs to unify everything. Otherwise, it is impossible to fully manage them.

    Monitoring: It is critical to have a centralized overview of the system to identify sources of problems.

    Debugging: Remote debugging via your local integrated development environment (IDE) is not an option and does not work with dozens or hundreds of services. Unfortunately, at the moment there is no single solution that will provide you with a convenient way to debug your apps.

    Connectivity: Think about service discovery, either centralized or integrated.

    Conclusion

    In general, when adopting the concept of microservices within the development team of a startup or company, it is good to remember that the team will gain agility. But it is necessary to ensure such conditions when the organizational culture will be able to adapt to the novelty.

    After all, the described method had a specific pace of development and implementation. So, the adoption of microservices can bring some initial difficulties, but with the right approach, you will be able to overcome them.