FAQs
Introduction
This guide will help you look up common FAQs with Avada Development team.
FAQs list
Procedure and Ways of working FAQs
What is point? Point and KPI?
Key Performance Indicators (KPIs) are metrics used to evaluate an individual's performance, measuring their effectiveness and contributions towards achieving business objectives. KPIs help structure compensation by combining a base salary with performance-based incentives.
Points represent a quantifiable measure assigned to tasks based on their complexity and uncertainty, rather than the hours spent. The value assigned to each point is 45,000 VND. We use Fibonacci numbers (1, 2, 3, 5, 8, 13, 21, 34, 55, 88, 144) to scale the points from easiest to most challenging tasks. For example, achieving 66 points corresponds to a 3 million VND performance bonus, while 88 points equate to 4 million VND. If you exceed your assigned KPI target, you can earn additional bonuses, rewarding exceptional performance.
This system ensures that compensation is not only fair but also directly correlated with the value and complexity of the work performed, encouraging efficiency and innovation.
Why is it complexity? Not hours?
In determining the value of a task, we focus on its complexity rather than the time spent. This is because the intrinsic value of a product or service isn't solely dependent on the cost of its production. Consider a doctor who can diagnose a condition in just a few minutes; this doesn't necessarily mean the task is simple. Instead, it reflects years of study and practice. Conversely, if an intern doctor takes weeks to reach the same conclusion, it doesn’t mean their effort is inherently more valuable. While their commitment is considerable, the value lies in gaining knowledge and experience, not just in time spent.
The same principle applies in software development. If a junior developer takes longer to implement a feature, this doesn't automatically merit more points. Instead, points are awarded based on the complexity and uncertainty of the task, guided by questions such as:
- Have we implemented a similar feature before? How familiar are we with it?
- Does this feature involve extensive logic, coding, and self-testing?
- Does it require researching new technologies or APIs?
This approach ensures that recognition and rewards are aligned with the challenge and the skill required, not merely the duration of the task.
General FAQs
We started Avada Commerce as Shopify app developers since when?
Since June 2020. We submitted our first app PDF Invoice a few months later.
Does this guide help me with every knowledge regarding developing Shopify app with Avada?
Mostly. Besides, you need to read official documentations regarding our techs tack:
- Firestore
- Firebase Functions and other services
- React and Preact
- Build tools: Webpack and Vite
- Shopify DevDocs and Shopify Polaris
- Shopify changelog
- Data warehouse: Big Query
- AI databases Weaviate and Chroma
Is there a certificate for Shopify developers?
Yes, but unlike GCP certificate. The Shopify Academy certificate is not yet so diversified with Pro, Expert level. But it is good to learn and earn.
Best setup for development workspace
It is recommended to setup your working environment with the following:
- Webstorm for IDE: It is free-to-use now.
- Github Copilot: 100% recommended at least free version. Help you speed up your coding. Or pay for ChatGPT pro.
- Daily.dev extension to sync up to date with technology.
- Tune for Medium.com. 5$ a month, but you will learn a lot. Keep yourself refreshed.
- Resource Override for debugging frontend apps
- Altair GraphQL Client
- Docker
- Notion app for push notifications. The web version does not support.
- Screenpal or Loom for screen recording
- Shopify theme search (Fast) for full-text search within theme editor.
- Lightshot for screenshot
Has an app implemented X?
Have any apps implemented Shopify Functions?
Yes, go see Joy Loyalty program, AOV Free Gift and BOGO, AOV Bundle. They did implement Shopify Functions for complex and customizable discount logic.
Have any apps implemented checkout UI?
Yes, go see Joy Loyalty program. We use checkout UI for Shopify Plus stores to redeem points right on the checkout page.
Have any apps implemented AI?
AI is changing really fast. In Avada, we implemented both RAG-powered application, simple OpenAI generative tasks. Go see our internal docs or Chatty app to see AI in action.
Have any apps use Firebase Functions Version 2?
Using Firebase Functions V2, every functions would be Cloud Run under the hood. It will have more RAM, timeout seconds limit and scalability. Avada Seo app has implemented this approach for Site auditing feature.
Have any apps use Web Pixel extensions?
Yes, we have implemented it with Joy Loyalty Program app as the tracking for the referral feature since the Scripttag API is deprecated.
Have any apps implement Shopify Max Modal?
Yes, go to Update Shopify App bridge V4 guide to see more. SEOon Blog app implement this UX. You may encounter BFS review regarding this criteria.
Have any apps integrated with Headless Commerce?
Yes, Joy Loyalty program has. It is about registering your JS SDK to the Hydrogen and publish your Meta Field data to Storefront API. See the guide here
Technical
Can I use Scripttag API?
No, you should no longer use Scripttag API. Use Theme App extension instead. It supports both App Embed and App block.
How to implement save bar with Max Modal?
It is not stated in the Shopify App Bridge Documentation, but it can be done. Normally, using the SaveBar component will only appear on the top Shopify search bar. With the SaveBar implemented for the Max Modal, the close button of the modal will be hidden and it trigger leave prompts if you try to leave the page. All you need to do is to place the SaveBar component inside the Modal content.
import {Modal, TitleBar, useAppBridge} from '@shopify/app-bridge-react';
export function MyModal() {
const shopify = useAppBridge();
return (
<>
<button onClick={() => shopify.modal.show('my-modal')}>Open Modal</button>
<Modal id="my-modal" variant="max">
<div></div>
<TitleBar>
<button variant="primary">Primary action</button>
<button>Secondary action</button>
</TitleBar>
<SaveBar id="my-save-bar">
<button variant="primary" onClick={handleSave}></button>
<button onClick={handleDiscard}></button>
</SaveBar>
</Modal>
</>
);
}
Why serverless with GCP, not AWS?
Our decision to utilize Google Cloud Platform (GCP) for serverless computing over Amazon Web Services (AWS) is driven by several key factors:
-
Community Support and Documentation: GCP offers superior community support and more comprehensive, user-friendly documentation. This makes it easier for developers to find help and resources, enabling faster and more efficient problem-solving.
-
Learning Curve and Cost: While AWS dominates in terms of market share, its platform can be complex and often necessitates partnerships with specialized AWS agencies for successful implementation. This can introduce additional costs and complicate the learning process. In contrast, GCP is more accessible for developers preferring to learn independently, thanks to its straightforward tools and clearer documentation.
-
Pricing Model: GCP provides a more reasonable pricing model that aligns better with our needs. Its cost structure is generally more predictable and often more cost-effective compared to AWS, especially for the scale at which we operate.
Overall, these advantages make GCP a more suitable choice for our development environment, aligning with our goal of efficient, self-sufficient, and cost-effective serverless computing.
Why KoaJS over others?
We use serverless, each instance is quite small, around 256MB. We cannot boot NestJS in RAM just to handle on HTTP request. KoaJS is lightweight, and simple enough for cloud functions. Firebase Functions does support Express right out of the box, however, KoaJS add some extra layers of routing handling, data handling for the tech stack.
TypeError: LRU is not a constructor
If you encounter this error running your project, remove node_modules and yarn.lock file, then run yarn install
again.
find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +