Migrating DynamoDB Data Across AWS Accounts

Database migration is one of the most critical and common aspects of cloud migration activities that DevOps engineers and cloud experts encounter on a regular basis. DB migration can also be one of the more complex problems to solve in such cases, since in spite of its frequent occurrence, a straightforward solution is not always readily available for it, due to a varying number of use cases and requirements for each customer application. For these cases, DevOps engineers need to think outside the box, be innovative, and develop a custom solution to fulfill the criteria for their specific use case.

In a similar occurrence, a recent development effort for one of our clients called for the migration of DynamoDB tables between two AWS accounts. Considering the extensive catalog of services and functionalities offered by AWS, one would assume they might have provided an inherent functionality to export the table backups to another AWS region or AWS account, similar to what is currently possible for RDS. However, I soon found out disappointingly that this is not possible. So I began my research for migrating DynamoDB data across AWS accounts.

I assumed that it would be easy to implement as you can probably create a small script to fetch all the data from a source table and make queries to add the data to a destination table. After hours of scouring Google search results, GitHub repositories, and Stack Overflow threads, I was unable to come across an appropriate solution that would work for my use case. The ones that I found struggled to handle tables with a large amount of data. In my case, I was dealing with a specific table that had approximately 200,000 items.

The AWS recommended solution for migrating data in this scenario contained a two step process where data was first exported to an S3 bucket. From this S3 bucket, the data could be either copied over or exported to another S3 bucket in the destination AWS account with the necessary permissions configured. The data could then be imported from that S3 bucket to the destination DynamoDB table to complete the migration process. In theory, these steps seem simple and straightforward right up to the point where you figure out that AWS has not provided any easy way to import data from an S3 bucket to DynamoDB. They do provide a way to export data from a DynamoDB table to an S3 bucket, but in order to import the data, the recommended approach is to use AWS Data Pipeline.

AWS Data Pipeline is a service that sets up an automated pipeline that can be run manually or on a schedule and the pipeline itself utilizes an EMR cluster to perform data migration and data transformation steps. The problem with this approach is that it is not easy to set up and it would definitely incur extra costs on the AWS account as it would deploy some resources in the EMR cluster which are going to be charged for the amount of time they are up and running.

Nevertheless, even with the already provided template to import DynamoDB data from S3, I was not able to setup AWS DataPipeline successfully nor could I get the logs to work in order to figure out what was wrong. At this point, I started looking into alternatives since it seemed that this solution would require more effort and time to make it work. 

A few suggested solutions involving custom Python scripts and Node modules simply fetched the data from a table and added all the entries to another table. This solution did not require the use of any additional AWS resources. So far so good. This seemed like a promising lead. However, as I proceeded with this solution I realized that it started to struggle at scale, with the migration time increasing for tables with more than 200,000 entries. It took around 3-4 hours to transfer 50% of the table entries, which was definitely not ideal. I needed a more optimized solution.

I finally decided to write a script of my own that utilized the asynchronous nature of NodeJS to achieve the desired functionality. The approach I used was to first fetch all items from the table using multiple scan calls until all of the table entries are fetched. I then proceeded to use the BatchWriteItem call to add items to the table; this call imposes a max limit of 25 items at a time. To cater for this limit, I divided the table entries into batches of 25 items and executed the BatchWriteItem call for each batch in an asynchronous manner so that the script does not wait for the response of one batch call to send another one. This approach greatly reduced the execution time of the script. It transferred the data from the table with 200,000 entries within 6-7 minutes, instead of hours.

The next problem I faced was that this BatchWriteItem approach was not certain to process all items and according to the documentation, it sometimes returned a list of unprocessed items. For these unprocessed items, I had to send a request again, which was also done asynchronously. The script would retry batch write calls on all the unprocessed items and wait for all the calls to be completed before checking if there are still some remaining unprocessed items. This process was repeated until all items were processed successfully and all entries from the source DynamoDB table were migrated to the destination table in a different AWS account. In between each retry call, an exponential backoff algorithm was implemented, a recommendation from AWS documentation. The algorithm works by introducing a small delay between each retry call and it would double the delay time after each retry. For example, if we start with a one second delay after the initial attempt at retrying the batch calls, then before the second attempt, there will be a two second delay, and in the next retry, there will be a four second delay, and so on.

For better understanding, the diagram below shows the complete workflow of the script:

In order to save fellow developers out there facing a similar problem, we have decided to open source the code for this interesting, unique, and highly efficient solution. The script has been developed by Xgrid in collaboration with our partner company, copebit AG. The code for the script is available in this GitHub repository.

We are planning to further optimize this script in the future and will also publish an NPM package for this solution so that it is modular and simple enough to be used by anyone. Further enhancements will be adding a CLI tool within the NPM package to make it even easier to consume.

Our team regularly faces interesting scenarios in our day to day activities while developing custom solutions and applications for our customers on AWS and other cloud environments. We plan on writing a series of blogs on other similar solutions that we have developed and are open sourcing in the future to share our exciting experiences and insights with other developers so that they can take advantage of these tools or solutions and enhance them for their own use cases and requirements.

About Xgrid

Xgrid is an IT services and cloud consulting company that has been working in the areas of Test Automation, Continuous Integration/Delivery, Workflows and Process Automation, Custom Application and Tool Development (with end-to-end UX design and UI development); all tied to private, public and hybrid clouds since it was founded in 2012. Xgrid specializes in the above verticals and provides best-in-class cloud migration, software development, automation, user experience design, graphical interface development and product support services for our customers’ custom-built solutions.

