In our previous article “Hardware Acceleration with FPGAs“, we learned about what programmable logic devices are called FPGAs (Field-Programmable Gate Array), discussed their use as a companion to CPUs to achieve this acceleration, and named some advantages of use versus GPUs (Graphics Processing Unit).
To get a better idea, we will delve into the technical aspects to understand how they generally work, from how acceleration is achieved or how technology is accessed, to some considerations for its use with a software solution.
The two main reasons why FPGAs have higher performance than CPUs would be the possibility of using custom hardware and its great parallelism power.
Let’s take as an example to perform a sum of 1,000 values, in the case of CPUs, which are made up of fixed general-purpose hardware, the process would begin with the storage of the values in RAM memory, then they pass to the internal memory of quick accesses (memory Cache) where they will be taken to load two registers.
After configuring the Logical Arithmetic Unit (ALU) to achieve the desired operation, a partial sum of these 1,000 values is performed and the result is stored in a third register. Then, a new value is taken, the partial result obtained in the previous point is loaded and the operation is performed again.
After the last iteration, the final result is saved in the Caché memory where the information will be accessible in case it is required later, being stored in the system RAM to be a consolidated value of the running program. In the case of an FPGA, the entire previous cycle is reduced to 1,000 registers, where their values are directly added at the same time.
We must bear in mind that, sometimes, the FPGA will have to read values from a system RAM memory, finding itself in a situation similar to that of the CPU. However, the advantage over CPUs is that it does not have 1,000 general-purpose registers that can be given the exclusive use of storing values for a sum. In contrast, a CPU has few registers available to be shared in performing different operations.
An example to understand the power and acceleration of FPGAs would be to visualize that we have a loop of five instructions in the CPU’s program memory, it takes data from memory, processes it and returns it. This execution would be sequential, an instruction per time-lapse, forcing them to get to the last one in order to start the process again.
In an FPGA, the equivalent of each of the CPU instructions can be executed in a parallel block, feeding each input with the previous output.
As we can see in the image, we see that the time elapsed until the first data is obtained is the same in both cases, however, the period in which 4 results are achieved in a CPU is achieved up to 16 in the FPGA.
Although it is a didactic example, keep in mind that, thanks to the average hardware with which FPGAs can be configured, the acceleration could be up to hundreds or thousands of times in a real implementation.
It should be noted that FPGAs used as accelerators that accompany a CPU has spread in recent years. On the one hand, thanks to the high transfer rates achieved by the PCI Express protocol (used on the PC to interconnect the two devices in question).
On the other, given the speeds and storage capacity offered by DDR memories. For what accelerating makes sense, the amount of data involved has to be such that it is worth the entire process of moving it to the accelerator. On the other hand, we must be in the presence of a complex mathematical algorithm, where each step requires the results of the previous step, capable of being divided and parallelizable.
The Hardware Needed for Acceleration
The two main manufacturers of FPGAs, Xilinx, and Intel, offer a variety of accelerator cards, called Alveo and PAC respectively, that connect to the PCI Express buses of a server.
When wanting to include them in our infrastructure, we must consider the specifications of the receiving server equipment, as well as the system configurations and licenses of the development software.
There are services, such as Amazon, that offer ready-to-use development images elastically, as well as instances of Xilinx hardware. Keep in mind that there are also other services, such as Microsoft Azure whose instances are based on Intel devices, or in the case of Nimbix, with support from both platforms, to name a few.
Accelerator development is a task associated with a circuit design that involves the use of a hardware description language (HDL), although you can alternatively High-Level Synthesis (HLS), a subset of the C / C ++ language. Finally, OpenCL can be used just like in developing GPU accelerators. Usually, this type of technology is binding on Electronic Engineering specialists such as programming experts.
Fortunately, both technology providers and third-parties offer ready-to-use accelerators for known and widely used algorithms. Accelerated software applications are written in C / C ++, but there are APIs available for other languages, such as Python, Java, or Scala.
In case you need to perform any additional optimization, you will need to convert C / C ++ applications on a client/server, create a plugin, or perform a binding. In addition, there are also frameworks and libraries ready to use without changes from the application, related to Machine Learning, image, and video processing, SQL and NoSQL databases, among others.
From Huenei, we can accompany you through the adoption of this technology. After analyzing your application, we can offer you the infrastructure that best suits your processes. One option is advice on the use of available frameworks, libraries, and accelerated solutions, which do not require changes to the source code.
Another alternative is refactoring using a special API with custom accelerators, or directly initiating developments with a view to using these solutions. In any case, you will have the guide of specialists who are up to date with the latest trends in this area, which are so necessary in order to face the challenges of data with exponential growth and the use of computationally complex algorithms.
The revolution derived from the rise and spread of computers posed a before and after, standing out in the dizzying
The root of this development was the born of the CPU. As we well know, these are general-purpose devices, designed to execute sequential code. However, in recent years, high computational cost applications emerged, which generated the need for specific hardware architectures.
One solution consisted of creating graphics processors (GPUs), which were introduced in the 1980s to free CPUs from demanding tasks, first with the handling of 2D pixels, and then with the rendering of 3D scenes, which involved a great increase in their computing power. The current architecture of hundreds of specialized parallel processors results in high efficiency for executing operations, which led to their use as general-purpose accelerators. However, if the problem to be solved is not perfectly adapted, development complexity increases, and performance decreases.
What are FPGAs?
Both CPUs and GPUs have fixed hardware architecture. The alternative with reconfigurable architecture, are the devices known as Field-programmable Gate Array (FPGA). They are made up of logical blocks (they solve simple functions and, optionally, save the result in a register) and a powerful interconnection matrix. They can be considered integrated blank circuits, with a great capacity for parallelism, which can be adapted to solve specific tasks in a performative way.
What are they for us?
The general concept behind the use of this technology is that a complex computationally demanding algorithm moves from an application running on the CPU to an accelerator implemented on the FPGA. When the application requires an accelerated task, the CPU transmits the data and continues with its tasks, the FPGA processes them and returns them for later use, freeing the CPU from the said task and executing it in less time.
The acceleration factor to obtain will depend on the algorithm, the amount and type of data. It can be expected from a few times to thousands, that in processes that take days to compute translates it down to hours or minutes. This is not only an improvement in the user experience but also a decrease in energy and infrastructure costs.
While any complex and demanding algorithm is potentially accelerable, there are typical use cases, such as:
Deep / Machine Learning and Artificial Intelligence in general
Predictive Analysis type applications (eg Advanced fraud detection), Classification (eg New customer segmentation, Automatic document classification), Recommendation Engines (eg Personalized Marketing), etc. Accelerated frameworks and libraries are available such as TensorFlow, Apache Spark ML, Keras, Scikit-learn, Caffe, and XG Boost.
Financial Model Analysis
Used in Banks, Fintech, Insurance, for example, to detect fraudulent transactions in real-time. Also for Risk Analysis (with CPU, banks can only perform risk models once a day, but with FPGAs, they can perform this analysis in real-time). In finance, algorithms such as the accelerated Monte Carlo are used, which estimates the variation over time of stock instruments.
Interpretation of Medical or Satellite Images, etc. with accelerated OpenCV algorithms.
Video processing in real-time: Used in all kinds of automotive applications, Retail (Analytics in Activity in Stores), Health, etc. using OpenCV accelerated algorithms and FFmpeg tools.
Real-time analysis of large volumes of data, for example, coming from IoT devices via Apache Spark.
Hybrid Data Centers, with different types of calculations for different types of tasks (CPU, GPU, FPGA, ASIC).
Cryptography, Compression, Audit of networks in real-time, etc.
Typically, accelerators are invoked from C / C ++ APIs, but languages such as Java, Python, Scala or R can also be used and distributed frameworks such as Apache Spark ML and Apache Mahout
Not all processes can be accelerated. Similar to what happens with GPUs, applying this technology erroneously entails slow execution, due to the penalty for moving data between devices.
In addition, it must be taken into account that a server infrastructure with higher requirements is required for its development and use. Finally, to achieve a high-quality final product, highly specialized know-how is needed, which is scarce in today’s market.
In recent years, FPGA technology has approached the world of software development thanks to accelerator boards and cloud services. The reasons for using them range from achieving times that are not otherwise met or improving the user experience, to reducing energy and accommodation costs.
Any software that involves complex algorithms and large amounts of data is a candidate for hardware acceleration. Some typical use cases include, but are not limited to, genomic research, financial model analysis, augmented reality and machine vision systems, big data processing, and computer network security.
Regardless of industry or size, the businesses that operate globally today rely on commercial application systems to stimulate production chains, manage markets, maintain connections with partners and customers, and drive operations in the short and medium-term.
Therefore, many companies need to outsource application management, but they have no idea how much they need it, or how soon they should have it. If you consider that your company may require this process and need more information, in the next section we will tell you how to determine it and how to carry it out successfully.
Determine the scope and need of your company
We often find companies where their comparative advantage and focus of their business rely heavily on technology, but not only in-house for a single department, but also for processes that support the entire company.
Therefore, it turns out to be more efficient and even profitable to opt for Outsourced Application Management. To determine if this is one of the needs of your company, answer the following basic questions:
Do we have identified which technological activities and processes will be of great support to manage my business more efficiently? Do we have difficulty finding, hiring, and retaining technology-savvy professionals? Do we have sufficient command of technological platforms and applications by ourselves? Can we keep them updated without a problem? Do we want to manage a trained in-house team to face all the challenges that the company’s technological management requires?
By answering these questions, you will quickly and easily determine the needs of your company against AMO.
Types of outsorcing and their strategies
In this sense, the provider will be in charge of comprehensively managing all the activities related to the support, improvement, and optimization of the applications belonging to the company. This type of outsourcing should provide technological services, and in turn, provide ideas and recommendations to economize, improve and evolve applications, taking into account new business requirements. In addition, it will be responsible for implementing appropriate digital innovation initiatives and business continuity plans in the event of unexpected situations (such as the COVID-19 pandemic).
This type of OAM consists of entrusting the provider with only a very specific part of the management of the company’s applications. Their responsibility may be related to troubleshooting or updating and improving resources, or they may also encompass a group of objectives such as monitoring, management, troubleshooting, and application maintenance. This type of outsourcing is recommended for those areas that are more complex than individual tasks but do not interfere with any more complete process.
Some tips to get the right partner for your project
To choose the right partner for your company, the first thing we must take into account will be some fundamental details of its preparation and technological mastery. For example:
- Must possess sufficient technical knowledge of various technologies and be able to provide feasible solutions.
- You must have experience in agile service delivery methodologies that allows you to understand which is the most efficient way in which you can divide a project into several phases.
- The partner must be scalable, that is, there must be the possibility of adding more members to the team if necessary to meet the times of a project.
- The cost-benefit ratio is another important point for outsourcing. The number of hours to allocate and the seniority of the team are some of the elements that should be examined calmly before closing a contract.
- Consider looking for a partner that can align in terms of time zone, this way communication will be much more fluid.
Once we have found the professional who adapts to all our needs, it is time to create a favorable work dynamic whose organization is key to achieving the proposed objectives in the expected time. Some of the actions that as a company you should take into account are the following:
Define your expectations with this process
It is important that the partner knows exactly what is expected of their work and why they were selected, this will help to lay the foundations for a good business relationship, as well as a better performance of the project. From this, the service measurement indicators can be identified.
Provide your partner with all the necessary knowledge about the industry
A checklist of the activities or processes required is not the best option, it is necessary for your partner to internalize the needs of the business, what are the final customers and what do they need, what are the expectations of the industry, among others. Involve this professional as part of the work team, as another member of the company, and it is very likely that you will get better results. In Huenei, the first phase of the AMO service execution is the training and knowledge transfer of those who are currently responsible for the applications.
Don’t forget to measure and compare
To understand what you can improve and how the overall performance of your project has been, it is important to keep the correct and updated metrics. In this way it will be possible to implement the corrections that the area requires instead of having setbacks or continuing with inefficient strategies. At Huenei we issue monthly metrics to our clients to measure the quality of the service (some graph can be included).
Define your company’s strategy
It is extremely important that your partner understands the path they must follow, what are the phases and objectives to be met in the short, medium and long term without needing to come to a standstill and ask “now what next?”. The annual planning of the service allows us to have a roadmap to assign the requirements of the business needs backlog.
Determine clear delivery dates
Maintaining an updated roadmap that indicates which processes or platforms will be outsourced and in what time, will be decisive in obtaining the expected results and without delays. This allows your partner to identify the demand for resources.
Never stop asking yourself “how can we improve”
Continual improvement is undoubtedly the key to successful work when it comes to outsourcing. Keep the entire team motivated and informed about every relevant aspect of the business and always ask how they can continue to add value to the work they do.
We are in an increasingly competitive world, so it is important that companies can implement more efficient systems to meet the needs of their customers and continue to improve within the industry.
In this sense, spending time and money optimizing your own resources and systems with the help of technology experts, as outsourcing is, is undoubtedly one of the smartest and most profitable ways to grow your business.
The technology of the new era is designed to reduce costs, increase productivity and provide clearer management of the processes and practices carried out by the company. It is proven that a robot works faster offering better results.
Because everything needs to be auditable and measurable, human intervention has lagged behind, being overtaken by RPA (Robotic Process Automation), a game-changer capable of saving time and money by performing tasks. repetitive manuals much more efficiently.
What is RPA and what is it for?
Robotic process automation is the mechanism that enables us to program software, making it possible for a machine to imitate and complete many human tasks in digital systems in order to operate any business procedure.
In the same way that a human would, these “robots” manage the user interface of a computer system to compile data and manipulate applications, they also perform interpretations, execute responses, and are capable of interacting with other systems in order to perform a great variety of repetitive tasks.
The use of software robots such as these represent savings and increased efficiency for any company since the machines do not require rest, they do not make mistakes, they are not distracting and they are less expensive than a human employee.
Integrating RPA represents an important difference if we take into account traditional IT integration mechanisms, which have always been based on Application Programming Interfaces (APIs), a form of interaction between machines supported by data layers that operate in an underlying architectural layer of the UI. Instead of being “trained” through instructional development based on multiple codes, APIs are configured or programmed through demonstration steps.
RPA instead can be “trained” more effectively, demonstrating that software robots are virtual workers who can quickly learn from a business user. However, there are some other substantial differences that we will examine below:
RPA Vs traditional automation
- Implementation: RPA is focused on a simple, learn-and-repeat form of automation that has a faster response time than traditional automation. The best part is that RPA does not require complicated programming or test execution.
- Target customer: RPA is perfect for technology-oriented SMEs, where they can train robots on how to handle traditional automation projects when they need developers as well as a significant input in information technology.
- Personalization: Unlike traditional automation, RPA can be customized according to the needs of each user and can be applied to both personal and business applications. A good example of personalization would be a bot that extracts information, responds to emails, and even responds to chats on social networks associated with the company.
Main benefits of RPA
- Economical workforce: In the past, automating did not reduce jobs, however, this scenario may change with the latest report from RPA providers where they estimate savings of 30% to 60% for companies. This translates to savings in hiring, retention and settlement costs.
- Optimized resources: with RPA, slow dynamics are left behind and subject to possible errors, such as employees who manually enter forms in different systems or manually copy data between systems, delaying the efficiency of the service provided by a company. Software robots can be trained in a short time to provide the highest performance.
- Total focus: allows employees to focus on enriching activities for their position and for the company, resulting in a significant improvement in the service it offers, as well as stimulating their ability to innovate and solve problems in other areas.
- Optimizes regulatory compliance and data analysis: Any process carried out by the RPA promises to be highly thorough so it can be audited without a hitch. Virtually all manual errors are eliminated resulting in higher quality data allowing for more reliable analysis. Perhaps the most plausible feature is that software robots interact with legacy or older systems, finding data that was previously difficult to extract.
Some cons of using RPA
Since most companies do not have defined and organized processes, it can be cumbersome to switch to RPA. Many companies choose to automate this to compensate, but they automate the wrong areas or get confused by reverse-engineering the intent.
RPAs are great at carrying out predictable, repetitive, and rule-based processes, they are not good when faced with variability. Some weaknesses in RPA arise when compared to decision-making typical of human thought.
When the human works in a repetitive but variable work, they usually apply a level of lucidity at work that can generate calls for attention, questioning, questions to others and necessary doubts when something in the dynamics they carry out seems abnormal or out of place. However, although this characteristic can be modeled in RPA, it is truly difficult to achieve, so the variability is not as positive for this type of robot.
Also, RPA does not react well to changes, not even small changes. If a dependent system changes, the processes manipulated by RPA may not be assimilated with the ease that the human being assimilates the changes and improvises without realizing it.
RPA has a great ability to eliminate repetitive manual processes that consume too much time, increasing productivity in other areas, such as in the daily work of an accountant. Robotic process automation improves the efficiency with which accurate data is delivered, as well as providing real-time access to financial data and various types of reporting and analysis.
Automating using RPA helps to better manage the work carried out by the work team, guaranteeing greater freedom to cover other areas that require the workforce or the human spirit.
The quality of products or services is now one of the primary requirements that any company must meet. In such a competitive market it is not enough just to produce and distribute mass products or services, the amount of sales depends on the acceptance by the customer, and this is in turn completely depends on the proposed quality.
But when we talk about software development, the concept of “quality” becomes a bit complex, this is because it cannot be compared to the quality of a traditional product since it has its own measurements and unique ways of determining its value.
While quality is the ability of a product or service to meet the needs of a user when it comes to software development the concept should be analyzed from a qualitative point of view.
At this point, there are at least two types of quality that can be evaluated: the design quality which refers to the distinctive features that designers specify for an item, and the quality of concordance, which focuses on how the specifications are performed during manufacturing. The quality of concordance will be high when the implementation is guided by the design and this results in a system that offers the best performance.
The quality of software refers to those characteristics that are characteristic of said program and that are seeking to control and ensure. Although unlike traditional products, the software does not degrade over time but does need to be updated. A product such as software may present errors or incidents, so it remains in constant development.
It is worth clarifying that a software is never certified, what receives a quality certificate are the procedures used for its development. Each of these procedures must be correct and follow standardization parameters such as ISO 9000, CMMI, Moprosoft, among others.
What is the ISO 9000 standard?
The ISO 9000 standard is one of the most recognized in the medium, it gives an account of a system that guarantees quality from a generic perspective, so it can be applied to any company regardless of the services or products it offers.
ISO 9000 has a certifier or auditor that evaluates internal processes to determine whether it complies fully with the regulations or not. If the results are positive, the certification that must be renewed from time to time is delivered through annual interviews where it is guaranteed that the quality match is maintained in accordance with this standard.
The measurement is used to assign numbers to real attributes, it can also be done by means of symbols, for this, it only requires a measurement model that includes an existing set of standards. When it comes to software development, a measure represents a quantitative indicator that can be derived from the extent, size, capacity, quantity, or size of some attribute of the software or its production process.
The measurement is nothing more than the result of the collection of one or more data. Based on this, the software metric relates these individual measures and manages to develop metrics that result in various indicators.
Indicator means a metric or a combination of them that provide information about the procedures for software development. The indicators provide data that allows software engineers to adjust the process or product so that it improves its quality.
It is clearly necessary to measure and control the complexity in software development, in order to have the ease of developing measurements of different internal attributes of the software. However, before generating and using certain software metrics it is important to ensure that they are capable of assisting in the evaluation of analysis and design models. They must also provide an indication of the complexity of the source code and procedural designs, and, finally, they should make the design of tests easier with better results.
Types of measures:
- Number of errors during a certain time.
- Incidents in the coding or design of a system, which causes the software to fail or not work properly.
- Size of a computer product (lines of code).
- Melting point metric (IBM): combines features it offers.
- Cost and effort analysis: COCOMO (Constructive Cost Model).
Software measurement utility:
- ISO 9126 Standard: is responsible for measuring the quality of software by decomposing attributes or qualities, so as not to have margins of error or interpretation.
- Functionality quality.
- Quality of responsiveness to external errors.
- Security grade attribute. It is not possible for quality to exist without a high degree of safety. It is the end-user who will indicate which attributes are the most important with regard to security.
What types of tests are performed to improve the quality of software?
The developers are almost exclusively responsible for unit tests, their importance is that without them, bugs or errors multiply without control. That is why this type of test is considered the main barrier against bugs in a system, in addition, they are also the basis of the Hyperlink Test. Among its advantages are its ability to expedite the process of changing parts of the code and reporting bugs more quickly, which greatly helps new developers who have just joined a project.
Some people argue that perfect design or good planning can fix many more errors and bugs than unit tests, however, this is not entirely true. Even if a software has the most advanced design, it cannot be guaranteed that it works without problems without the help of these tests or much more advanced tests.
In order to verify that the system is really working, it is necessary to use integration test. This type of test is responsible for joining the parts of the system and determining if they fit without incident. Together with the functional tests, they form the basis for behavior driven development. One of its main features is that they do not take into account fundamental elements such as the database, network requests or accesses, therefore they are not sufficient by themselves to check if the software behaves correctly.
The advantages of the integration tests are that they make the system reliable, being able to rely even on the parts protected by other tests because they will have the expected behavior when called by other elements. In addition, these tests serve as protection for developer teams so that the code of other elements does not cause unpleasant surprises.
The Gherkin language used in this type of tests allows to obtain a more complete documentation on how the system works, in this way it is possible to find more quickly and easily what is covered by the tests and what is not.
The functional tests go beyond the integration tests and consist of checking the system as a user would. A good example of this is the automation of graphic interfaces. It should be noted that they are the slowest type of tests and the ones that require the most maintenance.
However, they can offer valuable benefits such as protecting against failed interfaces and reducing processes when performing manual tests. They are used above all to configure and execute them in all environments where the software is distributed.
Its importance is that without this test, developers would have to test all interfaces manually, which is not too efficient.
Learn more about our Software Development methodologies here.
Continuous technological innovation has greatly increased the demand for IT professionals who have a high specialization in certain technologies, adding in turn the ability to adapt and learn quickly the particularities of each company and industry, so many recruitment departments are They focus on finding those talents with broad technological expertise, giving full priority to their ability to solve problems, decision making, knowledge input, etc.
However, it is common to find that employees do not integrate adequately to projects or work teams since, although they have the necessary technical knowledge and work skills, there may be notable differences in business culture that may limit possibilities of offering high performance.
For this reason, at Huenei IT Services we give you the importance of recruiting and selecting methodologies and tools that allow you to know job skills, hard and soft skills, as well as aspirations and other personal aspects that allow you to find the indicated profile.
Customer Needs Analysis
With the specifications of the client and his project, it is possible to identify a quality profile and organize job applications. In this way, dedicated teams are tailored and tailored to the needs, establishing a direct, efficient and timely communication channel.
This, with the objective of understanding and attending perfectly to the requirements, preferences and needs of the clients. The multidisciplinary team with extensive experience are the channels that allow measuring the scope of the development in question.
Understanding the corporate culture
Each company, project and development teams have their own guidelines and processes, which is directly linked to the industry and the services they offer.
Companies in sectors with a greater willingness to innovate generally require entrepreneurial, dynamic and creative talent. Unlike the more traditional companies that request more focused profiles and that meet the objectives.
Determining a profile for a company or a project facilitates the incorporation process, as well as the use of skills in new talents. In this way, by establishing the personal aspects of a profile, it will be possible to determine if an applicant is the one for the vacancy, aligning their personal, work and professional interests.
After understanding the scope of the project, the profiles involved and the corporate culture of the company, it is possible to develop a correct profile by dividing its competencies into soft and hard:
- Competences or hard skills: it is based on work antecedents, previous experience, knowledge of technologies applied daily, problem solving and the discernment that the person may have when faced with a certain situation.
- Soft skills or abilities: it is the ability to relate, the sense of commitment, values and work ethic, aspirations, personal goals and client connection, not only with the Huenei culture but with the needs of the client and his project.
Having the skills and abilities of a candidate well determined is the key aspect of good recruitment. The most reliable source for this is the computer technicians, who previously investigate to handle the important aspects of the knowledge required by the vacancy offered.
Search for candidates and interview with the client
During this stage filters can be applied according to previous experience in other projects, such as turnkey projects, facilitating decision making and hiring IT staff. Likewise, it separates the competences to the most qualified profiles for the project requested by the client.
Once the applicants or candidates have been recruited, they proceed to the interview with the client or the person in charge of the project, making clear the conditions and requirements that they need to contrast the capabilities, measure the degree of success achieved with each profile and improve The quality of dedicated teams.
Profile tests and their development
At this point, it is necessary to perform technical tests that determine knowledge in the programming languages and the technologies involved daily. Likewise, by means of psychotechnical tests it is possible to determine if the profile is associated with the company.
During the recruitment process, it will not only be necessary to find candidates with high-level profiles, but to use software development to generate in the talents, true fidelity and will with the business project.
Conclusion: talent acquisition for good results
In Huenei we understand that the profile indicated for a project is a mixture of hard and soft skills, creating a good set of dedicated teams. The person must be aligned with both the client, their requirements and needs.
Experience has allowed us to determine that happy employees are productive employees and that implementing good software development or mobile development is the key to consolidating a project and obtaining great performance in dedicated teams.