As members of the Salesforce ecosystem, we are all aware Trust is the #1 core value of Salesforce. Customers trust data stored in Salesforce is secure. This expectation of trust naturally extends to any partner accessing a company’s Salesforce instance and connected systems.
Oktana is proud to have maintained SOC 2 Type II certification since 2021, which allows us to provide the assurance we meet the highest data security standards. Since 87% of our business over the past three years is within the High Tech industry, including Healthtech and Fintech, this certification also enables our customers to maintain their compliance certification as we meet vendor security requirements.
What is SOC 2 certification?
SOC 2 is a voluntary compliance standard for service organizations, developed by the American Institute of CPAs (AICPA), which specifies how organizations should manage customer data. The standard is based on what they call “Trust Services Criteria”, covering these core concepts:
Security – Your data is managed and stored securely
Availability – Your data is always available
Processing Integrity – Your data remains intact at all times
Confidentiality – Your data is treated confidentially
Privacy – Your data is not exposed when not necessary
To maintain our SOC 2 certification, we are audited against a set of security controls supporting these Trust Services Criteria.
Why should you care?
To Oktana, this is the bare minimum a Salesforce partner can provide to you given the sensitivity and importance of the data you store in Salesforce. A SOC 2 certified Salesforce partner confirms they will respect your data and help you provide the same level of trust Salesforce provides to you, to your customers.
Here are some of the benefits of working with a SOC 2 certified Salesforce partner:
Peace of mind and confidence in data security
By choosing Oktana as your Salesforce partner, you can rest assured we are taking active steps to protect your data. SOC 2 certification is an additional guarantee that we are committed to our customer’s data security and that we have implemented appropriate security controls to protect it, including training our team members.
Regulatory compliance
To meet your own regulatory requirements, you may need to require vendors to be SOC 2 certified. By working with Oktana on your Salesforce implementation, you can be sure we meet the necessary bar to enable you to comply with your regulatory requirements.
Risk reduction
By working with a SOC 2 certified Salesforce partner, you can be sure we have taken proactive measures to protect your data and reduce the risk of data security breaches and associated costs. In line with this, we work with you to ensure your proprietary data does not enter Oktana’s systems. We will use your project management software and repositories and, if you prefer, your VPN and hardware.
Competitive advantage
By choosing to work with a SOC 2 certified provider, you can differentiate your company from the competition and improve your reputation and the trust of their own customers.
Our compliance program is robust which has enabled us to work with regulated industries including public sector at both the state and federal levels. In addition to being SOC 2 certified, we can provide onshore resources to meet other compliance requirements. To learn more, check out our Trust page.
Salesforce Mobile SDK is a development kit powered for developers to natively produce mobile apps for iOS using Swift, and for Android, using Java and Kotlin. These applications can also use hybrid technologies such as React Native, which uses TypeScript and JavaScript.
After the development stage ends, the app can be published independently in the App Store or Google Play Store. Mobile SDK provides its users a base for creating custom mobile applications. This base allows developers to pre-configure the requirements needed to connect an app to the Salesforce org, and then securely access the information within that org.
Salesforce Mobile SDK Tools
Update data from the org in real-time
Offline data synchronization through mobile sync and smart store
Consumption of rest API through the mobile app
SSO authentication for the mobile app for secure enablement
Setting up the Development Environment
To get started, you’ll need to have Node.js (version 16.7) installed, this version in particular works well with the tools provided by Salesforce. Additionally, you will need GIT.
For iOS, you will be required Xcode, Cocoapods (in their latest version), and forceios.
For Android, it is required Java (JDK 11), Android Studio, or IntelliJfor the developer ID and forcedroid.
If you create this app using React Native and Typescript to generate a cross-platform app that can be used for iOS and Android, you have to meet the two previous requirements. Be sure to install the typescript compiler. Salesforce uses Yarn as Node.js’s dependency manager since it is the tool that Salesforce uses by default, and to avoid errors, you will need to use forcereact dependency with Yarn.
Once our environment is configured, we can go to the terminal and execute the tools.
Android
1. Run the command “forcedroid create”
2. A form on your screen will help you execute our base project.
The first line asks us about the language we will choose for Android development (Kotlin or Java).
In the following lines, the questionnaire focuses on the configuration of the mobile application project. Such as the name of the application, the package, and the app’s organization. Once this command is executed, we will look at the status of the process of creating our project.
iOS
1. Run the command “forceios create”
2. A form on your screen will help you execute our base project
For this project, we will opt for native development with Swift as the primary language in the iOS project.
In the following lines, the questionnaire focuses on the configuration of the mobile application project. Such as the name of the application, the package, and the app’s organization. Once this command is executed, we will look at the status of the process of creating our project.
ReactNative
1. Run the command “forcereact create”
2. For the platform on which the React Native application will be launched, we can choose iOS or Android. If it is a cross-platform app, we will select iOS and Android.
3. For the programming language: typescript or javascript. It is essential and depends on the programmer.
4. In the following lines, the questionnaire focuses on the configuration of the mobile application project. Such as the name of the application, the package, and the app’s organization. Once this command is executed, we will look at the status of the process of creating our project.
Connecting the Org to Your App
The first step would be to go to the “Connected Apps” section (a third-party application allowing our mobile application to communicate with our Salesforce org). Here, we will need to create a new Salesforce org and complete the following form:
1. Basic Information: Complete the Contact App Name, the API Name, Contact Email.
2. API:
Enable OAUTH Settings
Call Back URL: The first part is a prefix; Salesforce tells us that nothing is exactly established, since here we can choose to write any prefix. For example, “trailhead app” what matters is that this prefix matches the name that we have configured in our project. The suffix has to stay the same.
3. Select Scopes: these are the permissions that we will give to our third-party application, which will have to access our org; here we need 3. These permissions will allow our mobile application to access the data or records found in our org, as well as user information, and above all, have the data of the org offline.
Once the Connected App has been created, you will need the configuration files where we will insert the key given by Salesforce for our Connected App.
Android
In the case of an Android project, we will have to edit the “bootconfig.xml” file and modify the ConsumerKey and Connected URL, both of which will be replaced by those created in the Connect App.
iOS
In the case of the iOS project, we will have to edit the “bootconfig.plist” file and replace the same Connected URL and Consumer Key fields.
Uriel, one of our developers in Bolivia, has recently given a workshop about this topic. We strongly suggest you watch the demo video if you’re interested in learning more and implementing these concepts. You will find a comprehensive demo of how to connect the app and a use case.
The term “Staff Augmentation” was first coined by Gartner, Inc. in 1988. When I started in the IT staff augmentation services industry a few years ago while I was at FullStack Labs, I realized a lot has changed since then. Recently having joined Oktana, this is compounded by the need for talent with skills across both fullstack and Salesforce technologies.
Despite many options available for people to learn to code, including online training and internships, demand has outpaced supply for several decades. There are endless commentaries on the subject, but a 2022 Korn Ferry study cited, “In tech alone, the US could lose out on $162 billion worth of revenues annually unless it finds more high-tech workers.” That’s alarming.
Not only are organizations missing out on revenue but also opportunities to innovate. According to Gartner, “IT executives see the talent shortage as the most significant adoption barrier to 64% of emerging technologies, compared with just 4% in 2020, according to a new survey from Gartner, Inc. A lack of talent availability was cited far more often than other barriers this year, such as implementation cost (29%) or security risk (7%).”
Gartner also shared that the pace of employee turnover is forecast to be 50–75% higher than companies have experienced previously, and the issue is compounded by it taking 18% longer to fill roles today than pre-pandemic.
Obviously, the need for IT staff augmentation has only increased, but traditional solutions may not be good enough for modern challenges.
Traditional Solutions
Due to the everpresent demand that has outstripped supply, organizations across all industries have attempted to find and provide solutions to fill this gap in supply and demand offshore, nearshore and onshore. In the IT sector, these solutions typically cover:
Modern Challenges
These traditional models do provide a modicum of success but, for a number of reasons, there are typically additional challenges – both tactical and performance-related – with these models and many of the vendors that employ these models.
Time Zones
There are bountiful offshore resources throughout Asia or Eastern Europe which, if you’re based in the U.S., unfortunately do not provide natural overlap with your team’s working hours. This is a massive issue for productivity as it creates a collaboration barrier that does not support real-time context, problem solving or efficient planning. Even when resources commit to U.S. working hours, this inevitably leads to a day-to-day imbalance in energy and motivation across your team.
Language & Culture
Both language and culture have the potential to create communication issues. Many offshore resources either don’t speak English or don’t speak English well enough to communicate efficiently with U.S. clients which results in time loss as gaps in communication around the basics are the concentration rather than the work itself. Cultural norms also differ across the globe and can impact a team’s sense of urgency and willingness to share the true status of your project.
Trust
With vendors across the globe, it’s increasingly difficult to find a vendor with the same level of compliance and governance standards as your organization.
Length of Service Contracts
Many consultancies require a minimum contract term of 12-18 months or longer. It is hard for you to anticipate your future team size and skill needs up to 18 months in advance, so often clients will over-deploy contract resources. This usually results in excess capital expense and wasted time finding work to “keep the team busy” towards the end of the engagement.
Low Initial Visibility
Many vendors require clients to evaluate each candidate based on lengthy CVs and sometimes conduct their own technical interviews. This requires extra time to figure out how to evaluate contracted resources that have already been evaluated by the vendor which results in wasted productivity by your engineering leadership team. The main issue is a lack of consumable content to confirm the team member has the skills to deliver the project and a personality that will mesh well with the culture of your team. This results in a very slow onboarding process, akin to internal hiring when it should, in fact, be simple and much faster.
Attrition
High turnover is a big problem when resources feel “left on an island”, increasingly isolated from their consultancy over time, which impacts performance. While not part of their client’s org, and feeling separated from their consultancy, they often leave for a new organization as they are typically unable, contractually, to be hired directly by you.
Lack of Career Development
A cause of attrition, frequently vendors lack the infrastructure or incentive to invest in the career development of resources already placed on projects which puts the burden of training and career coaching on you, or leaves the individual team member to guide their path, which impacts overall performance.
What is Tactical Performance Augmentation?
When we realized the common problems above, and saw the challenges the market faces, we thought “What if we could leverage our current way of working to solve all of those problems with a new service product that is leaps and bounds ahead of anything offered by another firm?” Thus, Tactical Performance Augmentation (TPA) was born.
This new model addresses many of the market frustrations currently faced in IT staff augmentation such as slow provisioning of resources, lack of transparency in billing and inflexible length-of-service contracts.
Tactical
Tactical Performance Augmentation allows you to build very specific and focused teams with exactly the right number of people with the right skills. This is the “Tactical” part of TPA and provides maximum flexibility to deliver exactly what you need, when you need it.
Using the TPA model, you structure your team with the combination of developers, quality engineers, scrum masters, UI/UX designers you need at a given time. As your needs change, you can reduce, adjust or increase those resources.
The best piece of the tactical component is that this is done without the pressure or limitations of a length-of-service contract but instead on a month-to-month basis. You only pay for the team for the exact amount of time you need the team.
Performance
When we evaluated the market, one of the biggest concerns across IT organizations was the lack of a performance-based offerings by vendors. There was no way for you to measure the ROI of a vendor’s resources on your project, or their efficacy of one vendor against another vendor in your portfolio.
We realized the ability to provide a true Time & Materials cost model is a necessary component in providing performance-based IT staff augmentation. It’s on the vendor to keep performing to earn your business.
That’s the “Performance” component of Tactical Performance Augmentation. Either a vendor delivers on your project, and makes it easy to work with them, or they don’t.
Oktana has provided tactical team augmentation services to customers for many years, with very high satisfaction scores and positive feedback due to a performance-based model.
Historically, this augmentation model was utilized after large-scale project delivery engagements. Through Oktana, we have opened access to Tactical Performance Augmentation, our highly transformative approach to staff augmentation, to new customers.
Tactical
The most important aspect of the tactical component of TPA is flexibility. Oktana has always been flexible, working with each customer to help find the perfect team composition based on the work they need to get done.
We can also address many of the other more tactical challenges companies face when hiring vendors to provide IT staff augmentation services.
Time Zones
We provide nearshore and onshore resources. With locations throughout the Americas, we provide resources with a generous overlap across shared time zones.
Language & Culture
Our team speaks English, whether native or in addition to Spanish. Though each country has its own unique culture, many of the cultural norms throughout the Americas are shared, or complementary, which makes working as one team a smooth, and fun, experience.
Trust
With onshore resources in addition to nearshore resources and SOC 2 certification, Oktana is a natural fit for organizations with high compliance and governance standards. Our compliance program.
Transparent Team Visibility
We provide our customers with transparent Team Transparency Profiles to introduce you to the team we have selected for your project based on their skills, experience, and interest. You will get to know your team as one team and meet them to ensure they are the right fit for your team.
Month-to-Month Contracts
We know your needs change. Again, this goes back to flexibility. Set the end date in advance, or simply give us 45 days notice when you want to roll one resource, or the whole team, down.
Performance
We earn your business. We have always provided our customers with a true Time & Materials cost model, meaning, if a resource works 7 hours and 45 minutes on a given day, then that is what we bill you.
This enables you to see how many hours of work got done at the end of a sprint, epic or month, versus how much we invoiced you for that resource, to more accurately calculate velocity. We call it the “Performance-to-Spend ROI”. If you’re not happy with that ROI metric, simply give notice that you would like to transition a specific team member off your project.
It’s on us as a vendor to keep performing to earn your business. We give you the model, tools and process to measure our efficacy against other vendors in your portfolio – or against your own team – to make sure that it makes sense to continue to pay for our service.
Just as we addressed many of the additional tactical challenges, we want to also address some of the additional performance-based issues we know companies face when hiring vendors to provide IT staff augmentation services.
Retention
To minimize any of our team members feeling they are on an island, isolated, we build your team in such a way that they will have the support they need. We encourage our customers to treat them as they would treat their own employees to build a connection to their business, just as we make efforts to ensure everyone knows they are what makes Oktana special. We are committed to our team and they are treated with respect and care which carries over to your organization.
Career Growth
We invest in our team’s continuous growth. Our team members complete extensive onboarding training to meet our standards, which customers should trust, and this continues as their career grows with us. Our training team works with each team member to guide a path that enables them to excel on your project and mature in their field while our resourcing team ensures team members move to projects that support their career growth.
Choosing the right platform to build your online business is a very important decision to make. Power technology infrastructure must be integrated into your site to support the customer buying journey and drive your customers toward a conversion. Integrating Shopify with Salesforce Marketing Cloud will help your business increase customer engagement, provide a personalized experience, and much more benefits that will help you generate conversions and optimize the journey of your customers.
How does it work?
In order to integrate Shopify and Marketing Cloud, you will need MuleSoft, to help exchange customers, products, and order data between both platforms. A tracking code is installed in your Shopify store that syncs product views and other actions taken in your store with Marketing Cloud. This allows you to generate reports, send customized emails throughout the entire shopping cycle, and have a 360-degree view of your customers so your team can create a more personalized experience, resulting in more engagement, more sales, and less investment.
Benefits of the Integration
Personalized Shopping Suggestions Powered through Einstein AI
Every time your customer creates a Shopify account, they’re automatically added to your database so you can decide (depending on their behavior) the best email campaign or flows to include them in.
For example: Bob creates an account in your company’s online store and then he made a purchase. Now he receives a personalized order confirmation email with the details of his purchase and additional product recommendations based on his shopping interests.
These product recommendations are generated through Einstein AI, with customer data such as previous purchases, browsing history, and other significant shopping patterns.
Abandoned Cart Reminders Personalized with Shopify Data
With this integration, your customers can receive a customized email whenever they added products to their shopping cart, but didn’t complete the purchase. This feature allows you to configure personalized flows, so you won’t have to worry about losing a sale. Simply set up the amount of time you wish to remind your customers about their pending shopping carts, and the email will be automatically sent from Marketing Cloud.
Create Custom Marketing Campaign Flows
With Marketing Cloud, you can easily create and customize marketing campaign flows to reach your customers throughout different stages of the buying cycle. As mentioned above, you can create flows for abandoned shopping carts and email purchases. Flow can also be configured for newsletters, sales promotions and whatever email marketing approach fits your strategy.
How does a Guided Send work in Marketing Cloud?
Create the email template and define your audience.
Select the data extension option so you’re able to send an email to all of your target audience.
Finally, select the email address from which the campaign would be sent Just follow these three simple steps, and you too can send email campaigns to your selected Shopify subscribers.
Track Success in Real-Time with Marketing Cloud Dashboard
With the Marketing Cloud dashboard, you get all the information you need to track the success of your campaigns in one centralized dashboard. With this integration, you and your team can access real-time performance results and statistical Shopify data for all of your campaigns on every email sent.
Some of the information you can access includes:
Behavior: clicks, forwards, and purchases.
Conversions and new subscribers
Email Activity: analyze which section performs better based on real-time results.
Delivery Data: number of emails sent and bounce rate
Engagement Data: open rate and click-to-open rate
Email Performance Data: conversion funnel and engagement distribution
Insights on best-performing emails, subscriber journeys, and engagement histories
Is this something you or your company need?
We have a team of experts ready to help you. Our technical team has partnered on multi-product, cross-cloud integrations with over 8 years of experience building on the Salesforce platform. We are experienced and confident in implementing third-party integrations. We can connect any application, technology, or system to Salesforce.
If you have any doubts about this integration being the right fit for your organization, don’t hesitate to contact our Sales team at sales@oktana.com for more information.
Hi, I’m Diego and I have several years (I prefer not to say how many, but let’s say “enough”) working in Salesforce. I am also an Agile enthusiast and lover of applying related techniques throughout my work.
I’ve found test-driven development (TDD) can be a great technique for building robust software, but when we work in Salesforce, I find some constraints or restrictions can make it frustrating. In this post, I’m going to show when and how I use TDD while coding in Salesforce.
Disclaimer: The following is written on the basis of what has worked for me in the past. This is not intended to be a formal or exhaustive description. Use it as you see fit, I do not take any responsibility if you screw it up! 🙂
Let’s start at the beginning:
What is TDD?
TDD is an Agile development technique that requires you to write a failing unit test before writing any “production code.”
How are you supposed to do TDD?
First I’ll describe how TDD is done in general (this is the way to go in languages like Java).
Write a unit test and make it fail (a compilation error is considered a failing test). Write no more lines of code than needed.
Write the least possible production code lines to make the test pass (fixing a compilation error is considered a pass test).
Refactor the code.
Repeat until you are done.
Let’s check out an example in Java so you see how it works. In this example, we wanna create an advanced calculator of integers.
We work in split view when doing TDD
Round 1
Let’s write a failing unit test:
Oops, MyCalculator is not defined yet, compilation issue…therefore, it is a failing test.
Let’s make the test pass:
Compilation problem fixed! The test is passing again. Woohoo!
No tons of code to refactor.
Round 2
Let’s continue with that test to make it fail again.
Mmm…getOpposite is not defined, ergo compilation issue, ergo failing test.
Let’s fix that. Let’s write the minimum code to fix the test:
getOpposite is defined and returns 0 to any parameter (in particular, 0). Test is passing again!!!
Let’s refactor.
We still don’t have much code to refactor, but there are some name changes we could use to make code easier to read ( yup, yup, yup…unit test code is code, too).
Much better now! 😀
Round 3
Let’s add a new minimum test to fail.
Right now, getOpposite returns 0 to any parameter… it’s a fail!
Let’s write the minimum code required to make the test pass.
Yay! It’s green again! Let’s continue.
Round 4
Let’s add a new failing test.
Last test fail (we are return 0 to any value different than 1), so now we need to write the minimum code to fix this test:
Test is passing again… but this solution is not good, let’s refactor.
Tests are still passing and we solve all the cases! We are done! Well, not actually, we still need to document, test more, write more tests and write even more tests…but we’re on the right path.
I expect this silly example gives you a feel for what TDD is and how it is done.
Now, let’s continue with the discussion, focused on Salesforce.
TDD Advantages
Code coverage: We get great code coverage without even thinking about it.
Testability: The code is designed to be testable by default (we are actually testing every time we change something).
Easier to refactor: We should not change or refactor code without having a set of tests we can lean on. As we are constantly writing tests that we know are able to catch bugs (we make it fail at the beginning), we know that we have a set we can rely on.
“Better” code: We are constantly refactoring the code, striving for the best possible code.
Predictability: After we finish a “round,” we are completely sure the code is working as we designed it to work and we know we didn’t break anything. We can say we have “working software.”
Prevents useless work in Salesforce: In Salesforce, aside from Apex, we have plenty of options to make changes like triggers, workflow rules, process builder, etc. Imagine that after we write a test that changes a value on a contact record, it passes. We could discover that there is another moving part that is taking care of that change (or we wrote the test badly).
Documentation: Tests are a great tool to communicate with other developers (or the future you) how, for example, a class API should be called and the expected results of each case.
TDD Disadvantages
Overtrust: It happens to me that, as we are testing continuously and we are getting test green, I sometimes have a feeling that the code is working perfectly…but it doesn’t mean it is. We may miss, or simply get lazy, and leave a case out of the unit test.
Slow in Salesforce: TDD is designed based on the theory that compiling or writing a test is really fast (a jUnit unit test has to run in less than 1ms). In Salesforce, we need several seconds to compile (the code is compiled on the server) and several more seconds to run the test. In my opinion, this is usually 10+ seconds. As we are compiling and running tests constantly, we add several minutes of “waiting for Salesforce.” However, this can be mitigated if you think you will need to write/compile/execute tests later anyway – you might as well do it upfront.
Me when I realize the QA found a case I had not considered when I was doing TDD
I will (probably) use TDD when...
In general, I’ve found that TDD is a great tool in several circumstances and I tend to do it almost always in the below cases.
Back-end bug fixes: Doing TDD in this context has two big advantages. First, you make sure you are able to reproduce the bug consistently. Second, and even more important, as you are writing a test specific to the bug, you know you will never introduce that bug again.
Back-end work with clear requirements and a clear implementation strategy: In this context, writing tests is going to be easy and implementing the production code will be easy, too, as you know where you are heading when you create the test cases.
Back-end work with clear requirements and minor implementation unknowns: In this context, the test is easy to write and the production code may be getting clearer as you move into cases.
Back-end work with some requirements discovery: Imagine in our calculator example you write a test to divide by zero and you realize you’ve never discussed that case with the BA. TDD helps you discover opportunities to clarify requirements.
I might do TDD, but it’s unlikely...
As part of requirements discovery: You could write unit tests as part of requirements discovery, and discuss it with your stakeholders, BA, or other technical people, but you probably have better techniques to support this process.
Front-end work: I’m gonna discuss this briefly later, when we talk about Lightning web components.
I will never do TDD when
I’m doing a prototype: By definition, a prototype or PoC should be discarded after we show it, so I code it as fast as I can, focused on demonstrating the core functionality.
I’m experimenting: If I’m trying a new idea, I don’t focus on code quality (again, this is a prototype).
I’m evaluating implementation options: There are some cases where you want to compare two implementation options, so focus on having a good-enough-to-decide prototype and throw it away after you decide…then do the stuff well.
I don’t care about code quality: I know code quality is not usually negotiable, but in very limited and extreme situations, it may not be the top priority. For example, when everything is screwed up on prod and you need to fix the problem ASAP because the company is losing millions of dollars per minute. In this very extreme circumstance, fix the problem as fast as you can, make your company earn money again, go to sleep (or maybe get a drink) and tomorrow at 10 am (yup, after a stressful night, start working a little later the next day) make the code beautiful with TDD. Make a test that reproduces the bug and then fix and refactor the code properly.
Me again, but on one of THOSE nights.
When creating test code is extremely difficult (but not possible): In Salesforce there are a few elements that are very hard to test, like working with CMT. In this scenario, I’d probably split the problem into two parts – one that is TDD-doable using mocking data (@TestVisible is your best friend here) and a second, smaller part that I’d consider how to test later (if I even consider it).
How I do TDD in Salesforce
I really don’t do TDD as I defined at the beginning of this article when I’m working in Salesforce. Why? Mainly because of the slower compile/test flow, but also because in Apex we generally start writing integration tests instead of unit tests. Instead of “regular” TDD, I tweaked the formula a bit to work better under Salesforce circumstances.
Write an entire deployable test that checks the flow or use case. Yup, I said deployable, so if I called a method I haven’t created yet, I will create it, empty, so I can deploy.
Run it and get a failure.
Write the minimum code that makes that test pass.
Refactor.
Continue with the next flow or use case.
When I’m done with all the flows and use cases, I refactor the code again (splitting methods, checking code cleanliness, documentation). I run the unit test continuously, every few changes to check if everything continues to work as expected.
To make everything clear, let’s view an <could-be-real-world> example.
Requirement: As a user, I want the values stored in any object copied into a number of specified contact fields. The specified “mappings” will be stored in a CustomMetadataType called Contact_Mappings__cmt. The Contact_Mappings_cmt has two fields:
Original_Fields__c Text
Mapped_Fields__c Text
Round 1
As I said before, I should start writing an Apex test that tests a business case. The first thing I’m thinking of developing is “The contact should not change if there is no mapping defined.” I have to write a deployable test that is going to fail with the minimum amount of code to make it fail:
We work in split view
As expected, the code deploys but the test fails. So, we need to fix it! We can simply return the same object.
Now It passes, but we don’t have a lot of code to refactor (we could extract some constants in the test).
This is a much better test.
Test still passes!
Round 2
Okay, let’s add another case. What if we check that the User.LastName is copied into the contact when I define the Mapping Lastname => Lastname? Great idea, let’s do it!
I start to write the unit test but…. I realize I can’t do an Insert in a CMT. Or, I give seeAllData permission to the test and define it in the project metadata. Or, I have to somehow deploy it.
Remember that I said that I don’t do TDD when writing the test is extremely hard? Well, it looks like I’m in one of those situations. At this moment, I can quit writing this blog post and go cry…or I can redefine what I am developing with TDD, leaving all the complexities outside of scope. I imagine you would be very annoyed after reading this far to see me just quit, so let’s go with the second option.
I can’t use the CMT right now, so let’s do something different. What if we use a Map<String, String> where the key is the field in the original object and the value is the list of fields names in the Contact Object. It might work, later on we just need to read the CMT and create a Map with that information, but spoiler alert…that won’t be covered in this article.
But okay, great, let’s create a map and write the deployable failing test.
And as it was expected… it fails.
Let’s write the “minimum” code that makes that test pass
Our new test passes, but the other one failed! Let’s fix that.
Let’s do some refactoring, either in test or production code.
I think the put/get part is messy to read (and has its own meaning), so let’s split it into its own method.
Also, as we want that theMap could be injected into test case scenarios, the @TestVisible annotation is useful here.
Round 3
Now we should add a new test that executes a new flow and see it fail. I think you got the idea, so I won’t do it now, but just to specify the cases, I can think:
Mapping a field to multiple fields (separated by colon)
Does nothing if origin field is wrong
Does nothing if destination field is wrong
Does nothing if types are not compatible …and so on
Can we do TDD in Lightning web components (or front-end)
The short answer is yes, we can.
Long answer: As the Jest test can’t see the objects, but they see only the “generated DOM”, it may be harder to do TDD in an efficient way for front-end solutions. Usually, it is better to test visual code by watching the result and THEN write the tests we need to ensure code won’t break in the future.
Conclusion
TDD is a best practice that’s good to master so that you can decide the best moment to apply it (I don’t believe there is One Ring to rule them all, One Ring to find them, One Ring to bring them all, and in the darkness bind them, thank you J.R.R. Tolkien). Applied correctly it will make you produce better, more robust code…and fewer bugs, which means…
Interested in obtaining your first MuleSoft certification, but still have some questions about it? Ana, a developer in our Ecuador office has some answers:
What is the advantage of learning MuleSoft?
The most important advantage that MuleSoft has against other platforms is that it allows you to develop and manage APIs easily. You can even drag and drop components and integrate systems. With MuleSoft Anypoint™ Exchange you can add your APIs to a marketplace to reach a broader audience. That same marketplace gives you connectors that can make your life easier. For example, MuleSoft allows you to use a Facebook or a Salesforce package to integrate systems more easily.
Do you have to be a programmer?
Knowing how to code, or at least understanding how to do it, is useful because it helps you better understand certain topics in the MuleSoft training. For example, DataWeave, try-catch blocks for error handling, and other concepts like that are things you will need to know to be successful.
Do I have to know a specific programming language to learn MuleSoft?
You don’t need to know any specific programming language. But you just have to know how to code; that should be all you need.
How does MuleSoft help companies to grow?
When a company needs to integrate systems, MuleSoft gives them an advantage. With pre-built connectors, MuleSoft makes it easier to connect those systems without having to write a large amount of custom code. Also, if a company wants to produce its own APIs and possibly sell them, the MuleSoft Anypoint Platform makes that easier. They can even use Anypoint API Community Manager to create a Salesforce Experience Cloud community for API developers, which can help quickly grow adoption for the APIs.
Are there any prerequisites before someone takes the MuleSoft developer certification Level I certification?
It’s important to understand programming and knows a bit about APIs, like what they are, how they’re used, and why you’d use them. MuleSoft certification is not very difficult as long as you know your basics.
It is possible to achieve the MuleSoft developer certification by myself?
Of course, it’s possible. And it’s a great opportunity since the course is free. To start, go to the training page and sign up. If you pass the training, then the exam is free. You should take advantage of this opportunity! Just remember, you need some experience with coding to know the terms and to understand DataWeave. It shouldn’t be too challenging for you.
What is the best API?
Which API is best depends on the project you’re working on. So maybe, if you want to incorporate a map in your system, consuming the Google Maps API would be the best solution for you (if it complies with all the requirements you need to meet).
What is the next step after you earn the MuleSoft developer certification Level I – Mule 4?
After you achieve your certification, your next step could be to go for the Integration Architect certification. In my case, I want to gain more experience with MuleSoft projects before I become a certified Integration Architect. For that certification, MuleSoft has training that can help you, but it is not free.
How long does it take to get MuleSoft developer certified?
That’s a great question, but it really depends on you. You could finish this course in five days if you are 100% committed, but you can also use other kinds of resources. Just to be sure you are ready before you take the exam. So it could take, five days, one week, or two weeks, it all depends on you and the time and effort you put into it.
You will use MuleSoft only for projects that require integrating systems. For example, if in your project you integrate a database and then you want to use that data in another system, you can use a specific API for that. But it really depends on the project and your requirements.
As a front-end developer, do you think it is useful? or is it only used in the back-end?
I think that as a front-end or a back-end developer it could be very useful to have a full understanding of what MuleSoft can do. So it’s worth getting this certification to give yourself a better understanding. As I said, this is a huge opportunity and the exam is free, so you must take it!
If you want to know more, watch the webinar about MuleSoft certification and Ana’s experience.
Interested in learning more? Check out some of our latest MuleSoft articles:
Ana A. has been working as a developer on our team in Ecuador for more than six months. During this time she has achieved her Salesforce Platform Developer I and MuleSoft Developer – Level 1 certification. Let’s look at what MuleSoft does and why getting certified is a good career move.
Understanding APIs
To understand MuleSoft, it is important to understand what an API is. API stands for Application Programming Interface. It’s like a user interface but is not built for humans to understand, it is built for software. MuleSoft allows the software to connect with other applications. To sum it up, MuleSoft is an API and integration platform that allows businesses to connect their data, applications, and devices with others. The entire MuleSoft Anypoint Platform™ is designed to make it easier to create, maintain, and share APIs. They’ve created an entire API ecosystem around it, expanding the API ecosystem to include not only software developers but non-developers like Salesforce administrators with MuleSoft Composer for Salesforce.
Importance of integrations
You’re probably asking yourself, why are these APIs so important? In MuleSoft’s recent survey of global IT leaders, they found that “the average enterprise has its data scattered across as many as 900 different systems, some of which don’t even belong to the organization.” Combine that with their estimate that enterprises spend $3.5 million USD per year on integration, and you’ll see that there is an incredible opportunity for developers certified in integration ecosystems like MuleSoft. The first step in getting the certification is to understand all of the MuleSoft capabilities, features, and tools.
There are four MuleSoft certification paths you can follow. We are just going to focus on just the developer path. To start working on your first certification, Ana highly recommends taking the course Anypoint Platform Development: Fundamentals (Mule 4). This course has 13 modules and is composed of videos, walkthroughs, model quizzes, surveys, do-it-yourself exercises, and a self-assessment quiz. For you to complete this course, you must finish every part, then score over 70% on the self-assessment quiz. The best part of this course is that MuleSoft allows you to make two attempts at the certification for free. Ana also complemented her study with these additional resources:
The easiest thing about MuleSoft for Ana was learning how to design an API with RAML, which is a RESTful API modeling language that is easy to learn. In Anypoint Platform, you will find the design center, the exchange tool, and the API manager. Ana enjoys working with the platform because it is very intuitive. It even lets you design and implement APIs using drag and drop components.
The most difficult part of getting certified for her was the error handling topic and order of execution. Order of execution can vary depending on the flow you’re building or if the calling flow has scope for error handling, but she was able to master the subject with the additional training resources shared above.
Salesforce and MuleSoft
If you’re a developer already working with Salesforce, you’ll be interested to know that MuleSoft has a Salesforce module with many connectors. It allows you to build an API that can manage a Salesforce org, database operations, or metadata operations like creating, updating, inserting, or deleting records and more. An example would be a connector called ‘create a record’ , which allows the API to create a record (or whenever an object is needed) specifying the configuration or a specific organization.
The MuleSoft Anypoint Platform also works with Salesforce Experience Cloud through a managed package called MuleSoft Anypoint API Community Manager. It allows companies to create developer communities around the APIs they are managing with Anypoint Platform. This helps them better manage access to their APIs and it helps their developer communities more easily adopt those APIs, and a great advantage is that the company can brand their APIs.
Training at Oktana
When Ana was studying for this certification, she heard a lot about the power of MuleSoft, and how this could improve her career, so she wanted to try it.
“Oktana helped me a lot with all the resources to start my training. I also had a mentor in the company, so he helped me every time I had a question. This was very helpful”.
Ana A.
Our team is constantly growing, in Ecuador and across the Americas. If you want to enhance your career with Salesforce and MuleSoft, apply for one of our open opportunities. Our training team works closely with the developers to help them achieve their certifications, just like Ana did.
Tips for your first MuleSoft certification
Every time you finish a module in the MuleSoft course, play around with Anypoint Studio. Practice creating new flows with different connectors that you learned in the course. That way you can debug them and understand how the order of execution works for each component or connector.
The exam has many questions about the order of execution, so make sure you understand that properly.
Ana encountered problems installing the exam proctor software on Mac, she recommends taking your exam on a Windows system to make things easier.
If you want to know more about MuleSoft, we recommend reading about our latest MuleSoft projectsto get a better understanding of the great things you can achieve.
Thinking about a tech career? There are a lot of different directions, but the Salesforce developer path is one that will enable you to quickly get started and expose you to numerous technologies as you work with companies to integrate and customize Salesforce. While a coding background is definitely helpful, Salesforce is a really good place to start your tech career.
You can explore this career path from the perspective of two of our Salesforce developers, Erwin and Sergio. They’re both new to Salesforce development, having joined Oktana Bolivia in 2020. They deserve an extra round of applause since their team started remotely during the COVID-19 pandemic!
In Bolivia, very few people know about Salesforce which surprises most of our team because they can see it’s a platform with a lot of potential. Because of its size and complexity, with so many different products, learning Salesforce on your own can be intimidating, but Erwin and Sergio have found that the learning materials and coaching provided by their trainer made everything much easier.
Since childhood, both Erwin and Sergio showed a strong interest in technology, especially video game creation. This passion eventually led them both to software development. Before they joined Oktana, they had never worked with Salesforce, but had gained experience with different languages like Angular, C++, and Java.
Similarities with common programming languages
Now that they have been working with the platform for several months, they have found some similarities with common programming languages:
Salesforce uses Apex, a proprietary language very similar to Java. The syntax is Java, but simpler.
The same happens with Lightning Web Components. They have a Java base, making their creation easier for Java developers.
The way Salesforce manages data is by storing everything in metadata. You can manipulate it using SOQL, which is similar to SQL.
Benefits of Salesforce
As a Salesforce developer, you help businesses by helping them integrate with a secure and scalable platform that’s easy to customize and upgrade without anything breaking. From the point of view of our Oktana Bolivia, here are some additional benefits of Salesforce:
Efficient: With just clicks, you can create a structure very quickly. Comparing it with other programming languages where you have to create the database from scratch, using Salesforce is much easier because the database structure is already created for you. Also, the way Salesforce organizes your information is great. If you have to make a change in Salesforce, and if you setup your metadata correctly, it is simpler to reorganize it, saving a lot of time.
Drag & drop page layouts: Salesforce lets you move fast by dragging elements and following defined steps which allows you to focus on other development.
Mobile: Salesforce offers a mobile application that lets you work like you would in the browser. When you build functionality for Salesforce, it can be made immediately available on the Salesforce app, so you don’t need to build a separate mobile app.
Platform: The Salesforce platform is very intuitive. Salesforce teaches you to think about the easiest way to solve a problem, so it’s quite easy to follow this trend. For example, if you start working with Lightning Web Components, when you get some practice, you learn to create components one on top of the other and that interact within the same page, understanding how the components communicate with each other.
Environments: Salesforce already has everything hosted for you. It’s easier to develop in a sandbox environment, then upload it later to production. You don’t have to deploy, just take it to a sandbox to upload it later to a host and then production.
Salesforce best practices
On the other hand, working with Salesforce forces you to learn good programming practices like:
When you develop with Salesforce, it forces you to be more orderly and develop in the most optimal way possible, so your code is not chaotic. It’s really how you should program on any platform in any language.
Likewise, all the out-of-the-box tools are very well made and give you ideas of how you should develop if you aren’t working in Salesforce.
“I consider that the creators of Salesforce are THE BEST, they thought it through very well, and you learn from this.”
Erwin M – Developer
Challenges while learning Salesforce
Maybe the toughest thing is the declarative part of the flows. Salesforce has tools to automate data management. One is the Process Builder where you can develop with clicks, also with the Flow Builder, which allows you to create complex solutions all with clicks, too. In the beginning, it can be a bit complicated to select the right tool for each type of request, but with practice, you get to know everything that Salesforce offers and can do.
Plus, at Oktana, with the onboarding training and experience on different practice projects, you have an excellent base to get to know Salesforce much better.
“There is a lot of information about Salesforce, so it is difficult to know everything, but with practice, you gradually get used to using this platform”
Sergio Z – Developer
Why should you become a Salesforce Developer?
Erwin and Sergio highly recommend taking this career path, because it allows you to create different types of solutions, learn good practices and it’s a great way to start learning a different form of programming. Also, there is a lot of demand related to this career.
It’s not necessary to have previous knowledge of Salesforce before starting this career path. If you know the basics of programming, that is enough. But, it does facilitate learning to have prior knowledge of web development, JavaScript, or basic Java (or C#).
What it’s like working with other cultures
Erwin and Sergio think it’s great, and fascinating, to work with people across several countries – every day they learn about the customs, food, culture, and places they would love to visit in Ecuador, Paraguay, Peru, Uruguay, and the United States. They also learn many of the similarities between countries.
Something funny Erwin found when he started working at Oktana was that he had thought Salesforce was a simple and straightforward CRM tool, but after training and working with it, he was completely surprised by the size and potential of the platform. For Sergio, when he started working at Oktana, it was the first time he had worked with a Mac as a working tool. He thinks it isn’t as bad as some comments he’s heard from those who don’t use Macs, it has quite interesting and useful things.
It has been interesting getting started at a new job, learning new technologies, during COVID. For example, for Erwin, it was interesting several paid events around the world that used to take place in person, are now broadcast over the internet for free, allowing people to know and learn much more about Salesforce and new technologies for developing software. In the case of Sergio, working completely from home has great advantages. The fact of literally getting out of bed and taking a couple of steps to be in your work area, instead of taking a bus to go to the office, is really motivating. It’s also really relaxing too, at the end of the day, simply log your hours and close your Mac to be at home and rest.
Android, Inc. was founded in 2003 and, as you may or may not know, acquired by Google in 2005. Android is an operating system and programming platform now developed by Google for smartphones and other mobile devices like tablets. Given this, many developers have chosen to specialize in Android. We talked with Amancaya, one of our Android developers, about why she chose this career path.
Amancaya was always interested in technology and started her development career in Sucre, Bolivia. At that time, many different tech communities existed, and one, GDG Sucre, invited her to join. As a participant in their community, Amancaya started to learn and share new technologies she discovered. (Fun Fact: Erwin, another member of the Oktana Bolivia family, is also part of this community.)
Since joining Oktana, Amancaya has contributed to a project involving Android app development for a leading US-based weight-loss program.
Why become an Android developer?
If mobile is what you like, you won’t regret becoming an Android developer. In the case of Amancaya, it was frustrating to learn JavaScript because it isn’t so flexible and she appreciates a very well-established structure. Kotlin, on the other hand, combines object-oriented (a paradigm in which you have to think about objects at the time of development) and functional programming features that are more comfortable to her style. Java is also a good starting point for an Android developer.
When she started to learn about Android development, the only information she found was about other web developers and frameworks. In Sucre, Bolivia not many people do mobile development, everything is more web-oriented, so this further complicated her path at the start. Now there is a much stronger global community of Android developers sharing tricks and tips, so it’s much easier to feel supported and get answers when you need them.
The most important thing in getting started is that you feel comfortable with Kotlin or Java.
Kotlin vs Java
Kotlin was designed with Java interoperability in mind, you can include Kotlin code in your Android app in any way you want. Java can be called from Kotlin in a natural way and vice versa. Both languages are very similar, that’s why both are the favorites of the developers, but there are some differences:
Kotlin provides the ability to extend a class with new functionality without having to inherit from the class or use design patterns such as Decorator. This is done via special declarations called extensions.
Any chunk of code written in Kotlin is much smaller compared to Java, as it is less verbose.
Kotlin compiles the code into a bytecode which can be executed in the JVM. So, all libraries and frameworks made in Java can be moved and run in a Kotlin project.
Kotlin is not as popular, so the developer community is sparse compared to other well-established languages like Java.
In Bolivia, the Android community is gradually growing, and exists in different communities across many cities in Bolivia, including Kotlin User Groups en La Paz, Cochabamba and El Alto, GDG Android Bolivia. These communities host regular talks and workshops to help more people learn about mobile development and Android development, to grow the Android developer community in Bolivia.
Another group of developers exists that is starting to specialize in Flutter, which is a new open-source mobile software development kit that can be used to build native-looking Android and iOS applications from the same code base.
Also, if you are interested in learning more about mobile development, read about one of our latest projects.
“The people who work on my project are very good. I have learned a lot and every day I learn more. My team explains things to me when I need them to, it’s been a great experience.”