For more details on our expertise, you can visit our website.

About copebit AG

copebit AG is an innovative and dynamic Swiss IT company that focuses on Cloud Consulting and Engineering. Besides their requirement to always master the latest Cloud portfolio, copebit also offers project management from the classic way to the versatile world of agile methods.

For more details on their expertise, you can visit their website.

Read more

Software Quality Assurance – A Critical Cog in the Software Clockwork

Did you know that Quality Assurance (QA) dates back to the Medieval Guilds of Europe that developed and enforced strict rules for product quality? It wasn’t until World War II when statistical quality control techniques were implemented to test ammunition for performance. Read it for yourself. Nowadays, it is assumed that the only purpose of QA is to report potential errors at the end of the development cycle just before the product is released: a common misconception.

While textbooks and academic courses might tell you that Software Quality Assurance (SQA) is a manual or automated testing process at the end of the development cycle to ensure a quality release/ product, this is just not true. An increasing number of conglomerates and companies have realized that SQA is a mindset which introduces several activities and processes throughout the development cycle. It is a continuous and ongoing cycle which is deeply integrated with software development to guarantee high quality. Contrary to popular belief, SQA engineers do not just test systems and report bugs.

“Software quality needs to be seen at a wider perspective relating to “goodness”. Looking beyond the explicit requirements into the realms of product risks and investigation of unknowns, determining the amount of delight or despair the customer will have while using the software. That is to say, the scale of how good (or bad) the software is to use”

– Dan Ashby writes in his blog.

On top of corroborating a bug free release/ product, SQA practices make sure that the software being developed meets the quality standards of coding practices, adheres to defined compliances and general industry standards, all-the-while meeting the client requirements.

For an effective quality assurance of the software, QA engineers are involved in the planning stages of the Software Development Life Cycle (SDLC). They are part of the process wherein the customer requirements are analyzed and the implementation plan is developed. Early involvement and continuous participation of SQA engineers warrants an effective and comprehensive testing. They explore ways to automate the test cases while the feature/ software is being developed. Additionally, these experts also ensure code and product quality, and maintain records and documentation. Furthermore, they manage the impact of changes in the software which includes updating the test plan to incorporate the changes. Thus, SQA is an important cog in the Continuous Integration Continuous Development, and Continuous Deployment (CI/CD) process.

An effective SQA process reduces the number of defects in the final product, guarantees stability, and satisfies client requirements, resulting in an improved customer satisfaction and decreased maintenance cost of the product. The QA process lessens the chances of re-work, provides a sense of predictability, and saves time and money. 

How Our SQA Experts Do It

Among many ways to ascertain the quality for any product or release, there are methods in which Xgrid’s Quality Assurance experts ensure premium quality deliverables:

Shift Left Approach

Shift left testing is quickly becoming the industry standard wherein the QA team is involved in the software development cycle from the very beginning. Our testing and validation cycles are initiated concurrently with the analysis of client requirements. We follow this approach to identify bugs and issues at an early stage. This tactic reduces the development cost, thus increasing efficiency, customer satisfaction, and drastically expediting the development process.

Communicate Effectively and Timely

Communication is the key. While delivering a quality product in a short time-span, Xgrid makes sure that the engineering techniques are paired up with effective and timely communication to accelerate productivity and efficiency among the SQA and Dev teams. In all phases of SDLC, Quality Assurance and Developers’ teams at Xgrid are kept well-informed of any changes or new requirements. Our prompt, clear and focused feedback results in minimized confusions and promotes professional growth. 

Take Your Time to Test

Xgrid’s QA team does not test the application in haste. Instead, we take our sweet time with it because we realize that ensuring the best quality of a service/ product is not a race to be won. Rather, it is a continuous progressive cycle. Rushing the execution of test cases in a crunched timeline can have a negative impact on the quality of deliverables. We carry out Smoke and Sanity test cycles to make sure that major features are not broken. Additionally, minute details and non-critical functionalities are tested as per the available timeline.

Be the Tester End User

We, at Xgrid, wear the tester’s hat when testing an application’s functionality. However, when we  test for usability, our experts walk a mile in the end user’s shoes. Feature development and testing go hand-in-hand. We realize that if our testers do not use the developed feature as per the end user’s needs, the quality of the deliverables may be affected. 

To put things into perspective, let’s take a simple login page example: The user enters login credentials to proceed. The validation checks are added. The “Forgot Password” button works fine. Everything seems to be okay. But there is a high chance that when the user presses the back button, the credentials previously entered are pre-filled on that screen i.e. the fields have not been cleared.  In this case, the feature development is complete, validations are added, and the feature itself is QA verified. But this scenario, which is a normal end user behavior, leads to serious security threats.

User interaction with the feature is as crucial as its proper functioning. For this matter, the internal QA builds are tested as release candidates and the application is thoroughly tested keeping business needs in mind. 

Test the Product According to Its Maturity

Product maturity plays an important role in testing. A growing product undergoing major changes needs to be tested in all aspects. With repetitive test cycles, we radically reduce the number of bugs which results in a stable quality product. We follow the three stages of product maturity defined in Leading Quality

Validation: At this stage, the product is rigorously tested to be a good market fit and be stable on its own. Our approach here is to test the major user workflows without any critical bugs. We opt for manual testing in this phase since automation is not a priority because of the high development cost.

