Salesforce Admin Zero to Hero - Module 11: Formula Fields | SF Interview Pro

Salesforce Admin Zero to Hero - Module 11: Formula Fields | SF Interview Pro
🧮 Salesforce Admin Zero to Hero — Module 11 of 25

Formula Fields

Phase 3 begins. Formula Fields let you calculate, transform, and derive values from other fields — no code, updated live, and visible the instant a record loads.

Module 11 of 25 · Phase 3: Formulas & Validation (Begins!)
🧮 Welcome to Phase 3: Formulas & Validation. Modules 11 and 12 are focused but essential — Formula Fields for calculated values, and Validation Rules for enforcing data quality. Both directly build on the data model completed in Phase 2.
🎯 What You Will Master in This Module
A Formula Field is a read-only field whose value is calculated automatically from other fields, using a formula language that is genuinely powerful — text manipulation, date math, conditional logic, and even reaching across relationships to pull in related record data, all without writing a single line of Apex.
Formula syntax fundamentals — operators, functions, and the formula editor
Text, Number, and Date formula functions — the workhorses of everyday formulas
Logical functions — IF, CASE, AND, OR, and building genuinely conditional formulas
Cross-object formulas — pulling fields from a related parent record
Blank field handling — ISBLANK, ISNULL, and why formulas break silently without them
Formula Field limitations — what they genuinely cannot do, and why
Writing a real, multi-function formula for an actual business requirement
Concept 1 of 7
Formula Syntax Fundamentals
A Formula Field is created like any other field (Module 8), but instead of storing entered data, its value is CALCULATED every time it is displayed, using a formula you write in the Formula Editor. Formulas combine field references, operators, and functions, and Salesforce validates syntax in real time as you type, catching many errors before you even save.
⚡ Why This Matters
Formula Fields are always up to date and never need manual recalculation — unlike a regular field a user might forget to update, a Formula Field reflects its underlying data instantly and automatically, every single time. This reliability is exactly why they are used so heavily throughout real Salesforce implementations.
ElementExample
Field ReferenceAmount, CloseDate — referencing another field's live value
Operator+, -, *, /, & (text concatenation)
FunctionUPPER(), TODAY(), IF() — built-in formula operations
Return TypeText, Number, Currency, Date, Checkbox — set when creating the field, must match what the formula actually produces
🛠️ Hands-On: Create Your First Formula Field
1Setup → Object Manager → Opportunity (from Module 7) → Fields & Relationships → New → select Formula
2Label: Days Until Close. Formula Return Type: Number, 0 decimal places.
3In the Formula Editor, type: CloseDate - TODAY()
4Click Check Syntax — confirm it validates with no errors, then Save.
5Open your Concept 2 Opportunity from Module 7 → confirm Days Until Close now shows a live, automatically calculated number of days remaining until the Close Date.
⚠️ Common Gotcha — Formula Fields Are Always Read-Only
A Formula Field can never be directly edited by a user — it has no Edit affordance on the page because its value is entirely derived. If a "formula-like" field needs to sometimes be manually overridden, it cannot be a true Formula Field; that requires a different pattern, typically a regular field populated by Flow or Apex with conditional logic, which is a materially different design decision than a pure Formula Field.
Concept 2 of 7
Text, Number & Date Functions — The Everyday Workhorses
A small set of functions covers the large majority of real formula work: text manipulation for building dynamic labels or codes, number functions for rounding and math, and date functions for calculating durations, deadlines, and age. Fluency with these is what makes formula-writing fast rather than a constant reference-lookup exercise.
⚡ Why This Matters
These functions appear constantly in real business requirements: "show the customer's full name and account in one field," "round this price to 2 decimals," "flag anything older than 30 days." Knowing this toolkit well means most everyday formula requests can be solved in minutes rather than requiring research each time.
FunctionWhat It DoesExample
UPPER() / LOWER()Converts text to all uppercase or lowercaseUPPER(Name) → "AMI POLYMER"
TRIM()Removes leading/trailing whitespaceCleans up inconsistent data entry
LEFT() / RIGHT() / MID()Extracts a substring from a text valueLEFT(Phone, 3) → first 3 digits
ROUND() / MROUND()Rounds a number to a specified precisionROUND(Amount, 2) → 2 decimal places
TODAY() / NOW()Returns the current Date, or current Date-Time respectivelyUsed constantly in age/duration calculations
YEAR() / MONTH() / DAY()Extracts a specific component from a Date fieldYEAR(CloseDate) → 2026
🛠️ Hands-On: Build a Dynamic Text Formula
1Setup → Object Manager → Account → Fields & Relationships → New → Formula
2Label: Account Summary Label. Return Type: Text.
3Formula: UPPER(Name) & " - " & Industry
4Save, and confirm on your Ami Polymer Account it now shows something like AMI POLYMER PVT. LTD. - MANUFACTURING — dynamically built from two other live fields.
5Now build a second Formula field, Days Since Created, Return Type Number, Formula: TODAY() - DATEVALUE(CreatedDate) — note the DATEVALUE() conversion, needed because CreatedDate is a Date-Time field, not a plain Date.
💡 The Formula Editor Has a Built-In Function Reference
The Formula Editor's "Insert Function" panel lists every available function with its exact syntax and a short description — genuinely useful for discovering functions you have not memorized yet, rather than needing to search externally every time. Getting comfortable navigating this panel directly speeds up real formula-writing significantly.
Concept 3 of 7
Logical Functions — IF, CASE, AND, OR
Logical functions are what turn a formula from a simple calculation into genuine conditional business logic. IF() is the fundamental building block; CASE() handles multiple conditions more cleanly than nested IFs; AND() and OR() combine multiple conditions together. Mastering these is what lets a Formula Field express real "if this, then that" business rules.
⚡ Why This Matters
Nearly every real business formula requirement involves some form of conditional logic — "if the deal is over ₹10 lakh, flag it as Major," "if the inspection failed, show a warning color." Without logical functions, Formula Fields could only do straightforward math and text combination, missing the majority of genuinely useful business applications.
IF() — the fundamental building block: IF(condition, value_if_true, value_if_false) IF(Amount > 1000000, "Major Deal", "Standard Deal") CASE() — cleaner than nested IFs for multiple conditions: CASE(StageName, "Prospecting", "Early Stage", "Negotiation", "Late Stage", "Closed Won", "Won", "Other") ← default/fallback value AND() / OR() — combining multiple conditions: IF(AND(Amount > 500000, StageName = "Negotiation"), "High-Value, Late Stage", "Standard")
🛠️ Hands-On: Build a Conditional Formula on Opportunity
1Setup → Object Manager → Opportunity → Fields & Relationships → New → Formula
2Label: Deal Size Category. Return Type: Text.
3Formula: IF(Amount > 1000000, "Major Deal", IF(Amount > 100000, "Mid-Size Deal", "Small Deal"))
4Save, and test it across a few Opportunities with different Amount values, confirming each correctly falls into the right category.
5Now rebuild the same logic using CASE() instead of nested IF() — notice how much more readable it becomes once there are 3 or more branches, which is exactly why CASE() is generally preferred over deeply nested IF() statements.
⚠️ Common Gotcha — Deeply Nested IF() Statements Become Unreadable
While IF() can technically be nested many levels deep, doing so quickly produces a formula that is genuinely difficult to read, debug, or hand off to another Admin. Once you have more than 2-3 branches of logic, CASE() (for a single field with multiple discrete values) or restructuring the requirement entirely is almost always the better, more maintainable choice.
Concept 4 of 7
Cross-Object Formulas — Pulling in Related Record Data
A Cross-Object Formula reaches across a Lookup or Master-Detail relationship (Module 8) to pull in a field's value from a RELATED record — most commonly from a parent. This lets a Formula Field on a child object display or calculate using data that actually lives on the parent, using dot notation to traverse the relationship.
⚡ Why This Matters
Without cross-object formulas, showing parent data on a child record's list view or report would require manually duplicating that data onto every child record — a maintenance nightmare that immediately goes stale the moment the parent value changes. Cross-object formulas stay live and accurate automatically.
Cross-object formula syntax uses dot notation to traverse the relationship from child to parent: On Inspection_Line_Item__c (child), reaching up to its Quality_Inspection__c parent: Quality_Inspection__r.Inspection_Date__c The __r suffix (instead of __c) signals "traverse the relationship", then dot into the specific field on that parent record. Standard relationships use their own names, e.g. Account.Industry from a Contact record.
🛠️ Hands-On: Build a Cross-Object Formula
1Setup → Object Manager → Inspection Line Item (from Module 8) → Fields & Relationships → New → Formula
2Label: Parent Inspection Date. Return Type: Date.
3In the Formula Editor, use Insert Field → navigate into the Master-Detail relationship field → select Inspection Date from the related Quality Inspection object. Notice the formula auto-generates using the correct __r dot-notation syntax.
4Save, and confirm every Inspection Line Item now displays its parent's Inspection Date directly, without that date being manually re-entered on each child record.
💡 Cross-Object Formulas Can Traverse Multiple Levels
Cross-object formulas are not limited to just one level up — they can chain further, such as reaching from a Contact up through its Account to a field on that Account's own parent Account (in a hierarchy), up to a maximum of 10 relationships deep. This is powerful but should be used thoughtfully, since very long chains can become harder to maintain and understand at a glance.
Concept 5 of 7
Handling Blank Fields — ISBLANK, ISNULL, and Silent Breakage
A formula referencing a field that happens to be BLANK on some records can produce unexpected results — sometimes an error, sometimes a silently wrong value — unless the formula explicitly accounts for that possibility. ISBLANK() and ISNULL() are the functions specifically for checking this before using a potentially-empty field in a calculation.
⚡ Why This Matters
A formula that works perfectly in testing (where every test record happens to have all fields filled in) can produce confusing or wrong results in production the moment it hits a real record with a blank field — a very common, very avoidable class of formula bug that erodes user trust in the field's accuracy.
FunctionWhat It ChecksTypical Use
ISBLANK(field)True if a Text field is empty, or a Number/Date field has no valueGuard a calculation before it runs on a genuinely empty field
ISNULL(field)True specifically for Number, Date, or Currency fields with no value (does not reliably detect blank Text)Generally, ISBLANK() is the safer, more universal default choice
🛠️ Hands-On: Guard a Formula Against Blank Values
1Go back to your Days Until Close formula from Concept 1: CloseDate - TODAY()
2Create a test Opportunity with NO Close Date set (if the field allows blank) → observe what the formula currently displays — likely a confusing negative number or blank result, since Close Date is technically required on Opportunity in most orgs, but this same principle applies broadly to optional fields.
3Edit the formula to: IF(ISBLANK(CloseDate), 0, CloseDate - TODAY())
4Save, and confirm the field now shows a clean 0 instead of a confusing or broken value whenever Close Date happens to be blank — the formula now degrades gracefully rather than silently producing something misleading.
⚠️ Critical Gotcha — Number Formulas With Blank Inputs Can Return Blank, Not Zero
A Number/Currency/Percent Formula Field that references a blank Number field in a calculation may return a BLANK result rather than treating the missing value as zero — which can look identical to "no data" in a report even when the calculation genuinely ran. This is exactly why wrapping number-based cross-field math in ISBLANK() checks, defaulting to 0 where appropriate, is considered a formula best practice rather than an edge-case afterthought.
Concept 6 of 7
Formula Field Limitations — What They Genuinely Cannot Do
Formula Fields are powerful, but they are not unlimited. Understanding their real boundaries — no DML, no direct write access, formula compile size limits, and no access to certain relationship types — prevents an Admin from designing a solution around a Formula Field that will fundamentally not work.
⚡ Why This Matters
Recognizing early that a requirement genuinely exceeds what a Formula Field can do saves significant wasted design time. Knowing to instead reach for a Flow, a Roll-Up Summary Field, or Apex, and recognizing WHICH of these is appropriate, is a core piece of practical Admin judgment.
LimitationWhy It Exists / What To Use Instead
Cannot write data (no DML)Formula Fields only READ and calculate — they cannot insert, update, or delete any record. Use Flow or Apex for that.
Cannot reference itselfA formula cannot circularly reference its own field — this would be a logical impossibility, not just a platform restriction
Compile size limitExtremely long, deeply nested formulas can exceed a compiled size limit and fail to save — a sign the logic should be split or simplified
Cannot aggregate multiple child recordsThat is specifically what Roll-Up Summary Fields (Module 8) are for — Formula Fields work with fields already available on the current record or its direct relationships
Cannot store a manually-overridable valueFormula Fields are always fully derived and read-only — a field needing occasional manual override needs a different design (Flow-populated regular field)
🛠️ Hands-On: Recognize a Genuine Formula Field Limitation
1Consider this requirement: "When an Opportunity is marked Closed Won, automatically update the related Account's Industry field to 'Existing Customer'."
2Recognize immediately: this requires WRITING to a different record (the Account) — something Formula Fields structurally cannot do, since they only read and calculate, never perform DML.
3Correctly identify the right tool instead: this is a Record-Triggered Flow requirement (Module 15), which specifically CAN update related records as an automated action.
4This kind of quick "can a Formula Field even do this?" triage is exactly the judgment call a real Admin makes constantly when scoping a new requirement.
💡 Formula Fields Are "Free" at Runtime — No Storage, No Governor Limit Cost
Because Formula Fields calculate their value on the fly rather than storing it, they do not consume data storage the way a regular field's value does, and they are not subject to the same governor limits that Apex or Flow operations face. This makes them a genuinely lightweight, efficient choice whenever a requirement fits within what they can do — always worth considering before reaching for more complex automation.
Concept 7 of 7
Writing a Real, Multi-Function Formula for a Business Requirement
This final concept combines everything from this module into one realistic, multi-function formula — the kind of requirement that shows up regularly in real Admin work and is a common practical test in Admin interviews and certification exams alike.
⚡ Why This Matters
Real business requirements rarely need just ONE function in isolation — they typically combine logical, text, date, and sometimes cross-object functions together into a single formula. Being able to decompose a plain-language request into the right combination of functions is the practical skill this entire module has been building toward.
Requirement: "On each Quality Inspection, show a single-line status label: if Result is blank, show 'Pending'. If Result is Fail and Defect Count is greater than 5, show 'FAIL - Critical (X defects)' in uppercase. Otherwise show the Result value followed by the Inspection Date." Formula, built up piece by piece: IF(ISBLANK(Result__c), "Pending", IF(AND(Result__c = "Fail", Defect_Count__c > 5), UPPER("FAIL - Critical (" & TEXT(Defect_Count__c) & " defects)"), Result__c & " - " & TEXT(Inspection_Date__c) ) ) Notice: ISBLANK (Concept 5), nested IF with AND (Concepts 3), UPPER and text concatenation (Concept 2), and TEXT() to convert a Number and a Date into displayable text — all combined.
🛠️ Hands-On: Build This Exact Formula in Your Org
1Setup → Object Manager → Quality Inspection → Fields & Relationships → New → Formula
2Label: Status Label. Return Type: Text.
3Enter the complete formula from the diagram above, adjusting field API names to match exactly what you built in Module 8.
4Click Check Syntax to catch any typos before saving.
5Test against three different records: one with Result blank, one with Result = Fail and Defect Count > 5, and one with a normal Pass result — confirm all three branches of the logic produce exactly the expected output.
⚠️ Module Wrap-Up — What Comes Next
You can now write genuinely useful, multi-function Formula Fields, and just as importantly, recognize the boundary where a Formula Field is no longer the right tool. Module 12 covers Validation Rules — a very closely related formula-based mechanism, but one that BLOCKS a save rather than calculating a display value, enforcing the data quality that everything built so far in this course ultimately depends on.
💬 Module 11 Interview Questions (6)
Q1What is the key difference between how a Formula Field's value is produced compared to a regular field's value, and why does this matter for data staleness?
A regular field stores a specific value in the database, which was entered by a user or set by automation at some point in the past, and remains exactly as it was set until something explicitly changes it again. A Formula Field, by contrast, stores no value of its own at all — its displayed value is CALCULATED live, every single time the record is loaded, based on the current values of whatever fields the formula references. This distinction directly matters for data staleness: a regular field can become stale or inconsistent if the underlying situation changes but nobody remembers to manually update it, while a Formula Field can never become stale in this way, because it is recalculated fresh on every single view, automatically reflecting whatever the current underlying data actually is at that moment.
"Regular fields store a fixed value that can go stale if not manually updated; Formula Fields store nothing and instead recalculate live on every view from their referenced fields' current values, meaning they can never become stale in the way a regular field can."
Q2A business wants a field that shows the related parent Account's Industry directly on every child Contact record. What formula approach solves this, and what is the risk of NOT using this approach?
This is solved with a Cross-Object Formula on the Contact object, using dot notation to traverse the standard relationship up to the parent Account and reference its Industry field directly, such as Account.Industry. This approach keeps the displayed value perpetually accurate, since it is recalculated live from the actual current Account record every time the Contact is viewed. The risk of NOT using this approach — for example, instead manually copying the Industry value into a separate regular field on each Contact at creation time — is that the copied value would immediately go stale the moment the Account's actual Industry changes, since nothing would automatically propagate that update to every related Contact's manually-copied field, silently creating inconsistent, misleading data across potentially many child records over time.
"Use a Cross-Object Formula with dot notation (Account.Industry) to pull the value live from the parent — manually copying the value into a separate field instead risks silent staleness the moment the Account's actual Industry changes, since nothing would propagate that update to the copied field."
Q3Why can a formula referencing a blank field sometimes produce a confusing or misleading result, and what is the standard practice to prevent this?
A formula that performs a calculation using a field which happens to be blank on some records can produce results that look valid but are actually misleading — for example, a date subtraction formula might return an unexpectedly large or negative number when one side of the subtraction is genuinely empty rather than containing a real date, and a number-based calculation might return a completely blank result rather than treating the missing value as zero, which can be indistinguishable from "no data" in a report even though the formula actually executed. The standard practice to prevent this is wrapping the potentially-blank field reference in an ISBLANK() check within an IF() statement, explicitly defining what the formula should return when that field is empty — commonly defaulting to zero for numeric calculations or a clear fallback label for text — rather than allowing the raw, unguarded calculation to run and potentially produce a confusing or silently incorrect result.
"A blank field in a calculation can produce a misleading result — a date subtraction might show a nonsensical number, or a number formula might return blank rather than zero — the standard fix is wrapping the reference in ISBLANK() within an IF() to explicitly define a clean fallback value instead of letting the raw calculation run unguarded."
Q4A stakeholder asks you to build a Formula Field that, when an Opportunity closes, automatically updates a different field on the related Account record. Can this be built as a Formula Field? If not, what should you build instead?
No, this cannot be built as a Formula Field, because Formula Fields are fundamentally read-only calculation mechanisms — they can only READ and derive a displayed value from other fields, and they have no ability to perform DML operations such as inserting, updating, or deleting any record, including the record they are defined on. Writing a new value onto a DIFFERENT record entirely, in this case the related Account, is structurally outside what any Formula Field can ever do, regardless of how the formula logic itself might be written. The correct tool for this requirement is a Record-Triggered Flow, covered in Module 15, which specifically supports triggering on an Opportunity's Stage change to Closed Won and then performing an Update Records action against the related Account, genuinely writing new data to a separate record as an automated action.
"No — Formula Fields cannot perform DML and cannot write to any record, including a different related record; this requirement needs a Record-Triggered Flow, which can genuinely detect the Opportunity closing and then update the related Account as an automated action, something no Formula Field can ever do."
Q5Why might an Admin prefer CASE() over a deeply nested series of IF() statements when a field can have many possible discrete values?
CASE() is specifically designed for evaluating one expression against multiple discrete possible values and returning a corresponding result for each, which is precisely the shape of requirement that nested IF() statements handle much less cleanly as the number of branches grows — each additional IF() nested inside the previous one adds another layer of parentheses and indentation, quickly producing a formula that is genuinely difficult to read, verify, and safely modify later, especially for anyone other than the original author. CASE() presents the same multi-branch logic as a flat, clearly readable list of value-to-result pairs with a single default fallback, making it immediately clear what each specific input value maps to without needing to mentally trace through several layers of nested conditional logic. For a field with three or more genuinely discrete values to check against, such as mapping Opportunity Stage names to broader category labels, CASE() is considered the more maintainable, professional choice over equivalent deeply nested IF() logic.
"CASE() presents multi-branch logic as a flat, readable list of value-to-result pairs, while deeply nested IF() statements become progressively harder to read and safely modify with each additional branch — for three or more discrete values, CASE() is the more maintainable, professional choice."
Q6Design a formula (in plain language, describing the logic) for a Quality Inspection Status Label that shows "Pending" if Result is blank, a critical uppercase warning if Result is Fail with more than 5 defects, and otherwise shows the Result plus the Inspection Date. What functions does this require and why?
This formula requires several functions working together in a specific nested structure. First, an outer IF() combined with ISBLANK() checks whether the Result field is empty, immediately returning "Pending" if so, which must be evaluated FIRST since a blank Result would cause the subsequent logic to behave unpredictably if not caught early. Second, nested inside the ELSE branch of that first check, a second IF() combined with AND() evaluates two conditions simultaneously — Result equals "Fail" AND Defect Count is greater than 5 — since both conditions must be true together to trigger the critical warning path, which itself uses UPPER() to force the warning text to uppercase and text concatenation with the ampersand operator to build a dynamic message including the actual defect count converted to text via TEXT(), since a Number field cannot be directly concatenated into a Text formula without this conversion. Finally, the remaining fallback case concatenates the plain Result value with the Inspection Date, again using TEXT() to convert the Date field into a displayable text string, since Date fields also require explicit conversion before concatenation with other text.
"Requires ISBLANK() for the first Pending check (evaluated first to avoid unpredictable downstream behavior), nested IF() with AND() for the two-condition critical warning, UPPER() and text concatenation for that warning's formatting, and TEXT() to convert both the Number and Date fields into concatenable text in the final fallback branch."
📝 Module 11 Recap — Formula Fields Mastered
✅ Formula Fields calculate live on every view — they never go stale the way a manually-set regular field can
✅ Master the everyday toolkit: UPPER/LOWER/TRIM, ROUND, TODAY/NOW, YEAR/MONTH/DAY for the majority of real formula needs
✅ IF() is the fundamental conditional building block; CASE() is more readable once you have 3+ discrete branches; AND()/OR() combine conditions
✅ Cross-object formulas use dot notation (or __r for custom relationships) to pull live parent data onto a child, avoiding stale manual copies
✅ Always guard against blank fields with ISBLANK() — unguarded formulas can silently produce misleading results
✅ Formula Fields cannot write data (no DML), cannot aggregate multiple children (that's Roll-Up Summary), and cannot be manually overridden
✅ Real formulas combine multiple functions together — decomposing a plain-language requirement into the right combination is the core practical skill
🎯 Module 11 Practical Checklist — Complete These in Your Org
1. Build a Date-based Formula Field calculating days until/since a target date, guarded with ISBLANK().
2. Build a Text formula combining UPPER(), TRIM(), and concatenation.
3. Build a conditional formula using nested IF(), then rebuild the same logic with CASE() for comparison.
4. Build a Cross-Object Formula pulling a parent field onto a child record.
5. Build the full multi-function Status Label formula from Concept 7, testing all three logic branches.

Module 12 covers Validation Rules — a closely related formula-based mechanism that blocks a save rather than calculating a value, enforcing the data quality this entire course depends on.
Test yourself on this topic
2,244 practice MCQs across 27 quizzes — 5 quizzes free, no signup
Open Practice Zone →
RK
Written by
Rajnish Kumar
Salesforce Developer · Apex, LWC, Data Cloud & AI · Building SF Interview Pro
Connect on LinkedIn ↗
Testimonials

Real feedback from real candidates

People using SF Interview Pro to prepare for Salesforce interviews
★★★★★
"Crashed multiple interviews thanks to this. Better than the paid courses I tried."
SP
Salesforce Professional
Developer
★★★★★
"No signup, no paywall. The Apex Trigger series alone got me through two rounds."
AK
Aditya K.
Salesforce Admin
★★★★★
"LWC Zero to Hero is more practical than any paid course I found."
RM
Riya M.
LWC Developer
★★★★★
"Practice Zone MCQs matched my actual interview difficulty almost exactly."
PS
Priya S.
Business Analyst
★★★★★
"Started knowing nothing. Three weeks later I had two offers."
MK
Mohit K.
Salesforce Admin
★★★★★
"Company-wise Accenture prep was scarily accurate."
SN
Sneha N.
Consultant
★★★★★
"Explains identity resolution better than official Trailhead modules."
VR
Vikram R.
Data Cloud Consultant
★★★★★
"Free and better than the paid prep I bought earlier."
TJ
Tanvi J.
Fresher
★★★★★
"Reports and Dashboards guide made a tricky topic finally click."
KP
Karan P.
Salesforce Admin
★★★★★
"SOQL Part 2 questions came up almost word for word in my interview."
AN
Ananya N.
Developer
★★★★★
"Field Service Lightning guide is the only good free resource I found."
RD
Rohan D.
FSL Consultant