Leveraging AWS AI Services: Amazon SageMaker and Amazon Rekognition

Leveraging AWS AI Services: Amazon SageMaker and Amazon Rekognition

Learn how businesses can leverage AWS AI services like Amazon SageMaker and Amazon Rekognition to achieve more accurate, faster, and more efficient decision making. Explore use cases in retail, healthcare, and hospitality and discover the benefits of using AWS AI services, including improved insights and flexibility. Critical to success, however, is careful assessment of needs, prioritization of performance and scalability, and consideration of budget and team skills. With the right approach, AWS AI services can help organizations realize the full potential of their data for better results and increased competitiveness.

Continue reading

What’s New in Svelte? Unlocking Its Full Potential for JavaScript Developers

Unlocking Its Full Potential for JavaScript Developers

Discover the full potential of Svelte with this comprehensive article for JavaScript developers. Learn about the latest features of Svelte 3, including improved code splitting, reactivity, debugging, templates, and data binding. Learn why Svelte is different from React and other frameworks, and how its reactive, declarative syntax makes your code more predictable and easier to maintain.

Continue reading

News in NextJS 13: React server components for a better ecosystem

NextJS 13

During the last few days, there has been a lot of talk about NextJS 13 and the news it brings after its update. Thanks to this powerful React framework, we can create single-page JavaScript applications easier and with incredible results.

NextJS offers many advantages for both clients and developers, especially in terms of performance and speed. With the updates’ arrival, those advantages increased, so we will review the new features it has for us.

What’s new in NextJS 13?

You’ve probably read that NextJS 13 will be a game-changer for developers and users. However, until now, its innovations have been shown superficially, so today, we will explain the main changes that the framework brings.

Initially, many users focused their attention on experimental features and believed that version 13 was unstable. However, NextJS 13 can be safely upgraded from its previous version and will work with great stability if you don’t use the experimental APIs.

Let’s review each of the novelties this update brought without further ado.

Experimental Features

As we’ve already said, the latest NextJS update brought several experimental features still in development. One of the most notable is the change to its app directory, a feature that completely changes how data is obtained and processed.

This change will bring significant performance improvements that will cause developers to change how they design their applications.

Until now, NextJS allowed us to create a file and then make a route based on it. After the new update, the directory can be included in the root of each project, improving the routing considerably.

Another experimental feature is the new Turbopack wrapper, a Rust-based system that promises to be up to 700 times faster than Webpack. Finally, NextJS 13 brings a font optimization that allows you to use custom fonts downloaded during the build.

Server Components

By default, all components inside the app directory will be React server components. Thanks to this, the server components will be adopted without additional programming, which brings a higher performance from the beginning of the project.

When loading a page, the NextJS runtime will be cached and remain the same even as the app grows.

Client Components

In this release, client components add client-side JavaScript when needed. In general, these components should be used when:

  • You are using React client hooks
  • You depend on certain browser APIs
  • Want to add certain event listeners

Should you use client or server components?

In NextJS 13, client components should only be used if necessary. If not, it’s better to let NextJS use them as React server components since there will be less client-side JavaScript.

What about data collection?

Although in NextJS, you can get data from client components, and it recommends that you get it from the server. This way, you will achieve superior performance, and the user experience will be much better.

Obtaining data in server components brings many benefits, such as:

  • Direct access to back-end data resources
  • Get data and render the component in the same environment
  • Perform multiple data recoveries as a single round trip
  • Send Less JavaScript to the Client

Remember that getting data into client components is still possible, although it is recommended only to do so if absolutely necessary.

What else do you need to know about NextJS 13?

NextJS 13 brings new features that, although they will be very useful once they become stable, for now, they can cause many conflicts. If you’re not interested in testing its experimental features, you can safely upgrade from version 12 and take advantage of the stable changes.

If you want to experiment with its new features, you should know that you may have stability or performance problems in your project. After all, using these functions will serve as feedback to the developers and the problems they find.

Final thoughts

NextJS 13 brings several changes that make NextJS a much better development platform. Its new features promise to be very useful once they become stable, so it’s definitely worth keeping an eye on this update if you use NextJS in your projects. Meanwhile, NextJS 12 offers enough stability and performance improvements to make upgrading worthwhile. As always, it ‘s important to carefully weigh the risks and benefits of upgrading your NextJS version before making any changes. Good luck! 

4 e-commerce development milestones that Fuzzy Fish created for Villanueva

5 e-commerce milestones that Fuzzy Fish achieved for Villanueva’s success