Predictability: This is the  stage where a product is stable in its major workflows and growing in terms of its users. The product becomes predictable at this point and therefore, this is the right time to predict any bugs that may occur due to development in the future. Our testing approach is detailed and exploratory. Automation is also introduced to run the regression test cycles.

Scaling: In this phase, the software is growing in the existing user scale. Even a minor bug can adversely impact a large number of users. There is an increased focus on scale and load testing. We test the product in detail to avoid even the smallest bugs and to increase its performance. This is a good time to look into the optimizations of battery, CPU and GPU consumption. Effective QA strategy is crucial at every stage, and given the nature of the product, a combination of these test approaches is also used.

SQA is a systematic process very similar to the software development life cycle. Development and testing cycles must be defined early on. The endless tasks of the SQA engineers are inclusive of but not limited to quality inspection, test case automation, code and product quality checks etc. They are the champions of monitoring every phase of the development process whilst adhering to company standards. Xgrid is a software company that delivers agile end-to-end testing solutions which reduce costs and increase efficiency, ergo, we deliver better digital products faster. So if you want to enhance your product quality without losing momentum, contact us at sales@xgrid.co.

Read more

Native or Cross-Platform Application Development: That Is the Question

Plethora of app options these days, no? Nowadays, our smartphones carry a profuse range of applications for just about everything. Gone are the days of hanging billboards, hailing a cab, or searching for rental apartments in the Sunday newspaper. Today, there are 4.4 million apps available on App Store and Google Play to meet our everyday requirements and make lives easier.

“90% of Time on Mobile is spent in Apps”

Source:Agilie

Developing an app is not a walk in the park which is why it requires a robust course of action and copious problem-solving. If you’re a first-time developer about to delve into mobile app development, the first and foremost decision to make is to choose the right platform for your app. This has long-term implications in terms of feasibility, functionality, performance and scalability.

There are two primary approaches for any mobile application: native, and cross-platform. Native app development refers to building a mobile app exclusively for a single platform in a compatible language. For example, a native Android app would require developing with Java and/ or Kotlin. A few app examples for native Android app development include Slack, Lyft, and Evernote developed in Kotlin. For an iOS app, however, you would use Swift and/ or Objective-C. A few app examples for native iOS app development include LinkedIn, WordPress, and Firefox developed in Swift.

Cross-platform app development intimates the process of creating an app that works on several platforms simultaneously. This is achieved via frameworks like React Native, Xamarin, and Flutter, where the product is deployed on Android, iOS and Windows. A few app examples for Cross-Platform app development include Artsy, Bitesnap, Bunch in React Native; Storyo, Insightly, Skulls of the shotgun in Xamarin; and Google Ads, Xianyu by Alibaba and Hamilton in the Flutter framework.

In 1995, Sun Microsystems created a slogan “Write once, run anywhere” (WORA), or sometimes “Write once, run everywhere” (WORE), to illustrate cross-platform benefits of Java language. True story!

Each approach comes with its own baggage of boon and bane.

So how do you take your pick? Dictated herein are the crucial elements to help you choose one over the other:

What to Consider When Choosing an Approach to Build Your Mobile App

  • Application Complexity and Platform Dependence

    If you are developing a complex application that requires access to low-level APIs like Bluetooth, you’ll want to go with native approach because it guarantees (theoretically) zero limitations on said platform. This is because it is easier for a native application to interact with a specific OS and the device’s hardware. Therefore, getting access to all the services of the device is quite convenient.

    However, if it is an application that does not require access to complex OS-specific features, then cross-platform development is a good choice considering the features of the chosen framework do not pose restrictions.

    Noteworthy: Facebook and Google have launched powerful cross-platform app development frameworks namely, React Native and Flutter respectively, thereby drastically bridging the gap between native and cross-platform applications, making the latter approach a better fit for a much larger scope of applications.

  • Development and Support Feasibility

    The time it takes for you to make an application is significant, especially when you’re on a tight schedule. It’s essential to decide the best framework to utilize when time is of the essence. If you have a short deadline for a relatively plain app, consider cross-platform development. As mentioned earlier, you do not need to work on two separate versions for the application. Instead, a single cycle of development is needed for an app to be released for Android and iOS. On the contrary, native app development will take twice as much time thereby lagging behind in schedule.

    Companies often require a Minimum Viable Product (MVP) for their B2B or B2C apps in the nick of time. Xgrid has worked with such clients and delivered profound applications in a very short time span.

    Choosing an approach depends vastly on your budget as well. Complex native applications cost more to develop and maintain compared to their cross-platform counterparts. If you have a limited budget to work with, cross-platform development is an ideal choice. You’ll save around 30%-40% since only a single codebase will be created for an app that works on both Android and iOS.

  • Performance and UI/UX

    Application Performance is crucial to the success of any application. A decisive factor in good performance of an app is its speed. Native applications offer high speed and better performance, however in some cases the cross-platform approach allows for significant reduction in development cost and time without deterioration in user experience

    “Statistical research shows that an average user won’t wait more than 3 seconds for an app to load.”

    Source: LitsLink

    Nevertheless, if your product mandates outstanding user experience, performance and feature-richness, go for native development. Xgrid has developed an enterprise-level native iPad application, currently deployed in a production environment, engaging around 700 users. The app has a variety of features such as task management and logging, clock ins/outs, daily site reports, and employees’ certification etc. The app is designed to work in both online and offline modes.

    For some audiences, user-friendliness is directly correlated with a complementing app and device interface. Here at Xgrid, our developers find the optimal solution to this problem:

    1. Native Approach: The developers coordinate their actions such that the interfaces of iOS and Android app versions are as identical to the underlying platform as possible.

    2. Cross-Platform Approach: The developers make sure all application elements are recognizable and the product interface itself is intuitive and user-friendly.

  • Audience Reach

    Cross-platform and hybrid applications allow you to reach a wider audience than native programs since they’re targeted at several platforms at once and you’ll be able to establish contact simultaneously with iOS and Android users. As a result, you get a chance to increase your user base in the shortest possible time. This, in no way, implies that native applications do not offer reach on multiple platforms at all. They do, but they take a bit longer to reach the audience on both platforms because their Android and iOS versions are deployed in different timelines.

When to Choose Native App Development

To summarize, pick native development if:

  • You want to take full advantage of the mobile phone’s hardware, resources, and services

  • App responsiveness is uncompromisable for you

  • You want an app that can be easily updated and enhanced with new features in the future (in one platform)

When to Choose Cross-Platform App Development

Opt for cross-platform app development if:

  • You want to maximize your reach to the target audience concurrently in multiple platforms 

  • Your application requires an extensive use of third party plugins or integration options

  • You want to test an app blueprint in the market or promote it in a short period of time

That’s a lot of big words, we know. If you are still unsure about the best approach for your application, we can assist you in reaching a decision by taking you forward step-by-step. We realize that each application is unique in nature and needs a special approach. Therefore, we facilitate our customers by modeling a feasibility report taking into account all the features of a particular project, and give advice and consultancy based on these premises, all-the-while keeping in view our client’s budget, time and need for reach. We are a team of highly qualified developers in both iOS and Android platforms who will analyze your case and recommend what is best to choose: iOS and/or Android native development or cross-platform approach. 

Want to get in touch? Drop us an email at sales@xgrid.co

Read more

Microsoft Dynamics Business Central Development – Technical Deep Dive

As we discussed previously in our introductory blog post Business Central – A Modern Solution That Integrates Easily, Microsoft Business Central is an all in one solution with built-in business integration, providing a single comprehensive solution to meet the needs of your growing business. However, it also comes with some challenges, one challenge that was recently faced and overcome by the Xgrid team was unsupported functionalities in the AL language. However, Business Central allows for the development of extensions using .NET interoperability. As the name suggests, these extensions provide flexibility and scalability to the Business Central solution by allowing for extended and diverse functionalities.

How do Extensions for Dynamics NAV Work?

With NAV Extensions, you can add functionality without changing the standard solution from Microsoft. This has the obvious advantage that major NAV upgrade projects are no longer necessary. Once you are using Extensions, the customizations no longer represent a problem when upgrading to the latest version of the solution.

Extensions for Microsoft Dynamics follow a model where you define the functionality as an addition to existing objects. This is how extensions can modify objects to perform business operations. We can develop multiple extensions so that development concerns are isolated and modularized but there is still a limitation under which these extensions perform that is the challenge.

The Challenge

All the functionalities from Dynamics are inherited to extensions but what if a development use case needs certain functionalities that are beyond the scope of Dynamics?
Here comes the Add-In Development for Business Central to rescue. Which provides a clean way to integrate .NET Framework assemblies to Dynamics NAV Server. This opened a lot of possibilities and eventually helped us drive the development smoothly.

One of the many use cases we had was to leverage Microsoft Active Directory user permissions to perform File Operations (Create/Update/Delete) on a Shared Network Drive. There is no built-in support for Active Directory in Dynamics NAV so we used our home-made .NET assembly which encapsulated all the critical File Operations. The basic setup for such Add-In development is provided below for reference.

Add-In Development – Technical Deep Dive

You can take advantage of .NET Framework interoperability so that Dynamics NAV objects can interact with .NET Framework objects. In your extensions, you can reference .NET Framework assemblies and call their members directly from C/AL code.

For easier understanding, we will develop a custom .NET class library that exposes a single method `CreateFile` which writes `Base64` encoded file to a specified location. Example code is provided below:

Now once you have the compiled DLL available, it’s time for Dynamics NAV .NET Interoperability to play its part.

Integrating .NET interoperability consists of the following three steps which are discussed in detail below:

1. Declaring the Assembly

To integrate .NET interoperability, the AL compiler needs to be pointed to the custom .NET assemblies. By default, the AL compiler is only pointed to the location of the default .NET assemblies. You need to explore the `settings.json` file and add your assembly path.

After the reference directory is added in `settings.json` you must declare the type in a `dotnet` construct provided by AL Language, and then reference it from code using the DotNet Variable type.

2. Execute members from .NET Assembly

After `dotnet` reference is created in AL, It’s time we can utilize the functionalities provided by our home-made assembly. We now need to create a `codeunit` which exposes an AL procedure

3. Publishing the extension

You now have everything in place, Just build the extension and you are almost ready to deploy the extension to your production environment.

When publishing an extension, the server will recompile code and try to resolve all the references to external assemblies. The compilation will only succeed if the server can locate and load all the referenced assemblies and types. Therefore, it is recommended to keep the same path for custom assembly on the development and Production business central environments.

Key Takeaways

