I have a strange habit when I find software I want to try. Before I read half the documentation, I look for the installation section. I want to know what stands between the thing looking useful in a demo and the thing actually existing on a real website. Sometimes the answer is pleasantly boring. Add a script, enable something in a dashboard, refresh the page. Other times I open the setup guide and immediately feel as if I have accidentally volunteered for a weekend project.
Create an application. Generate credentials. Configure an endpoint. Add an environment variable. Install a package. Initialise the package. Add a provider somewhere near the top of the application. Configure a callback. Add another callback because the first one only handles authentication. Whitelist three domains. Copy a secret. Restart the server. Clear the cache. Read the section titled “Common Issues” because something still does not appear.
None of those steps may be unreasonable individually. The product might genuinely need them. The problem is what happens inside the head of the person reading the list. A feature they wanted to try this afternoon has quietly changed category. It is now implementation work.
And implementation work has an unfortunate habit of being postponed.
Useful software spends a surprising amount of time waiting to be installed.
I think software companies naturally imagine the customer journey moving in a straight line. Somebody discovers the product, understands the value, chooses a plan, completes setup and starts using it. Each stage leads cleanly into the next one.
Real businesses have calendars.
The person who finds the product may not be the person who controls the website. The person who controls the website may be busy. The website may be maintained by an agency. The agency may schedule small changes for next week. A developer may need access to production. Someone may want the installation tested on staging first. A tiny request enters a queue beside bug fixes, analytics changes, checkout problems and whatever else the company has decided is more urgent today.
A product can be purchased and still remain conceptually outside the business for days or weeks because the final implementation step has not happened.
This is why I think installation deserves much more product attention than the word “installation” suggests. It decides how much coordination is required before the value can begin.
There is a big difference between five minutes of work and five minutes of work that requires a developer.
Time estimates hide this constantly.
A documentation page says: “Installation takes approximately five minutes.”
Great. Five minutes sounds trivial.
Then you discover those five minutes involve editing application code, accessing deployment credentials and pushing a production release.
For a developer already working inside the project, that may genuinely be five minutes. For the person who owns the business and has never opened the repository, it may mean finding the developer, explaining what needs to be done, creating a task and waiting until that task reaches the top of somebody else’s list.
The amount of typing was small.
The organisational cost was not.
Implementation friction is rarely measured in clicks alone. It is measured in how many people need to become involved before the product exists in the real environment.
“Ask your developer” is a much bigger instruction than it looks.
I understand why software documentation says it. Sometimes the installation really does require a developer, and pretending otherwise helps nobody.
Still, those three words can change the entire adoption path.
Imagine a small online shop. The owner handles products, customer service, advertising and half the website themselves. They find a tool that could solve a real problem. They are willing to pay. They create the account. Then the setup guide says they need their developer.
Maybe they have one.
Maybe “their developer” means somebody who built the site eighteen months ago and now charges a minimum hour for changes.
Maybe it means an agency contact who replies tomorrow.
Maybe it means a technically confident friend who helped them set up the site.
Maybe it means nobody.
The product has just discovered that its real installation requirement is not technical knowledge. It is access to another human being.
This gets especially strange when the product itself is supposed to save time.
Productivity software, support tools, analytics systems and automation products often sell some version of the same promise: spend less time doing repetitive work.
Then onboarding asks the customer to spend an afternoon integrating the thing that will eventually save time.
That can still be worthwhile. Plenty of powerful products deserve substantial setup. A payment processor should not pretend financial infrastructure is one harmless copy-and-paste. Complex data systems have complex requirements.
What bothers me is accidental complexity: setup work that exists because the product architecture pushed its problems outward onto the customer.
If a customer has to understand your internal system before they can install the visible part of your product, some of that complexity may be in the wrong place.
I like boring installation.
Boring is an underrated quality in software.
Nobody proudly tells a friend that installing a support widget was an unforgettable experience. They should not have to. The installation exists to get out of the way so the customer can reach the part they actually bought.
When I imagine a good setup flow, I want the interesting work to happen on the product side. The business gives the system enough information to identify the website, chooses the relevant configuration, and receives something small and predictable to place on the site.
Paste it.
Load the page.
It is there.
The simplicity should feel almost anticlimactic.
Small installation surfaces reduce fear as much as they reduce work.
There is a psychological part to this that I think matters.
People are understandably careful with production websites. Especially the parts that make money.
If I tell somebody to install several packages, change routing configuration, edit application state and add new server-side credentials, they need to understand what those changes can affect. Even if everything is safe, the surface area feels large.
If I give them one external script that loads a support interface, the mental model is much easier.
They can see what is being added.
They can see where it is added.
They can remove it.
They can test the page before and after.
The reversibility is obvious.
That matters because implementation is partly a trust problem. Businesses are deciding whether to allow somebody else’s software into a website they depend on.
Reversibility changes how willing people are to experiment.
I am much more willing to try something when I understand how to undo it.
This is true far beyond software. If I can test a change and easily return to the previous state, the cost of curiosity is low. If the change involves migrations, dependency changes or unknown side effects, I want to think much harder before touching anything.
A small installation gives the customer a clean escape route. Remove the snippet and the website goes back to the way it was. That clarity makes the first test less intimidating.
I think this matters particularly for younger products. A business may be interested enough to try something without yet having enough trust to redesign part of its infrastructure around it.
Let them try it cheaply.
There is also a difference between integration and dependency.
Good integrations connect systems where the connection is useful. Dependency begins when removing one product becomes a project of its own.
Customers notice this risk even when they do not use those exact words.
If adopting a tool means changing how authentication works, restructuring a checkout or moving data into a proprietary workflow, the decision feels larger. The product has become part of the architecture.
Sometimes that is completely justified.
A support layer added to a website has the luxury of aiming for something much lighter.
It can sit beside the existing product.
The business should not need to redesign what already works just to answer customer questions better.
A snippet is only simple if the difficult work happens somewhere else.
This is where the phrase “just one script” can become misleading.
The script itself may be tiny, but the product still has to do serious work. It needs to know which customer configuration belongs to the page. It needs to load securely. It needs to handle updates. It needs to communicate with the backend. It needs to fail gracefully. It needs to avoid breaking the page it was added to. It needs to work across different website stacks and browsers.
Simplicity at the customer boundary usually requires complexity somewhere behind that boundary.
I think that is a reasonable trade.
The product team deals with its own complexity once.
Customers should not each have to rediscover it during installation.
This is one of the nicest things about hosted software.
If the logic lives primarily on the service side, improvements can happen without asking every customer to manually install a new version.
The website loads a stable integration point. The service behind it evolves.
Obviously this needs to be handled responsibly. Changes should remain compatible, performance needs attention and customers should not wake up to surprising behaviour simply because the vendor changed something remotely.
Used well, though, this architecture removes a lot of maintenance from the customer.
They installed the product once.
They should not need a developer every time the product learns something new.
Versioning matters when you promise a stable installation.
A tiny installation surface creates its own responsibility.
If hundreds of websites depend on the same script path, careless changes become dangerous. What looked simple for the customer now requires discipline from the service provider.
You need to think about compatibility. You need to think about loading failures. You need to think about what happens if an older implementation still exists somewhere. You need predictable behaviour when the network is slow or the service is temporarily unavailable.
The customer gave up control over part of the implementation because you made it convenient.
That convenience creates an obligation to be conservative with their website.
A support widget should know how to fail quietly.
This is a point I care about a lot.
If optional support software fails to load, the website itself should continue doing its job.
The shop should still sell.
The signup form should still work.
The checkout should still complete.
The application should not become dependent on a decorative or supportive layer that happens to be temporarily unavailable.
Small integrations make this separation easier to reason about. The support system can enhance the experience while remaining outside the core path the business depends on to function.
“Easy to install” means very little if a third-party outage can take the host website down with it. A small integration surface should also mean a small failure surface.
Performance is part of installation quality.
You can make setup beautifully simple and still ruin the customer’s opinion if the script makes their site noticeably slower.
Website owners care about this for good reason. Their page speed affects user experience, conversion, search performance and the general feeling of quality. A support tool cannot arrive saying, “Installation takes thirty seconds,” then add a huge blocking bundle to every page.
Implementation simplicity needs technical restraint behind it.
Load asynchronously where possible. Keep the initial work small. Avoid blocking the page. Delay expensive behaviour until it is actually needed. Treat the host website as somebody else’s property rather than a blank canvas you own.
That last part is probably the most important attitude.
Third-party software is a guest.
I like thinking about embedded software this way.
The website existed before your script arrived. It has its own styles, layout, business logic, performance constraints and strange little quirks accumulated over the years.
Your product is being invited in to perform a specific job.
A good guest does not rearrange the furniture.
The integration should avoid colliding with styles, avoid making assumptions about the page and avoid demanding ownership of things unrelated to its job.
This is much easier to say than to implement across the messy reality of the web, but I think the principle matters.
The web is much messier than your demo environment.
A product team tests installation on a clean website with current JavaScript, sensible CSS and no strange extensions. Everything works.
Customers have WordPress themes from 2017.
They have Shopify stores with six marketing scripts.
They have custom PHP sites built by somebody who disappeared years ago.
They have strict Content Security Policies, caching layers, delayed script loaders and plugins that optimise code by aggressively rewriting it.
Somewhere there is always a website doing something you did not expect.
A good installation system accepts this as normal rather than treating every non-standard environment as customer error.
The easier the installation looks, the more responsibility the product takes for handling that variety.
Copy-and-paste should actually mean copy-and-paste.
I have seen setup guides that present a code snippet as if the user only needs to paste it, then hide six assumptions in the paragraph underneath.
Replace YOUR_PROJECT_ID.
Generate a secret.
Change REGION if necessary.
Add your domain to the allowlist.
Initialise the object separately.
The snippet was really a template.
If a product already knows the customer’s site identifier and installation token, I would rather generate the final code for them. Let the dashboard put the correct values into the snippet before the customer sees it.
Copy should mean copy.
Paste should mean paste.
Tiny details like this determine whether a setup guide feels trustworthy.
Every placeholder is a chance to make a mistake.
Imagine the customer sees:
<script src="..." data-site-id="YOUR_SITE_ID" data-token="YOUR_TOKEN"></script>
They copy it.
They paste it.
Nothing happens.
Only then do they realise two values needed replacing.
Maybe they replace one and miss the other.
Maybe they include quotation marks incorrectly.
Maybe they use a public identifier where a different identifier belongs.
None of these mistakes proves the customer is incompetent. The product gave them a little programming exercise when it already possessed the correct answer.
Generated installation code removes an entire category of avoidable support conversations.
A good setup flow should answer “where do I put this?” before the customer asks.
Developers know what a script tag is.
A lot of business owners do not care, and that is perfectly reasonable.
They may know how to edit their website through a CMS without ever thinking about HTML structure. They need practical instructions in the language of the system they use.
WordPress users may want to know whether the snippet belongs in a theme, plugin or custom code area.
Shopify users want to know where it goes in the theme.
Someone with a custom site may need a plain explanation: place it before the closing body tag or wherever your global scripts are loaded.
The snippet can remain the same while the surrounding instruction adapts to the customer’s environment.
This is where installation guidance becomes support before the product is even installed.
I think onboarding is the first support conversation a product has with a customer.
The customer has already paid attention, maybe paid money, and is trying to turn the promise into something real.
If the instructions are vague, they are immediately asking questions.
“Which file?”
“Does it matter where?”
“Is this secret?”
“Will this change my existing checkout?”
“Can I test it first?”
“How do I know it worked?”
Good implementation design answers these before the customer has to leave the setup flow and contact support.
The final confirmation matters more than people think.
Suppose the customer pastes the snippet and refreshes the website.
They need some way to know the installation is actually complete.
Seeing the widget is one answer.
The dashboard confirming that the site has connected is even better.
Installation without confirmation creates a strange state where the customer is unsure whether they are finished.
Maybe the interface appears, but is it connected to the right workspace?
Maybe the dashboard still says “waiting for installation”.
Maybe caching means the change has not reached every visitor yet.
A clear success state closes the loop.
People like knowing when they can stop configuring things.
The installation should reveal the product quickly.
There is a particular kind of disappointment when onboarding takes longer than discovering whether the product is good.
You spend an hour configuring everything, finally load the result and realise within thirty seconds that the tool is not for you.
That feels expensive because the evaluation required commitment before evidence.
A lightweight installation reverses the order.
Get the product onto the website quickly.
See it behave.
Ask it questions.
Decide whether the result is useful.
Then spend more time refining knowledge, context, actions and appearance if the product has earned that time.
I think products should earn configuration.
There is a huge difference between setup before value and setup after value.
People are much more willing to configure something once they have seen why the configuration matters.
Imagine onboarding asks you to create fifteen rules before anything works. Each rule feels like homework.
Now imagine the product works immediately using sensible defaults. You see the result, notice one behaviour you want to change and create a rule to improve it.
Same configuration.
Completely different motivation.
This is one reason I like starting support systems with the information already available on the website. The customer can reach a useful first version before manually teaching the system every detail of the business.
Defaults are part of implementation too.
Installation friction does not end when the code is added.
What happens when the product first appears?
Is it usable?
Is there a sensible position?
Does it have reasonable colours?
Is the basic behaviour already configured?
Or does the customer now enter another hour of mandatory setup?
Good defaults let people begin from something coherent and change only the parts they care about.
A blank configuration screen is flexible.
It is also work.
The first useful version does not need to be the final version.
I think onboarding sometimes suffers because products try to collect every possible configuration choice before allowing the customer to continue.
Brand settings.
Team permissions.
Notification rules.
Escalation behaviour.
Integrations.
Knowledge.
Advanced settings.
All before the customer has seen the thing work.
I would rather let them reach a functioning version sooner. Advanced configuration can remain available once they understand what they are changing.
There is no prize for completing every settings page on day one.
Simple installation helps support teams too.
Every step you remove from onboarding is one fewer step somebody can get wrong and one fewer issue the support team has to diagnose.
If setup has twelve moving pieces, support needs to understand twelve moving pieces.
Which package version are you using?
Did you initialise it?
Is the callback registered?
Is the API key correct?
Is the environment variable available in production?
Did the deployment finish?
Is the proxy blocking requests?
Complex installation creates a whole support category around the support product.
There is something wonderfully absurd about needing significant customer support to install customer support.
A single snippet creates a smaller debugging space.
If the integration consists primarily of one generated snippet, diagnosis becomes much easier.
Is the script present?
Does the browser load it?
Are the identifiers valid?
Is the site authorised?
Does the network request succeed?
You still have edge cases, because the web will always provide edge cases.
The search space is much smaller.
That helps the customer, the support team and the developers maintaining the product.
I think implementation quality is part of product quality.
We often talk about product quality as the experience after setup.
Is the interface good?
Are the answers useful?
Does the feature work?
Is the service reliable?
Those things obviously matter.
The customer’s experience began earlier.
They read the setup guide.
They decided whether the instructions looked safe.
They figured out whether they could do it themselves.
They wondered what would happen if they made a mistake.
They decided whether installation was worth doing today.
That is already product experience.
This shaped the way we approached Reesponder’s installation.
Reesponder is supposed to sit on websites that already exist. Those websites may be custom applications, ordinary company sites, shops, old PHP projects or platforms somebody maintains through a visual editor. Asking every business to restructure its website around us would defeat a lot of what makes the product useful.
So the installation boundary had to stay small.
The business creates the workspace, gives Reesponder the website it should understand, activates the product and receives a generated script containing the identifiers that connect that site to the correct setup.
The complicated parts stay on the Reesponder side.
The website gets the piece it actually needs.
I like that split because the customer should not need to understand our backend architecture to add support to their own frontend.
Five-minute installation is only useful if it means five real minutes.
There is a dangerous habit in software of measuring setup time from the developer’s perspective.
“It’s only one line.”
Fine.
Where does the customer find the line?
Do they know where it belongs?
Do they need credentials?
Does somebody need to approve production access?
Is there a deployment process?
Can they confirm it worked?
The honest setup time includes the surrounding journey.
If the code takes thirty seconds to paste but the customer spends forty minutes figuring out where to paste it, installation did not take thirty seconds.
Documentation can remove technical friction without pretending everyone is technical.
I dislike documentation that swings between two extremes.
One version assumes the customer already knows everything: “Add the snippet to your global layout.”
The other explains what HTML is from first principles to somebody who just wanted to know where the code goes.
Good implementation guidance respects both people.
Give the direct answer first.
Show the exact code.
Explain the expected result.
Then provide platform-specific help or deeper detail for whoever needs it.
People should be able to move through setup at the level of explanation that matches their situation.
Screenshots are useful when they answer a location question.
Implementation documentation is one place where screenshots genuinely earn their space.
If the question is “where is this setting?”, show the setting.
If the question is “what should I see after installation?”, show the result.
If the question is “which code do I copy?”, show the exact area.
Screenshots become less useful when they are decorative proof that a dashboard exists.
Every image should reduce uncertainty.
Implementation guides are practical documents. They should behave like practical documents.
Installation is also where security explanations need to become concrete.
Customers may see identifiers, tokens or external scripts and reasonably ask what is safe to expose publicly.
Telling people to paste something onto a public website means the product team has to understand that the browser will expose it.
Public installation identifiers should be designed to be public.
Secrets belong on the server.
The customer should never be told to hide something in frontend code that cannot actually remain hidden there.
This sounds basic, but implementation design often reveals whether security boundaries were thought through early or patched around later.
Good setup makes the architecture easier to trust.
A customer does not need an infrastructure diagram to understand the basics.
The script identifies the website installation.
Sensitive service credentials stay away from the page.
The visible integration communicates with the service through controlled endpoints.
The business can remove the installation whenever it wants.
Those are comprehensible boundaries.
Simplicity helps security communication because fewer moving parts need to be explained.
There is a business reason for all of this too.
Every additional implementation requirement narrows the number of people who can successfully adopt the product.
If installation requires a React developer, businesses without one are pushed out.
If it requires server access, customers with hosted platforms may struggle.
If it requires changing checkout logic, adoption becomes a much larger internal decision.
A lightweight installation can travel through organisations more easily.
A marketer can discover the product and send one snippet to whoever manages the site.
A small business owner may be able to install it directly.
An agency can add it without needing to understand the customer’s entire application.
Lower implementation friction increases the number of people who can say yes without organising a project around the yes.
This is why implementation affects sales even when nobody calls it sales.
Imagine two products solve the same problem equally well.
Product A requires a technical integration meeting, a development task and access to several systems.
Product B requires one generated snippet and a refresh.
A company might prefer Product A enough to justify the work.
If the difference in value is small, the installation burden becomes part of the comparison whether the pricing page admits it or not.
Buyers are evaluating total disruption.
How much money?
How much time?
How many people?
How much risk?
How difficult is it to leave later?
Implementation answers several of those questions at once.
The best onboarding often looks smaller than the engineering behind it.
I think this is a compliment to good product engineering.
The customer sees a button.
Behind the button are authentication, state changes, validation, provisioning, network requests, logging and whatever else the product needs.
The customer does not need to admire that machinery.
The same principle applies to installation.
A tiny snippet can sit on top of a substantial platform.
The elegance is in keeping the complexity where the people building the product can manage it instead of distributing that complexity to every customer who wants to use it.
Simple installation should not become an excuse for shallow capability.
There is another trap here.
Sometimes products stay easy to install by staying extremely limited. The integration is tiny because the product barely connects to anything meaningful.
That is not the kind of simplicity I find interesting.
The challenge is allowing deeper capability to grow behind a stable installation surface.
The support agent can learn more.
The business can add context.
Team access can expand.
Escalation rules can become more sophisticated.
Actions can connect to other systems.
The website-side implementation should not need to become proportionally more complicated every time the product becomes more capable.
The script tag is a boundary.
That is probably the way I think about it most clearly.
On one side is the customer’s website.
On the other side is the support platform.
The installation defines how much the customer needs to know about the second side in order to use it from the first.
A good boundary keeps responsibilities clear.
The website provides a place for the product to appear and the identifiers needed to connect it to the right configuration.
The support platform handles the rest of its own work.
That separation makes the product easier to install, easier to update, easier to remove and easier to reason about.
It also makes experimentation much faster.
A business can try a support agent on one site before committing to a broader rollout.
An agency can test it on a staging environment.
A company can add it to one product page first and watch how customers use it.
If implementation is lightweight, these experiments are cheap.
Cheap experiments create better decisions because people can evaluate the real product instead of debating what implementation might feel like.
I would rather somebody try Reesponder, ask it difficult questions and decide they do or do not like it than spend a week in meetings evaluating whether it is worth integrating.
Setup friction compounds when a company has several websites.
One complicated installation is annoying.
Ten complicated installations become policy.
Agencies, groups of brands and businesses with several websites feel this quickly. If every site requires custom engineering, adding another one becomes a scheduled project.
If each site receives its own generated installation snippet and configuration, expansion is much easier.
The customer repeats a known procedure rather than reopening an integration project.
Repeatability is an underrated feature of simple setup.
Implementation can be simple without hiding what is happening.
I do not like magic setup that gives the customer no idea what changed.
Simplicity should not mean opacity.
Show the code being installed.
Explain what it loads.
Explain which site it connects to.
Explain how to remove it.
Give technically curious customers enough detail to understand the boundary.
A product can be easy for a non-technical person while still being transparent to a developer reviewing the implementation.
Developers appreciate simple integrations too.
I think there is a weird assumption that technically simple setup exists only for non-technical customers.
Developers have better things to do as well.
Give a developer a choice between integrating a support tool in five minutes and integrating one in two hours and they are unlikely to choose the two-hour option because it feels more professional.
Technical people appreciate predictable boundaries, small changes and good documentation perhaps even more because they can see exactly how much future maintenance complexity is being introduced.
A small integration is easier to review.
Easier to test.
Easier to remove.
Easier to explain to the next person who inherits the project.
The person who maintains the site next year matters too.
Software installations outlive the person who performed them.
Somebody new opens the project twelve months later and sees a third-party integration.
Ideally they can understand it quickly.
There is a script.
It belongs to Reesponder.
It contains a site identifier and installation token.
The rest of the configuration lives in the Reesponder workspace.
That is a much nicer inheritance than discovering a package, several custom hooks, a webhook endpoint, two environment variables and a comment saying “DO NOT REMOVE”.
Simple architecture ages better.
Websites change frameworks.
They move servers.
Agencies are replaced.
CMS platforms are upgraded.
Frontends are rebuilt from scratch.
The more deeply a third-party tool is woven into application internals, the more likely it becomes part of every migration discussion.
A small frontend boundary is easier to carry forward.
The new website still needs support.
Add the same integration point to the new layout and continue.
That is good for the customer and, selfishly, good for the software company too. Products that are easy to move are less likely to be accidentally abandoned during a rebuild.
There is something satisfying about software that respects the customer’s existing system.
A lot of modern software wants to become the centre of everything.
Move your data here.
Rebuild the workflow here.
Invite everybody here.
Replace the thing you already use.
Sometimes that makes sense.
Sometimes I just want a tool to do its job.
If I buy support software, I want better support on the website I already have. I do not necessarily want a website architecture project as part of the deal.
There is a kind of confidence in a product that can arrive, perform its role and leave the rest of the system alone.
That is why one script tag can represent a surprisingly large product philosophy.
On the screen it looks trivial.
A line of code.
Maybe two.
Behind it are decisions about where complexity belongs, how much a customer needs to understand, how reversible installation should be, how updates are delivered, how failures are isolated and how much disruption the product is willing to demand before proving its value.
The small code surface is the visible consequence of those decisions.
That is why I would never describe it as merely an implementation detail.
It changes who can install the product.
It changes how quickly they can try it.
It changes how safe the experiment feels.
It changes how much internal coordination adoption requires.
It changes how easy the product is to remove later.
Those are product questions.
The nicest setup ends before the customer starts thinking about setup.
I think that is the standard I like most.
The customer creates the account. The system does whatever research it can do automatically. The installation code is generated with the correct values already present. The customer adds it to the website. The dashboard confirms the connection. The support agent appears.
The customer can now spend their attention on whether the answers are good, whether the knowledge is right and whether the support experience suits the business.
Those are interesting questions.
Figuring out which placeholder should contain which identifier is not.
There will always be websites where installation becomes more complicated. There will always be unusual environments, policies and technical constraints. A product cannot magically erase the web’s variety.
It can decide how much complexity it creates by default.
The best implementation work is often the work the customer never realises somebody had to do.
I would rather spend the complexity budget somewhere customers can feel it.
Support software has plenty of genuinely hard problems.
Understanding an ambiguous customer question is hard.
Keeping business knowledge accurate is hard.
Using account context safely is hard.
Knowing when a human should take over is hard.
Giving useful answers without inventing missing information is hard.
These are good places for complexity because better solutions produce something the customer can actually experience.
I do not want to spend unnecessary complexity on making every customer understand our internal architecture before any of those useful parts can begin.
If one small script can create the bridge between the existing website and the support system behind it, I am very happy for that bridge to look boring.
Boring means the customer got through it quickly.
And once installation is over, the product finally gets the chance to prove whether it deserves to stay.