How to revamp a leading company in the distribution of products for the agricultural sector, with a strong physical presence in Argentina, six branches that supply more than 3,600 stores and a stock of more than 4,000 products. The answer lies in the project that the Fuzzy Fish team designed for the client; a reliable e-commerce, 100% adapted to their requirements and scalable to their growth projections: to become a B2C platform and reach the mass consumer market. 

Villanueva’s vision

Argentina is known worldwide for its large-scale agriculture and livestock industries. Within this productive sector, and with more than fifty years of experience, Villanueva is positioned as a leading company in the distribution of agricultural products. It is oriented to agricultural producers and has the widest range of products: tools and instruments for the management and care of livestock, official ear tags, veterinary supplies, rural equipment, grain and harvest accessories. 

With an offer of more than 4,000 products and more than 3,600 customers in the country, Villanueva set a clear growth objective: to streamline its internal management and commercialization processes. This will be achieved by migrating to an ecommerce platform that expands its share in the domestic market, delivering orders more quickly and offering a better service. Fuzzy Fish was committed to the challenge and assigned an interdisciplinary team dedicated to researching and understanding all the client’s business processes to help them make their strategy tangible.

1st. milestone: Standardize the process

Achieving Villanueva’s growth goal required going head first with the standardization and automation of internal processes that were done originally by hand and followed different classification and management criteria. “For instance the sales and commercial areas used different categories, codes and names to designate the same thing when uploading data to the ERP system. That was the first and greatest challenge for the Fuzzy team, to standardize everything” shares the project Tech Lead. 

The team took the client’s requirements document to create the estimates and tasks involved in the development. “The client had no tech definitions on the what and how, which led us to create a basic prototype and, based on their feedback, adjustments were made. To design and develop the required functionalities, we relied heavily on our experience on previous e-commerce projects”. 

As the development progressed, the client began to discover that there were a lot of daily manual efforts that weren’t fully documented at the most. “One of our goals was to convert these human-executed steps into automations and algorithms, and that’s where the first definitions emerged.” Thus, the development allowed the client to proceed and automate a large part of its commercial and administrative management, providing greater clarity, knowledge and traceability of its own process.

Scope. Scope. The project began in October 2021, as an MVP planned to be developed in 8 months, which included the research and mobile and desktop design. In the first week of May 2022, the website was finalized and awaited for the client’s feedback prior to going into the scaling and maintenance phase.

2nd Milestone: Integrations with SAP and the official Livestock ear tags APIS

The development involved two main integrations:

  1. Connection with SAP ERP: An ERP system provides the automation, integration and intelligence essential to efficiently run all daily business operations linked to finance, logistics, services, sales, accounting, purchasing. This integration with SAP provides information to the e-commerce platform and, in order to turn it into a secure technological infrastructure, Fuzzy Fish decided to replicate it. “We decided to replicate SAP to prevent the e-commerce from crashing in case the ERP stopped responding. Thus we created a platform that is fed by SAP but that, at the same time, is independent in terms of its main functionality: the shopping cart”. 
  1. Integration with the national livestock identification system. This integration was achieved through an api developed by Villanueva that connects with the national livestock registration system. As the api has a complex handling infrastructure, to prevent it from generating errors, the Fuzzy team deployed an automation tool that facilitates the backup of each of the queries to this api. “We have a buffer that stores all the data we get so we can pick up from where the error was generated and continue the process manually or automatically.”

3rd. Milestone: Benefits added to the purchase flow and backend

3rd. Milestone: Benefits added to the purchase flow and backend

Within the purchase flow, the user accesses a cart and can purchase their agricultural items from a wide variety of more than 4,000 products. The platform makes it easy to:

  • Scroll between items through the search engine or by applying filters, access particular categories and line items.
  • See all the information of the item you click on: general details, technical description, assigned discounts, promotions or applied offers. 
  • Add a certain quantity of an item and/or different items to the cart.
  • Access the cart to see a breakdown of everything you loaded: total, subtotal, discounts applied, original price. 
  • Choose between home delivery or pick up from the branch and the payment method: debit in current account or through an eWallet -with credit card, debit card or physical payment at store
  • If an item is out of stock, you can still buy it. A pop-up informs you of the shortage and the delivery time of the item, but the purchase is confirmed.

Special feature for the purchase of official livestock tags. Villanueva is one of the leading companies in the sale of livestock tags. The tags are part of the national livestock identification system regulated by Senasa, the Argentine official agency in charge of executing national policies on animal health and quality. This system consists of identifying the animals with a card in the left ear and a button in the right ear, which allows the producer to monitor and control his cattle, offering guarantees on their sanitary conditions. Being a legalized and highly required product, the development of Fuzzy Fish contemplated a detailed analysis of the specifications of each type of tag and the development of three modes adaptable to each typology. This possibility is unique in the market.