Dynamics Nav has been helping customers improve their businesses by providing valuable insights. At Xgrid, it helped us expand the existing functionality through customization by adding more functionality using business central extensions. Microsoft Dynamics has a variety of features to boost productivity and is a fast, easy to use, and reliable solution to improve the overall efficiency of the business. Microsoft Dynamics improved forecasting, scheduling, management, and scalability with all other integrated applications. 

With business logic in its DNA business central has made many businesses survive making it a broad and deep functionality that runs thousands of companies all over the globe. To evolve and progress all contemporary business models should shift towards Business Central’s up-to-date solutions.

Read more

Sales Enablement 101

Let’s set the scene. Your company has just launched a disruptive networking solution that is set to shake up the industry. Big names like Apple and Facebook are showing genuine interest and can’t wait to get their hands on it. There’s a lot of buzz around the entire affair. They want to see the product run their specific use cases so they can be sure it fits their requirements. However, it takes you a couple of weeks to set up the entire thing end-to-end to demonstrate one use case. Your competitors have a similar solution and a much faster turnaround time, and they gain the upper hand. The customer goes with them instead and the sale is gone.

One of the biggest challenges businesses face, especially with products requiring a tedious and complex setup procedure, is effectively managing and completing a customer sale. In this case, bringing a potential customer on board, understanding their set of requirements, and setting up a demo or Proof of Concept (POC); all of this would usually take days if not weeks and runs the risk of your potential customer being poached by your competitors. 

What can you do to reduce the time for your overall process? The answer is a Sales Enablement Tool. Since the deployment time of an end-to-end actual physical setup can’t really be reduced, the best way to make the process faster would be having an application or tool that can emulate the customer’s use case. A Sales Enablement Tool or a Sandbox can allow your customers to experience the feature set that your product offers in a customized, tailored environment. Most companies either lack the resources or have a large amount of corporate red tape which prevents them from developing a Sales Enablement Tool for their product. This is where Team Xgrid enters the equation to provide our expert services in developing a fully customized sandbox environment for your product. However, before discussing what Xgrid can do for you, let’s first briefly talk more about the value a sales enablement tool can add to your business.

What is a Sales Enablement Tool anyways and why do I need one?

As the name suggests, a sales enablement tool is designed to empower the sales and marketing team. It gives them incredible versatility in adapting to their customers’ requirements and allowing them to create a more interactive, highly dynamic, and effective sales process. A test run of the actual product, the tool is designed to supplement the product, with the aim of simplifying, streamlining, and accelerating the actions required to set up a POC, as well as making it easily repeatable. All of these are vital when it comes to gaining the upper hand on your market competitors and ensuring your product’s success.

The key factor in all of this is time. The quicker the turnover time, the easier it is for sales reps to iterate and engage with customers. Setting up a blockchain network across multiple physical servers can take hours or even days depending on its scale and complexity. Replacing the same setup with an automation framework that brings up the network in a containerized environment on a single server would cut the time down to a fraction, while also maintaining the integrity and accuracy of the use case.

The flexible nature of such sandboxing tools enables teams to use them for training purposes as well. Think of demonstrating a single POC or use case at scale. The same concerns still stand, more so in this case because more people are involved. Having a tool that can spin up the required scenario quickly and reliably means more people can be trained on that product. More trained people means a larger sales force, resulting in wider customer outreach and, consequently, greater visibility for the business. The perfect chain reaction.

Customized POC Tools provide the added advantage of being inherently virtualized, and hence enable marketing teams to easily demonstrate their solutions online. This is something that is imperative to have, given the way the world works today, and all the more given the ongoing COVID-19 pandemic.

How does Xgrid fit in?

Now that you’re all aboard the hype train, where can one get such an application made for them? One word – Xgrid.

It is essential that sales enablement and POC tools are tailored to the exact requirements of the product. They need to capture and convey the products selling points effectively and efficiently.  That fact is our number one priority when building out these applications. We engage with clients to understand their product and what they want to demonstrate in their bespoke sandboxing environment. Every tool is tailored to support customer-specific use cases and requirements to ensure that the resulting solution is the best fit for you. Our extensive industry experience provides expertise in end-to-end tool design, development, delivery, and support for customers to provide a unique experience in every sales interaction.

Our portfolio includes the development of a tailor-made POC solution for a Fortune 100 company, which enabled them to easily demonstrate their unique SD-WAN solution in customer meetings, in-house training, and global live events. The sandboxing solution allowed their sales team to test out platform releases quickly and bring up client requests and use cases efficiently. 

It has a simple drag-and-drop based user interface (UI), where users can create their network topologies with complete freedom. The deployment process is where all the magic happens. Large, complex configurations consisting of up to 50 network devices spread across multiple physical servers are deployed automatically and managed completely by the application without any user intervention, all thanks to the robust and exhaustive automation framework driving the application. Users can also edit their configurations, tear them down completely and start from scratch, and save existing topologies that the tool can deploy repeatedly, with a few simple clicks on the UI.

Sounds too good to be true, doesn’t it? That’s the beauty of it. It streamlines the entire process to a tee and makes you wonder why you didn’t have a sandbox environment complementing your product in the first place. Sales enablement tools offer incredible versatility and should be a part of every product’s marketing strategy.

Still don’t believe us? Take our community’s word for it. Xgrid was the recipient of the Best in ICT Services award in 2019 from P@SHA (a body consisting of IT companies and industry leaders from across the country) for the Sales Enablement solution we built, which further reiterates the advantages sandboxing solutions have to offer.

