Tons of articles and books have been written about scalability and capacity planning. However, sometimes the hardest part of the job is to avoid overengineering and keep the things clear and simple. This article briefly summarizes the basic rules that let us to achieve continuous exponential growth with linear effort.
Scalability vs. Performance
Let’s start with some sad news. Scalable code is usually computationally inefficient. If you split a big complex task to a set of small associative operations – it will probably run slower on one machine. But it’s preferable to support unlimited horizontal scaling. Obviously, hitting the ceiling of vertical growth is much more likely.
Moreover, it lets you avoid possible points of failure and reach reliability via redundancy. So swarms of small and simple tasks definitely overcome their efficient and complex alternatives.
Problem: What is the best way to create a living, breathing Roadmap that follows the reality of an Agile development life cycle without much overhead required to maintain it?
One of our clients came to us with the problem above. For this post, we will call this client – Master Splinter. They have been using Atlassian’s Jira Software for a while now and have realized that with all this data they have accumulated within Jira, they should be able to do a much better job at predicting deliverables as well as be able to quickly see when timelines start shifting due to the realities of the software development processes. If only there was a tool that could easily aggregate all this data and display it for the tech and management teams to view.
I didn’t call them Master Splinter for nothing. This team was as wise as the old Sensei. They knew that Atlassian has a massive marketplace with different plugins available that do all sorts of useful stuff. However, with so many options to choose from, which is the best tool to do what they need? That’s where Sphere’s experts come in.
We talked to the stakeholders from team Master Splinter and helped identify the most important features they were looking for in this plugin:Read More
Yodlee is an aggregation service companies use to access customer financial information. Its Instant Account Verification (IAV) provides account- and transaction-level data about customer activity which companies use to perform day-to-day procedures such as loan and insurance processing.
To access this data, companies create Yodlee accounts for their customers who then search for their institutions in FastLink UI, log in to those institutions’ accounts, and link them. Once the accounts are linked, the data becomes available to the company via Yodlee API. The software developer then integrates the Yodlee API with the company’s API.
To save software developers the time and effort needed to create applications to access each specific financial institution’s API, Yodlee provides unified APIs so data can be transferred from financial institutions to the businesses seeking customer information. Yodlee supports thousands of institutions at a relatively low price, so it has become widely used by companies working in the financial sector.
Smart apps designed to make our lives easier are becoming increasing popular. These range from fitness trackers to lightbulb controls. When designing these apps, you may find you need to improve the user experience. Or you need to access the raw data, but setting up a full stack project would be overkill for this purpose. That is when Electron comes into play.
Electron is a new way to develop modern desktop apps with all the power of Node.js, HTML, and CSS. You can easily complete a functional app in a short time frame, which could solve 80% of your day-to-day needs.
In this example, we are going to explore the Electron universe by creating a simple app that will give us access to the IoT world. Integrating scales from Xiaomi, we will build a “Smart Scale” app that will show the user’s weight in real time. With Electron, the data will be collected and presented in a nice, clean format. Read More
“Nothing is more powerful than an idea whose time has come.”
– Victor Hugo
“Design is really an act of communication, which means having a deep understanding of the person with whom the designer is communicating with.”
– Donald A. Norman, The Design of Everyday Things
For decades, critical analysis has held sway in business problem solving protocols. The process involved breaking down intricate complexity into smaller components in order to figure out the specific issue. Analysis of this sort is achieved by understanding the individual parts. Unfortunately, this exercise has become mandatory on some level because today’s business world can be unpredictable and easily disrupted. So for organizations to both survive and thrive, new methods need to be generated that embrace the volatile nature of contemporary business from a creative perspective. Essentially, it’s an evolutionary practice derived from creative thinking, which involves a company’s full team effort. Read More
Reasons to create autotests
BI solutions are usually designed to help businesses make decisions about their companies. Can you imagine a situation in which a decision is made based on incorrect data? It could lead to serious problems for the company. It is therefore very important to have trusted and reliable data in your BI system. One possible method of detecting incorrect data is the implementation of autotests. They may be used in different phases of your BI system. You may use them in the development process of your BI to make sure that any changes made are expected and acceptable. Autotests can also be used as part of your daily ETL. You can flag errors in critical data or even roll back new data to its previous version in your BI system. Read More
Recently, one of our clients asked us how to ensure that their prototype launch was successful. In our climate of constant innovation, technologies are becoming obsolete at a never-before seen rate.
There are, of course, no guarantees — but using a “Minimum Viable Product” approach is the best place to start.
In the following post, I will break down the steps to create an MVP, using the example of the worldwide gaming phenomenon, “Pokémon GO.” Read More
When one of our fortune 500 clients asked us how to increase their effectiveness on mobile platforms, our answer surprised them.
The average person looks at his/her smartphone over 150 times per day, totaling over 3 hours of screen time. Thus, as a business owner, it is essential for you to reach potential customers on their devices. To do so effectively, you must optimize your mobile strategy.
There are three core principles every successful mobile site should focus on to satisfy its customers: Read More
Software development companies are under constant pressure to deliver new applications that will satisfy every user’s needs across all devices and locations, preferably at high speed and low cost. Automated testing has become a way to ensure applications are error-free, cost-efficient, and quickly delivered.
Automated testing takes place on several levels of the project:
- Unit testing: Usually performed by developers, the main goal of these tests is to make sure that the app’s components match in terms of functional requirements. For example, a unit test could involve an OOP class or function.
- Component testing: Usually performed by developers, the “component” being tested is a part of the high-coupled logic. For example, authorization, payment processing, and order submission could all be components.
- Integration testing: Usually performed by developers and QA, the goal of these tests is to make sure the app’s components all interact properly.
- System testing: Performed by QA, these tests check that the application and the system are compatible.
- Acceptance testing: Performed by QA, these tests are done to ensure that the specification requirements are met.
- Alpha testing: Performed by development and user experience teams, these tests are done at the end of the development process.
- Beta testing: Performed by user experience teams, these tests are done just before the product is launched.
The world-wide web has become very dynamic and complex. A myriad of UI elements should interact with one another while being responsive to the user. For example, if the user presses the button “A”, the button “B” should be hidden, but several additional panels with their own buttons, checkboxes, and other UI elements should be shown. If a developer is trying to implement this functionality in a typical JS-imperative paradigm, it turns into “callback hell.” After some time, technical debt makes support of such an application and development of new features virtually impossible.
Present-day frameworks, such as Angular, may seem like a solution, but they create substantial “accidental complexity” in the framework. At first, dynamic, asynchronous pages may look fine simply because they work. However, as the project becomes more complicated, we become trapped in the framework. Read More