Self-Management Backend

  • In the development of the backend, the possibility for the Villanueva seller to access a panel of pending orders and update them was contemplated. In addition, every 12 hours an automatic process runs that completes all pending operations due to a communication error with the api. 
  • The seller can enable items to appear in certain types of filters, ways or categories.
  • REPORTING. The site allows Villanueva to view sales reports with customized metrics and to have more control over the transaction information. 

4th Milestone: Scalable algorithm and north B2C

Currently it’s a B2B -Business to Business- platform, where vets and livestock producers are frequent consumers and in large quantities.The medium and long term projection is that all the functionalities will be ready to move towards a B2C -Business to Consumer- platform, that will offer products to the mass consumer market and will reach potential clients to whom they do not have access today”. 

Faced with this requirement, the Fuzzy Fish team applied a particular logic that contemplates business projection in the algorithm design. “It is interesting the study and the logic we apply to the development to make it scalable in the future, based on the client’s growth projections”.

Next Challenge: Make The Environment More Stable

To host the e-commerce, the client had a VPS -virtual product service- in the cloud, hosting more services that consume resources. This infrastructure aspect led the Fuzzy Fish team to suggest improvement alternatives, which could range from hosting the services on different VPSs, allocating more resources to the current VPS, or even putting it on a physical server. This suggestion was taken into consideration by the client and is one of the next steps to be included in the planning. 
For Fuzzy Fish, designing customized developments -and in this case in such a specific industry as agriculture- enriches the experience of its team of talents in order to provide expert knowledge, innovative methodologies and IT solutions to more customer segments. “In this case, we aim at designing the algorithm so that it is scalable and does not consume too many resources in the future, thinking of a platform that can grow a lot in terms of usability”, concludes Tech Lead.

Tips for building a successful Minimum Viable Product

Minimum viable product

Do you know the importance of having a Minimum Viable Product? When launching a product on the market, there are two possible scenarios. The first is that your product is successful and that your customers accept it; the second is that your product is a resounding failure and is gradually discarded.

If the second scenario occurs, you are facing a big commercial error and must solve it as soon as possible. An MVP can prevent you from making these big mistakes, and building on them is quite a common IT practice in modern businesses.

In short, an MVP is a product development method focused on creating a viable product. These products have minimal features to be evaluated among the first buyers to get feedback or ideas for future developments.

Why should you start thinking about building a Minimum Viable Product?

A Viable Minimum Product is extremely useful because you can deliver faster than any other complete product. In this way, you will be able to notice how it is received by buyers and detail the first opinions, which are the most valuable.

In addition to the above, an MVP could also give you certain benefits if all goes well. On a business level, anything good you can bring to your business is welcome, and an MVP could:

It attracts investors

One good thing about MVPs is that they show customers’ interest. This can attract different investors who will also be interested in your product and your business. In a nutshell, this will persuade investors to invest resources in your company.

Has value

With a Minimum Viable Product, you can focus on all the key benefits you offer your potential customers. In this way, you can add some details to its development for improvement, which would also improve its reception.

You save money

When creating an MVP, the costs are much lower. This is because by including the product’s core features, developers and designers spend less time and resources building it. In addition, not only do you save money, but you can also quickly launch it on the market.

It’s iterative

As we already mentioned, you can go little by little adding details to your product as time goes by. In this way, you will see if the slight changes they make are liked instead of risking everything in a drastic change.

Tips for building a Minimum Viable Product

If you need to learn how to build an MVP from scratch, don’t worry; we will help you with that. For that, we are going to give you a list of the best tips, which are:

Think about your target audience

In any commercial strategy, it is vital to identify the target audience to take a step toward success. For this, you should be able to get answers to the following questions:

  • Who are you developing the app for?
  • Is there a specific market/region you are targeting?
  • What do these people have in common? (Demographics, motivations, values, etc.)

By getting these answers, it’s easier to get started on building your MVP. This step is essential, so pay attention to it, and you will succeed in marketing outright.

What is the timeline?

It is especially important to launch your Minimum Viable Product at the right time; it cannot be random. It would help if you considered growing competition and changing business needs and user demands.

If you don’t launch at the right time, included features can reduce values. At the same time, the MVP features can also be accommodated within the budget.

What are the most valuable features?

Your MVP’s features should be the most valuable to the end customer. You can identify those characteristics by finding answers to the following questions:

  • What are the pain points or problems experienced by the target audience?
  • What features can be developed to address pain points?
  • Why would they want the features to be developed?

You can get some other answers, but that will depend on the product you are developing. You must always be attentive to development and details.

Could you keep it simple?

A Minimum Viable Product includes only the basic functions. To select them, it is helpful to start an MVP software design with a product discovery process by surveying customers.

Create prototypes

This step is vital for the development of MVP. A prototype shows the structure and flow of the application. Wireframing ensures a smooth and convenient structure for a user. Also, it will help you link different components of the MVP software design.

Pre-launch and market the product

When the prototypes are ready, the ideal is to talk with the technical team. The team can report a problem or potential dawn. They can say how long it will take to build a feature and comment on other important things before they start marketing it.

Is there scalability?

Planning for scalability in advance is an especially useful thing to do. This goes along with what we mentioned about adding some future changes to your product. Therefore, you must make your Minimum Viable Product scalable to transform it into something else if necessary.

Have you already noticed how good the MVPs are? Imagine spending 18 months developing a high-quality product; imagine how much you will invest. What would you do if, at the time of its launch, you realized that nobody would want to buy or need it? Developing a good MVP is one of the best things you can do.

Final thoughts

MVPs are the best way to reduce risks when launching a new product. Thanks to them, you can get customer feedback and make necessary changes. If you keep these tips in mind, you will successfully build your Minimum Viable Product. Remember that the key is to start with something small and then grow.

The S.O.L.I.D Principles of Object-Oriented Programming

S.O.L.I.D Principles

S.O.L.I.D principles are five basic principles of object-oriented programming and design. They were first proposed by American software engineer Robert C. Martin in the early 2000s. The acronym S.O.L.I.D stands for Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion.

The main idea behind these principles is to make code more readable, understandable and maintainable. Let’s take a closer look at each principle.

History of the S.O.L.I.D Principles

The S.O.L.I.D principles were first proposed by American software engineer Robert C. Martin in the early 2000s in his paper “Design Principles and Design Patterns”. He came up with these principles as a way to make code more readable, understandable and maintainable. The S.O.L.I.D acronym was introduced later by Michael Feathers, a software developer and author. 

In the last 20 years, these five principles have revolutionized object-oriented programming. They changed how we write software and brought about a new era in which we can write code that is scalable and maintainable!

What are the S.O.L.I.D principles?

The S.O.L.I.D Principles serve the same purpose: To create understandable, readable, and testable code that many developers can collaboratively work on. The acronym S.O.L.I.D stands for:

  • Single responsibility principle
  • Open-closed principle
  • Liskov substitution principle
  • Interface segregation principle
  • Dependency inversion principle

The following principles can be used to develop software with considerations for maintaining and extending as the project grows. Adopting these practices will also contribute towards avoiding code smells, refactoring your codebase into a more maintainable state (refactorings are one way that this may happen), or even applying agile methodologies!

Let’s take a look at each of these principles in turn.

The Single Responsibility Principle

The single responsibility principle states that every class should have a single responsibility, and that responsibility should be entirely encapsulated by the class. In other words, do one thing and do it well.

The only change that should be able to affect the class’ specification is a software specification.

The Single Responsibility Principle states that every module should have only a single responsibility. This way, different teams can work on the same project but must be aware not to edit the class or else it will lead to incompatible modules.

Open-closed principle

The open-closed principle states that software entities (classes, modules, functions, etc.) should be open for extension but closed for modification. Modification is the act of changing or modifying something in an existing code, while extension means adding new features to your program.

That is, you should be able to extend a class’s behavior without having to modify the class itself. This means,we can add more functionality to the class extending it instead of modifying it

Modifying the existing code can introduce unexpected bugs. We should avoid this risk whenever possible by adding new functionality without touching already tested code that might be affected by these changes too closely for their own good!

Liskov substitution principle

The Liskov substitution principle states that subclasses should be substitutable for their superclasses. That is, a client should be able to use a subclass instead of its superclass without knowing the difference.

For example: class B is a subclass of A. That means that we should be able to replace an object from class A with an object from class B. The child extends the behavior.

Interface segregation principle

The interface segregation principle states that it is preferable to have many specific implementations that are few but too generic. In other words, an interface should be fine-grained and contain only those methods that are absolutely necessary for its clients.

Dependency inversion principle

The dependency inversion principle states that high-level modules should not depend on low-level modules. Both should depend on abstractions (e.g., interfaces). Abstractions should not depend on details. Details (concrete implementation) should depend on abstractions.

Final thoughts

There you have it! These are the S.O.L.I.D principles of object-oriented programming and design. If you follow these principles while designing, writing and refactoring your code then it will be much more clean. Your  testability also increases with this method since those are things that people usually focus on when they write tests for their program’s functionality in the first place!

We hope this article has helped to make these concepts more understandable and that you can start applying them in your own coding process. Thanks for reading!