Start your journey with Xgrid to experience the wonders of Sales Enablement & Sandboxing for your business. Request a Demo today and let us drive your business drive forward.

Read more

Business Central – A Modern Solution That Integrates Easily

Are you planning to expand your business, but your current technology does not support it? Do you intend to integrate all your current operations, running apps, data, and people into one platform? Microsoft’s Business Central provides unparalleled flexibility with a well-defined path for businesses that are ready to evolve and grow.

Previously known as Dynamics Navision, Business Central is a mid-market, all in one solution with built-in business integration, providing a single comprehensive solution to meet the needs of your growing business. Microsoft Dynamics 365 is an integrated ERP solution that automatically pulls systems and processes together to manage financial sales, services and operations. It also helps in connecting with multiple third-party applications like payroll, CRM, or other industry-specific systems. This management solution helps organizations streamline their processes including fixed assets, orders processing, inventory, human resources, sales & services, project management and manufacturing. In addition to simplifying management, Business Central solution helps users evaluate project performance. Power BI dashboards and charts provide actionable insights to make faster, informed decisions and the ability to accurately forecast the future of your business.  

Microsoft Dynamics enables businesses to develop custom solutions that are easy to configure along with a wide range of functional features. It is the go-to choice for businesses that want minimal configuration, combined with ease-of-use to generally improve business processes and deliver a modern, scalable, and future-proof solution.

What does Business Central bring with itself?

Business Central is fast to implement, easy to configure in product design, development, implementation, and usability. This flexibility allows users to use Business Central with either cloud or on-premise datacenter, depending upon their use case. It offers a great user experience that is consistent across Windows, Android, and iOS devices helping you run your business anywhere. Business Central offers multilanguage support giving the flexibility to view the application in the language of their choice. The availability of multiple languages from all around the world has been assisting businesses. This country-based classification of Business Central provides functionality that has been adapted towards a particular country’s market requirements.

Microsoft data center provides encryption that helps users protect their data from unauthorized access maintaining high standards of security. It also allows users to make informed decisions using connected data to better fulfill the project requirements and reach the optimal level of output. Business Central helps its users to make effective decisions using insights on project’s current status, and resource-usage metrics.

Using MS Dynamics 365 Business Central for App Development at Xgrid

With Dynamics 365 Business Central revolutionizing the ways of doing businesses, team Xgrid adapted this solution for managing multiple jobs and different tasks assignments to enhance the functionality of the construction application for a notable customer. The purpose of this app is to provide a central control to the manager while assigning tasks to the on-site team. It provides a full visibility of on-site tasks and helps in the better management of operations. The solution has a desktop version coupled with an iPad application, to lubricate field task management, resource allocation and bridge the communication gap between the off-field managers and on-site employees effectively. 

These applications along with a legacy SQL server based database use an enhanced business management capability. For the dynamic management of offsite projects, we used Microsoft Dynamics Business Central (on-premises) version to extract and store the data from web applications and legacy databases. The solution leveraged the dynamic capabilities of web services to offer data-rich, cognitive services.

Business Central provides flexibility to customize the applications which allowed us to extend the existing functionality of Job Management module in the construction application. This led us to get the on-premise functionality with robust ERP functionality across the job management module for the construction app. We developed our extension on top of the application to meet our client’s business needs. Our developed extension connected the Business Central web services to the API layer of our solution. This acted as a middleware between the database and the front-ends of the application. Through Dynamics Business Central Web Services, the application users can view real-time data that helps them in dynamic management of their off-site projects. All workers, contractors, and suppliers are now able to perform their tasks keeping each crew member informed and updated all the time.

The second module was to schedule periodic data processing by configuring Job Queues in Business Central. These jobs continuously synced data to and from legacy databases. One of key usage of Business Central in the complete solution was to bridge legacy solutions with a range of mobile devices like iPhone, iPad and Windows client for day to day user activities. 

Dynamics Business Central helps businesses to streamline their application processes and present logical data as per user needs for consumption by the Desktop and Mobile applications. The solution also employed the resource module and enhanced the functionality to provide users with the requested material for a specific job. This further enabled the procurement department to generate purchase orders based on requested materials from different job locations. The ability to have data in real time helps the decision makers to make timely decisions without a need for data migration to transition to this robust platform.

Read more

Evolution of Full Stack Application Development

Software development cultures and practices evolve with the developers’ habitual learning and self-improvement. For a software engineer, […]

Read more

Navigating the software world during COVID-19

Amid the global COVID-19 catastrophe, the worldwide economic downfall brings us all to think where do we stand as a business? For many, it still is a black swan event. The series of unprecedented events makes people from all spheres to evaluate their organizations. Everyone wants to survive and thrive in this pandemic. And the IT industry is no exception. In this blogpost, we will take a look at how the smart use of technology can combat the torment inflicted by the coronavirus.

In this new era of socially distant communities, emphasis is being laid on the use of online platforms and services to meet business goals. Today, hosting the mission-critical resources on cloud is more vital than ever which, according to the Flexera 2020 State of the Cloud Report, has led to a rise in the usage of cloud platforms. It has enabled companies to operate seamlessly by making their services always available without having to physically manage the infrastructure. This way the businesses can focus on their core product and service offerings without having to worry about the infrastructure maintenance. Leveraging on our rich experience of providing end-to-end cloud solutions, we at Xgrid, are helping our clients in designing, developing, and deploying specialized cloud and DevOps solutions that can help them meet the increasing demands of their business needs.

“Xgrid’s wide range of technical expertise with different cloud platforms and orchestration technologies enables the team to provide automation of a wide variety of infrastructure and network resources, and consequently help optimize customer workflows and processes. The current demand for IT services is at an all-time high and will remain so for the foreseeable future. Xgrid plans to assist its customers to the best of its abilities during this time and maintain its excellence and growth in the IT sector.”

Nabeel Afzal, Director Solutions Engineering

Xgrid also bagged a Gold in ICT Services Solutions category in P@SHA Awards held in 2019. The award was based on a sales enablement and sandboxing solution developed for a Fortune 50 company, that allows their sales team to provision remote demos and training environments for their clients. Click here to read more about it.

With work from home emerging as a prevalent mode of work across the globe, online traffic has surged creating a clear need for a resilient cloud infrastructure. The use of social media platforms has increased drastically for networking purposes. Considering this, marketers are planning to revisit their marketing plans. According to the Interactive Advertising Bureau, 41% of marketers plan to change their cause-related marketing strategy as a result of COVID-19. While we are on this subject, the marketing automation and analytics tools such as Hubspot, Marketo, Google Analytics, etc. are helping organizations build smart marketing strategies. Due to increased revenues and flexibility provided by these tools to businesses, you can count on digital marketing platforms for a long-term investment. If you are still not a part of the golden mine of lead generation then, now is a valuable time to drive for change.

“With people glued to screens, now more than ever, digital marketing has become an absolutely essential part of the proceedings. Not to mention, a big boost in creative opportunities for remote working. Start today, start small, and think big!”

Hussain Ali Zaheer, Senior Interaction Designer

However, for both small and big enterprises to greatly benefit from digital marketing, it is imperative that the visual content used is catchy and grabs the attention of the prospective customers in the digital space. Getting the message across with a combination of image, colors and captions is not enough, it is also important to reflect the brand’s organic identity. To make a sale in this pandemic when consumers are more picky than ever, it is important to convey a thought-provoking message highlighting the value your product offers intelligently. Team Xgrid is helping customers boost their sales growth by providing a mix of creative strategy, out of the box ideas and distinct designs.

“For us, design is communication and, to convey a message, proficient designers choose the right visual elements.”

Sher Afgan, Senior Interaction Designer

With the pandemic, the digital transformation has also taken over the world. If you are reading this blog and you have a distinctive idea on how to digitize your product, this is a great time to give your idea a shot.

You can dig deep and come up with remote and hardware-come-software based solutions. If you have any brand new app development idea then hit it off. It is the prime time when from all the social media applications, to entertainment sites like Netflix, e-commerce apps such as Amazon, educational platforms and video conferencing tools like Zoom and Skype are getting a lasting lift. Xgrid has been a part of this trending game since long, delivering iOS and android based cross-platform applications to its customers. Our service offering is not only limited to mobile app development but we also follow a ground up approach to built user centric UIs.

“While the pandemic itself has been a challenge, it has provided organizations such as ours an opportunity to grow culturally while at the same time giving us extended business opportunities. Considering all these factors, we anticipate our MarCom & UIUX work to grow over the next few months as the tech world is clear on the relevance and the effectiveness of remote working.”

Waqas Khalil, Director MarCom & Design

While the crisis may bring some challenges, we all can take this time to reimagine how to reorganize our businesses intelligently to maximize the overall outcome. Working remotely is clearly the new normal and that in-turn opens up opportunities for global collaboration, one that we have never seen before. This is the right time to identify growth strategies and make use of them by involving key players to stay ahead of the game!

Read more

Reusability Is the Name of the Game

Building a large scale iOS application from scratch without any plan in place may have you end up with creating a complex application tied with an unwieldy overtime. Some developers are fortunate enough to find their answers online on sites like Stack Overflow and Hacking with Swift, etc. However, if the app is aimed at being multi-featured, there are only a handful of other apps that can be compared to your use case in terms of scale. The size of such a project file alone takes its toll on your machine, not to mention the build time and overall workload.

So, what’s the solution to this predicament? This is where you need to work smart. Don’t develop unnecessary components! When it comes to auxiliary components like a modal that can be used to add images or notes, a drop-down menu providing the user with various actions, a pop-up with a collection of options out of which you can have multiple selections or other similar components – it’s better to make them reusable. Multiple features of your application will use them so treat them as such by making them generic without any concern for a specific feature’s visual model. Here are a few examples depicting the use of such generic reusable components in example applications:

Reusability in itself is a broad term and may mean something entirely different to different developers. In this article, reusability refers to a concept in application development in which, where possible, you design components that are reusable and customizable, thereby, future-proofing your code.

In order to make a reusable component whose bare-bones structure may be used across multiple apps as well as across multiple features within a single app, you have to map out and design the structure of your component before starting the actual implementation in such a way that if in the future, the need arises, you can customize the component further and add more options depending upon the particular use case.

Let’s take a look at an example of an app in which the user can upload the pre and post images of their room transformation. For this, a custom UIView called AttachmentsListView has been created. This can be used as a component in any controller. In this example app, AttachmentsListView is used in the following two ways:

  1. Pre-transformation
    • Workflow: Clicking on the Add Image button opens up a pop-up modal. The user is required to upload images from the modal.
    • Implementation: For this purpose AttachmentsListView is embedded within this modal. To communicate between the modal and then calling the view controller, a delegate can be used.
  2. Post-transformation
    • Workflow: Clicking on Add Attachment opens up a context-menu to choose from the relevant option.
    • Implementation: The custom view has been embedded in the screen so the user can directly add images or other files.

You might have observed that the scope of attachments has been extended from just allowing the images to be uploaded in pre-transformation section to allowing the user to upload all kinds of attachments such as DOCX, PDF, etc. for post-transformation. This is where the concept of reusability comes into play. All you have to do is add just another AttachmentsListView to allow uploading these files. And for this particular option, you can replace the text of the button from Add Image to Add Attachment by adding a simple check of supportedTypes.contains(.file)

For the context menu, AttachmentsListView contains a UICollectionView section. This collection view further contains two different types of cells:

  1. One that contains a button which opens up a context menu with available upload options for the user to choose from. This can either be:
    • Open camera
    • Choose from Gallery
    • Choose from Files
  2. The other which represents a thumbnail of the attachment

What we see above is the initialization of the function supportedTypes, and the values in this array are further specified in their relevant calling class.

In this example, the user can upload files only for the post-transformation section, hence reusing the context menu with various options as per the use case.

As the above example illustrates, the reusable component AttachmentsListView has been used in 3 similar yet slightly different ways in this one project. It’s not hard to imagine that another app may also need a view that allows users to upload images/files, so it can be reused there as well and can be further customized depending upon the particular use case. Want to dig into the code part? Click here to access the source files on GitHub.

While this solution may look pretty simple, but the fact is, it is important to be able to identify the basic structures that can be used over and over again. Doing so, will prevent the developers from entangling themselves in the web of endless possibilities of defining what components can go generic, and be specific in identifying these components. All major websites and apps across the world take advantage of this concept of reusability to save development time and effort and reduce redundancy in code as well. This not only ensures that their code is efficient but also decreases file sizes and build times overall by having premade components that can be reused throughout the app.

Read more

Why & When to Go Serverless

Serverless Applications and Serverless Computing are some of the terms that you will come across frequently when trying to choose from  various options being offered by cloud service providers like Amazon Web Services (AWS) and Microsoft Azure (Azure). The term serverless accompanied with the word application could be confusing, as it is contradictory to the conventional methods of developing and deploying applications. In this blogpost, we will attempt to explain what serverless applications are and what exciting benefits they bring to the world of cloud technologies.

Serverless applications are built using the services provided by cloud service providers like AWS or Azure, without having the developer to worry about the underlying infrastructure. The core of serverless applications is made from cloud-native services such as AWS Lambda or Azure Functions, which offer Functions as a Service (FaaS). These services provide the ability to write event driven code functions in any of the supported languages. The functions are executed automatically when the associated events are triggered, creating an automated chain of events which can range from an API being called, uploading a file to the cloud or even invoking other serverless functions.

Serverless is the fastest-growing cloud service model right now, with an annual growth rate of 75%.

Source: RightScale’s 2018 State of the Cloud report.

One might wonder what benefits serverless applications provide or why are they getting so much traction these days. The answer to that question is in the pricing model of all of these services which is based on the philosophy that you only have to pay for what you use. Let’s consider Lambda as an example, the price of using Lambda is primarily based on how many times a function is triggered along with some other factors like the function execution time and the resources it utilizes. In contrast to non serverless services that are charged by the number of hours the service was up for.

If a business or developer runs an application on an instance or virtual machine hosted by a service that charges by the hour, they would essentially get charged for the total uptime of the instance, irrespective of whether there are any users using the application or not. If the same application is deployed using serverless services, it will be available all the time, but the account will only be charged whenever an end-user makes a request or uses the application.

Serverless architectures can be very effective for use cases where you want an application that is always up and available, but does not have continuous and constant incoming requests. The application can have a large number of incoming requests at certain times and then have large periods of stagnation with little activity. Other than that, asynchronous or event based tasks like CI/CD pipelines, multimedia processing, and scheduled batch jobs are well suited for  serverless model. A couple of other benefits tied to adopting the serverless computing approach are mentioned in the figure below:

While serverless applications are bundled with various benefits, it is important to understand their core limitations that are often tied to the type use-cases and application models. From the pricing model of serverless services, it is pretty obvious that if the incoming events are large in number you would get charged more based on every input trigger. Services like Lambda or FaaS have  limitations such as the amount of available RAM and accessible disk space  being fixed for a Lambda function. Hosted functions also suffer from an issue known as Cold Starts, which means that every time a function has been dormant for a while it will take more time to spin up on the next request and thus cause a slight performance penalty. This issue can be minimized by using a runtime which suffers less from the cold-start penalty like Python or Node.js. It can also be minimized by reducing the overall function size.

Cloud computing also brings some limitations for serverless applications like vendor lock-in, where the switching cost to a different vendor is pretty high. If you are building a serverless application, you are committing to a specific cloud service provider and building your application around their infrastructure making switching across-platforms very difficult.

With all things considered, serverless is an interesting and in many cases a beneficial approach to building applications on the cloud efficiently in an agile manner, without worrying about managing the underlying infrastructure. It provides additional choices to solution architects while designing application architectures with minimal cost implications for their organizations.

Read more