OrgConfessions

OrgConfessions – there are some lists you shouldn’t be on

The Salesforce platform is very powerful, but as Spiderman was told “with great power comes great responsibility”. And whilst we can laugh or grimace at these OrgConfessions, there is a serious point here. Salesforce has the potential to transform your organization.
Take a look at the root cause analysis we performed on the OrgConfessions and you will see some common themes. Most of these confessions could be avoided with better analysis, architecture and governance which is why we built Elements.cloud.

STOP PRESS:  We are printing a book for #DF19 and there will also be 2 sessions called @OrgConfessions.com Funny. Not-funny. Lessons on Org declutter, documentation & technical debt.

  • Confession #405

    One time I saw an admin delete all object data 🙂 magical lol

  • Confession #404

    I had a contract recently to work on expanding out the architecture for a Salesforce org at a pharma company. I asked who was administering the current build – Intern, in college, only other job was a server in a restaurant.

  • Confession #403

    Regional Sales Leader: “Hey Admin, I just updated everyone’s settings in Salesforce to make them System Admins, so that my team members can log calls and meetings!”⁠

  • Confession #402

    We have a coupe of public groups with a single user in them

  • Confession #401

    Business support user asked to modify all user profiles to remove the ability for them to create reports because ONE person keeps making their own and it’s confusing for others… (case of using a hammer to swat a fly).

  • Confession #400

    I typically work in SFDC naked.

  • Confession #399

    Director wants a new field for FY total giving. Quickly build it for year end. Fast forward a year later same request comes in and built it again. Now we have FY16_Giving_Total__c and FY17_Giving__Total__c. You might see where this is going. Eventually, Today, we have 4 years of totals and no one cares about FY 16 anymore. Looking back I wish I had thought to write a more complex definition for Current_FY_Giving_Total__c. Prior_FY_Giving_Total__c and maybe even 2_Years_Ago_FY_Giving_Total__c. Three feilds to maintain. Once the formula is correct there is no need to ever modify it. No need to build a new one annually. No one cares about totals from three years ago

  • Confession #398

    I blindly activate critical updates without testing. Hoping it doesn’t break something.

  • Confession #397

    I joined a company that worked with salesforce for couple of years. The admins put only the customers into the system not the prospects – argument for that was they can´t differentiate if customer or prospect. You can imagine my face seeing 4k prospects in excel sheets.

  • Confession #396

    I built some new functionality, wrote my user training documentation, and pushed it to production. Another admin inadvertently wiped out this functionality on a subsequent change set from a different sandbox, which we didn’t discover for 4 months. Now I have to go back and re-figure out how I designed it to work originally so I can put it back and I’m realizing how much I didn’t document and don’t remember…

  • Confession #395

    That special moment when..a Salesforce user insists on using Notes to capture all calls, tasks & to-do items, because using native Activities “is too much”

  • Confession #394

    I joined a company whose salesforce instance had been touched by a number of actors without any training. Lots of stories, but the one that made me laugh the most is the field “Today Date” on an Account. And yes, it was a formula field, and the formula was TODAY()

  • Confession #393

    I joined a company with a very old org: 100+ objects, several almost at their field limits, 50+ profiles, 100+ permission sets, tens of thousands of reports…! Sandboxes not refreshed in years, deploying changes manually… Worst of all, no documentation of anything!

  • Confession #392

    The CEO of a non-profit I worked for wanted all the major gifts officers to start tracking their donor portfolios (meetings, phone calls, emails) in a binder. As system admin I suggested using tasks and activities to log donor touches and keep the history in Salesforce, then schedule a report to his inbox at the interval of his choosing. That went over like a lead balloon…

  • Confession #391

    A global organization purchased hundreds of licenses and appointed one internal admin to implement and maintain the org. After three years of work, there is a data model in place which requires to create same fields year after year, because they capture data only for that year. User adoption is quite low…

  • Confession #390

    I took a job with a non-profit that had a new Salesforce system used for client management. The agency had a contract with the consultants who built the system to continue implementing new functionality. But there was NO SANDBOX – and the system was so horrifically complex that it required a developer to set up a Sandbox that worked. So the consultants – and us – were making all the changes, testing, etc. right in production. I was horrified. This story has a happy ending – by the end of my 4.5 years there, the agency was on a full Sandbox.

  • Confession #389

    Apex getter incremented a value stored in Salesforce after returning it. Performed a full DML to updated the value. Makes me scared to know what is happening when we simply get values in our org!

  • Confession #388

    When I first started working in Salesforce, without any training, the system administrators set me up with rights to manage our team’s users. Which also gave me rights to update my own profile and assign myself more rights… I am pretty cautious but I could really wreck something!

  • Confession #387

    Frustrated with Lightning, too many clicks, need to refresh the page multiple times before updates show up and hang time is too long. Still do all my work in Classic, especially in Setup.

  • Confession #386

    Credentials (yep, to Production system) hardcoded in Apex. And then debugged to developer console on each use!

  • Confession #385

    We have so many customizations (even, or actually especially when there is a matching standard feature) that I think we are doing that just for the sake of pushing Salesforce to its limits.

  • Confession #384

    Criteria-based sharing rules based on custom IP field. Continuous maintenance…

  • Confession #383

    Several times we got a CRITICAL issue, because a field was moved to the other section of the layout.

  • Confession #382

    As a consultant I’ve had the opportunity to look into numerous orgs. First thing I do when I get onsite is look at the data model and security model. One such org was using Territory Management out of the box. They created a one to one relationship between territories and roles (which, by definition cancelled out the use of territories). As a result, the client had over 200 ROLES for sales people driving their security model. No wonder they were unable to share basic information with one another.

  • Confession #381

    We have continuous integration. Development process: Apex – code developed by developer, then committed to repository, then deployed to several sandboxes for testing, and finally deployed to production. Everything else that can be modified on production – developed directly on production by admin, and only then retrieved by devops team and added to repository, so “the users don’t have to wait”.

  • Confession #380

    Mandatory regulatory change. It is published months before it becomes mandatory, but dev team is informed so late that it has to be done ASAP, which means no code review, only basic tests that the new feature didn’t blow everything out or development directly on production. And yet despite it being ASAP, business still changes its mind, so subsequent fixes has to be made. And “ASAP” feature is on production after, say, month. And yet nobody cares.

  • Confession #379

    Code review performed by junior devs due to lack of seniors in team (currently only one).

  • Confession #378

    We’d like you to build all these API integrations and task automations… but we only bought Salesforce Professional Edition and we don’t want to purchase APIs or spend another cent. I feel like I’m holding it together with bandaids and sticky tape!!!

  • Confession #377

    In doing a health check on a customer org, I found a formula field called “Last Modified Date” that looked at the record’s last modified date.

  • Confession #376

    Was with a notforprofit converting to Salesforce. Already have an IT degree and oodles of experience, certified in SF in my own time and my own cost to support the project. Was told I wouldn’t be needed after the go-live because they had Salesforce Premium Support. The first day after I left my former manager ran a data import in production and screwed up about 900 contact records which they then told the Customer Service team to manually fix as they didn’t know how to undo their mistake and hadn’t taken a backup beforehand. Karma…

  • Confession #375

    Actual Test Class.
    In Production.


    public static void hackMethod () {
    integer i = 0;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
    i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;

    }

    }

  • Confession #374

    Custom logic mixed in Apex classes, workflows, flows, process builders, formulae, even JavaScript on VF pages. Built by various consultants over years, and in some cases, by admin directly on production. No documentation.

  • Confession #373

    SOQL queries in loops.
    Callouts in loops.
    DMLs in loops.

  • Confession #372

    Multiple permission sets “Object Field edit” on Production, which give access to just one field on just one object.

  • Confession #371

    Permission set “{persons forename} Permission Set” on Production. That forename is quite rare, so we all know for which user was it created, but now it’s assigned to many other users, so it’s impossible to get rid of that.

  • Confession #370

    When you quickly make a change for a user, and they respond back immediately with “It’s still not fixed”. Then you remember you’re on Lightning and you have to ask the user to refresh their browser 20 times, log out and log in again, and then shake their computer a couple times so that Lightning will finally stop looking at the cache and load the new setting.

  • Confession #369

    I sometimes still use a pencil.

  • Confession #368

    We discovered Workflows and Validation Rules with open conditions and other workflows with overlapping/contradicting conditions on same object.

  • Confession #367

    I still build in Classy, but preach to my mentees to build in Lightning.

  • Confession #366

    Big issues with how fields are used in the Org. Too many custom fields so detail pages take longer to load. There is confusion over which fields to complete and which ones to skip. Using ‘Large Text’ fields instead of ‘Notes’ feature. Finally, rollup fields used as flags instead of rolling up count or currency.

  • Confession #365

    Inconsistent naming conventions & standards followed across code. Multiple frameworks for test classes, utility classes, trigger & integrations. Lack of code commenting makes it tough to maintain & support.

  • Confession #364

    Multiple Triggers/Classes/VF Pages with < 75% code coverage. The test classes just cover lines of code so they don't guarantee whether functionality worked or not.

  • Confession #363

    Custom object “X_History__c” with fields “Changed_Date__c”, “Field_Changed__c”, “Old_Value__c”, “New_Value__c”, “Changer__c”. Has it been created before SF introduced field history tracking?

  • Confession #362

    700 GB of record. When it’s close to the limit, we buy additional storage. About half was useless old “technical” records. Finally we managed to delete then. It took over a week and killed our async jobs due to SF’s daily limits.

  • Confession #361

    Using “Comments__c” text field on object, with tracked history, and refusing to use Chatter, because “that’d be something new to the users”.

  • Confession #360

    SF Cases used as issue tracker. When SF is not working, it ends with “where is your God now?” moment.

  • Confession #359

    Profiles: “X (company name) Administrator”, “Integration Admin”, “MC Integration Admin”, “X Support Administrator”, “X System Administrator”. Standard “System Administrator” in use as well.

  • Confession #358

    Fields “Value_2016__c”, “Value_2017__c”, “Value_2018__c”… Admin never heard of “zero, one, infinity” rule.

  • Confession #357

    Every partner company has its own profile.

  • Confession #356

    Virtually no role hierarchy (except “Top” and a few below, on the same level). Instead, profiles used as they were roles.

  • Confession #355

    Dozens of cross-object formula fields, so the user don’t have to switch to parent objects to see their fields.

  • Confession #354

    Hardcoded record type ID on formula. Impossible to use RecordType.DeveloperName because of exceeded limit of relationships on formulae.

  • Confession #353

    List views wrapped in VF pages, with extra controls. New list view = new VF page…

  • Confession #352

    I always try and steal my formulas from the Trailblazer community Answers section instead of build them myself…

  • Confession #351

    Customer using non-English language (our native) in org. Whereas official translations are not bad per se, but we, devs were so accustomed to English terminology that we had to switch it back to English to work efficiently.

  • Confession #350

    Case trigger creates tasks. Task trigger updates case, which creates another task. Infinity loop.

  • Confession #349

    Validation rule to stop one spammer (hardcoded email address) from creating email-to-case.

  • Confession #348

    Financial company. External consultants with unlimited System Administrator access to Production.

  • Confession #347

    Custom fields on Contact: Second First Name, Second Last Name.
    – First or second?
    – Yes.

  • Confession #346

    SF integrated with external system “X” directly (SOAP) AND through integration framework.

  • Confession #345

    I went into a company and found that a previous person had tried to implement Opportunities for the company who were using Leads for everything at this point. Rather than training the company on how to convert a Lead, loads of flows, triggers, lightning components (to show the Opportunity status on the lead) and formulas were used to keep the Lead in sync with its created Opportunity (created when the Lead reached a certain status) until the Opportunity closed as won. At this point, the Lead was converted, if lost, the lLead stayed forever. This also meant that no Accounts were ever created until the Opportunity was closed won. Needless to say, this was a tricky one to straighten up.

  • Confession #344

    Admins are unable to trust existing Permission Sets by their name. Numerous Profiles (~60) and Permissions Sets (~600) assigned to various users. Security Risks due to non-admin users in the org with high data exposure and higher level of system privileges like Export Data and View All/Edit All.

  • Confession #343

    Consultant was supposed to put a time stamp when a field was changed on a record. They wrote a formula so that every record would show as time stamped today. We paid $300/hour for this.

  • Confession #342

    Non-Salesforce legacy system has three orgs you have to log in and out of. Consultant set up Salesforce to push data into legacy system, which was still used. Consultant also made custom objects for Quote, Quote Line, Order, Order Item. No documentation. Business has thousands of products with multiple options to configure and each possible configuration has its own product record. Asked why he didn’t think to set up CPQ, he said, Well, CPQ is really complicated.

  • Confession #341

    I found out that our org has maxed our number of Workflow rules on a Case object. All rules are identical – they send email alert based on the same criteria and use the same email template, but each have only one recipient and it’s always a different person from the support team.

  • Confession #340

    Meant to sent a mass survey to 100k people that opted in. Instead sent to over 1 million people that never interacted with the company.

  • Confession #339

    Consultant who preceded me set it up so orders are created only when opportunities are closed/won.

  • Confession #338

    External consultant has deployed all custom objects and related validations and flows as managed packages, but no access to the developer org has been given to us.

  • Confession #337

    I’m just learning to code and some of it is being pushed to our Prod!

  • Confession #336

    Our org is integrated with ERP. Business need was a FULL load of Accounts and Materials, but after some months realized that they actively use only hundreds. But they load 500k for each object. Daily!
    Plus middleware team refused to set UPSERT, only INSERT, therefore we needed a trigger to transform data (update existing, insert new). After 3 months development and testing we went live. Used for about a year and then the middleware team had org changes and the new technical team accepted our proofs that they can change API config from INSERT to UPSERT. After one more year we implemented an enhancement to flag non used Accounts and Products to be able to hide them. Wish we could do all these things from the start since we’ve spent a lot for cleansing!

  • Confession #335

    I triggered a system email to 200,000 customers.

  • Confession #334

    Synced 2.9 million Leads and Contacts from Salesforce to Marketing Cloud…the contact count limit in Marketing Cloud at the time was 80,0000…

  • Confession #333

    Got asked to merge over 5000 unique community portals…

  • Confession #332

    Users were creating their own Lead fields – it had reached the field limit when we came in.

  • Confession #331

    I wish I had made the “Session title” field limited to 80ch. Because now I need to contact everyone who has had their session accepted and ask them to cut their title to 80 ch.

  • Confession #330

    CRM systems manager has been using SFDC for 3 years now, implemented commerce cloud and still doesn’t think it’s a platform that can compete with MS Dynamics.

  • Confession #329

    Marketing team refuses to delete 20k lead records that are 5 years old, thinking that because they paid for them that somehow they will be useful somehow, sometime, to someone…

  • Confession #328

    I removed the admin user from a community.

  • Confession #327

    We recreated almost all CPQ objects to save license costs for finance who just need to report on the data.

  • Confession #326

    On account we have a custom picklist field called Target Account with Yes and No picklist values.
    Let that one sink in.
    To make it worse our standard picklist field Type has a picklist value Target Account.
    It was a requirement from Marketing although they were actually never were able to explain the difference.

  • Confession #325

    Our business decided to implement a property object, so upon lead creation, a property is created from the address details.They also decided that lead duplication was not an issue and that duplication should in fact be encouraged when leads return, without syncing up to our person accounts… I’ve inherited the most cluttered system of duplicates leads and on top of them duplicate properties that can’t be merged….

  • Confession #324

    As a “wet behind the ears” stand-in Admin, the head of Marketing asked me to delete all the Sales team’s Tasks because they weren’t yet using Tasks in this newly rolled out org and it was populated with “junk”. I asked,” Are you sure?” The response was “yes”. “Are you really, really sure?” Again, “yes”. I remind you that this wasn’t my job and I was filling-in until the Admin position could be backfilled. I did what was asked of me because, while I questioned the instructions, I trusted the source. As you can imagine, the outcome resulted in a mini-revolt because Sales WAS using Tasks! This was my introduction to the world of Salesforce! Thirteen years later, this Accidental Admin trusts no one when it comes to extreme requests, there’s always a lot of questioning of various audiences, a backup file, and a revert plan.

  • Confession #323

    I require my users to use Lightning. I toggle back to a Classic daily.

  • Confession #322

    I worked for an org (pre-Lightning) with a custom Visualforce “skin” on the Leads page. It recreated the standard leads page but with a few small bells and whistles, like custom filters on related lists etc. So any change to the lead page needed a developer to add a field. Also, it used 57 SOQL queries JUST to load the page. The org also had so much trigger recursiveness that changing the shipping address postcode on a child record caused the dreaded TOO MANY SOQL QUERIES error. I left the job after a year. My last 6 weeks were spent bringing the org’s test coverage from just skating by on 75%, to 85%. Six weeks to get a 10% jump. *headdesk*

  • Confession #321

    I want to move from Admin to Developer and procrastinating every month…

  • Confession #320

    My Private Reports folder is a hot mess and I have no one to blame but myself.

  • Confession #319

    I’ve been doing Salesforce for 10 years and I still have to Google for Validation Rule help.

  • Confession #318

    I inherited an org that has a custom object called contact__c.

  • Confession #317

    I was in charge of a sales verticalization implementation, which also was the first time reps had a book of business. Leadership’s direction was to dump 5m Accounts into SFDC which I had to de-dupe against current database…impossible because no data enforcement and data was stale. After the first 6 months no one trusted the data and they continued to sell per previous status quo. We hired a team of 10 to do data enrichment on all the accounts I dumped in… I won a company award for my quarterly “performance”.

  • Confession #316

    Documentation is apparently a four letter word around here!

  • Confession #315

    After 10 years of working with SFDC I am still looking for the search button while building a change set. Legend has it, for the privilege of searching for a component, one can also pay additional licensing fees to a SUPER Platinum SFDC Partner

  • Confession #314

    37,000 lines of code for DocuSign. Yes – THIRTY-SEVEN-THOUSAND!

  • Confession #313

    Marketing has used a checkbox to show participation in our annual user group – not a campaign – a check box – that is erased every year and re-used.

  • Confession #312

    32 stages on an Opportunity NOT INCLUDING closed won or lost.

  • Confession #311

    Salesforce was purchased 3 years before any implementation done. Accounts and Contacts were uploaded then. Then again for a second time during implementation. Then when the consultant realized they had errors on the second upload, they re-uploaded everything for a third time. No one thought to delete the previous uploads.

  • Confession #310

    User asked to grant login access. Emails Username and Password instead. Did I mention this user has System Admin access?

  • Confession #309

    Rebuilt 89 webservices from an old custom CRM… Without documentation or access to the legacy code, just the name.

  • Confession #308

    What have you done, the API integration is failing. User called “Integration User- don’t deactivate” was deactivated by the client PM.

  • Confession #307

    Invited to new Chatter group called “ISV-ABC.” We all ignored it because it looked like a test. ABC actually stands for a territory: AMER – BUILD – CENTRAL.

  • Confession #306

    Org with 432 WorkFlow + 86 ProcessBuilder + triggers. No documentation….

  • Confession #305

    Once did a CPQ deployment where the client didn’t want to do any UAT testing before going live. We let them do it.

  • Confession #304

    My manager suggested it’s ok to have 10 triggers on a object.

  • Confession #303

    Org was previously “owned” by dev team. They created custom 100% coded lead conversion because they didn’t know the OOTB functionality existed!

  • Confession #302

    Our brand was purchased by a larger company, multiple teams were brought into the existing org, and the solo admin (myself) is disallowed to help the remaining teams. We’ve lost one of them now. I got to go order a nameplate now. Sadly, I’m also confession #121 incarnate…

  • Confession #301

    Trying to figure out a nonsensical Apex trigger built by someone who is no longer with us. And by ‘no longer with us’, I don’t mean isn’t with the company anymore…

  • Confession #300

    Working under direction of a Director who doesn’t know anything about Salesforce and always compares to other technology that Director worked on.

  • Confession #299

    Sharing rules criteria of Billing City Not Equal to ‘asdfasdfasdf’. And on a Public Read/Write object. Umm, No.

  • Confession #298

    Sales Rep sent a “Merry Christmas” email template to all of his Contacts in the middle of July.

  • Confession #297

    In my first admin role, my boss told me they refused to develop in sandboxes because they ‘took too long’ to spin up, so we developed everything in production.

  • Confession #296

    Sales Rep automatically receives lead. Sales Rep calls Admin to ask “what does this lead want?”….

  • Confession #295

    Fraud test coverage taken to 100% using a loop.

  • Confession #294

    Role names ‘hard coded’ within Apex Classes.

  • Confession #293

    300+ record types on the case object…

  • Confession #292

    What documentation?

  • Confession #291

    Discovered that the external consultants had created 52 approval processes which contained the same starting field update – and they’d created that field update 52 times too…

  • Confession #290

    Custom objects for Skills, Translations, Roles, Case Comments. I guess the previous consultant didn’t know about “standard” objects

  • Confession #289

    I learned the hard way – when using flow, NEVER put an action object (lookup, create, update, or delete) in a loop, unless you are 100% sure it’s only going to loop a handful of records…and even then…haha.

  • Confession #288

    Over 150,000 reports….

  • Confession #287

    Once worked with a Senior Admin that refused to fix profiles and permissions, saying they were “not important”. This was after I explained that Sales Directors had access to the CPQ pricebook and were deleting products to try and bypass approvals. Needless to say, ended up mass changing profiles and permissions without telling him. To this day, I don’t think he knows I did it.

  • Confession #286

    There are 110,000 Account records without a real owner.

  • Confession #285

    Hard coding employee names directly into a trigger!

  • Confession #284

    If you request more apex code space in your org and have thousands of lines of `i++;` it’s getting rejected. But why write garbage code that just increments a variable? Code coverage… If 75% of your code is garbage that’s easy to test, then the other 25% of your code that’s actual logic doesn’t need tests.

  • Confession #283

    A VP of Sales asked if I needed to create reports first before I created his team’s sales dashboard! He also wanted to increase user adoption, his solution is to reward the user that logs in the most time each week.

  • Confession #282

    I worked for a company that demanded a certain number of calls with “2 way” communication. So I kept a list of all my customers who had a phone menu that would loop. So it appeared I was on the phone for a certain # of minutes. While listening to the phone loop, I would then enter false conversations. I could identify these as false because they always began with a few selected lower case words. I would get the nonsense done so I could move in and sell.

  • Confession #281

    I had such a bad hangover at Dreamforce I watched Marc Benioff’s keynote streamed on my laptop whilst lying in the bath drinking Red Bull.

  • Confession #280

    Created multiple tickets and assigned them to myself so my ticket count meets managements expectations. Eg, a ticket to make a change, another to troubleshoot the change, another to track a problem record with vendor, another to apply the vendor recommendation and heck, one to perform a full recycle and heck another to document the change.

  • Confession #279

    Every quarter our sales teams change their tiers to improve the efficiency, at least for every year. So we gotta activate and inactivate hundreds picklist values available for sales teams based on the change in their team structure. Doing this manually is a tedious task.

  • Confession #278

    Joined as solo admin for an org with 50k community users with self registration and no duplicate / matching rules switched on. Shall spend the next 20 years of my life cleaning the data.

  • Confession #277

    In the 4 or so years I’ve been working with Salesforce, I’ve never really ‘got’ Sandboxes and change sets.

  • Confession #276

    1:1 Relationship established between Territories and Roles. Ehhhhhhhhh!

  • Confession #275

    I created a custom object for Projects. One of the key users wanted a field for “Contacts” related to the project. I told him we could use a lookup field to get the contact information from “Contacts” object or related lists if more than one contact was related to a project record. He said it was too complicated and instead asked me to create text fields for “Name” and “Title” inside the Project custom object. And this is not the end! He did not know how many Contacts could be related to a project, so he wanted text fields for “Contact 1”, “Contact 2”, “Contact 3”, “Title 1”, “Title 2” and “Title 3”. After weeks trying to explain him that did not make any sense, I finally………… gave up, did what he asked for and started looking for another job.

  • Confession #274

    117 API integrations without a middleware!!

  • Confession #273

    We cannot extend the Case object any further, limit of spanning relationships reached….

  • Confession #272

    The milestones limit for each entitlement process is 10, but our team want 250 milestones.

  • Confession #271

    All work is managed at a micro level using tasks and subtasks with automation to auto create even more tasks so it is just such a hot mess.

  • Confession #270

    Managers want to see reports and dashboards about various data, but the users don’t want to fill in all the data. So managers say, “We can’t use this as it is!”. Well…

  • Confession #269

    I once ran an import where I accidentally incremented a column in Excel instead of copying. It resulted in Opportunity Sales Process Stage Names of “Prospecting – 1” through “Prospecting – 5000”.

  • Confession #268

    I found one of the System Admins had given out his username and password to lots of people so that they could add their own fields and fix stuff!!!!

  • Confession #267

    I add things via the Sandbox but delete things directly in Production.

  • Confession #266

    My previous supervisor did the “Get Started with the Salesforce Platform” module inside our Production Org. I still have nightmares about trying to get rid of the DreamHouse app.

  • Confession #265

    “It’s not my job to click through all these screens,” said user. I wanted to say “It’s not my job to make your life easier.” And then I realized yeah, that’s my job.

  • Confession #264

    I sometimes take phone meetings from bed.

  • Confession #263

    We are going to be Classic forever!

  • Confession #262

    My president wants me to build Org so he can see everything whenever he wants without making a single click.

  • Confession #261

    I Google for formulas because I will never understand how to write them.

  • Confession #260

    Org only has 18 users, but each of them has a custom profile.

  • Confession #259

    Org has 10 profiles. All clones of the Admin one.

  • Confession #258

    Upon leaving my company they asked me to train someone from billing on how to be an Admin. She had 3 hours worth of training with me and asked to stop early because she already knew everything. After a year the company paid for her to take the ADM201 class & got certified. However, she doesn’t know the navigation bar can be customized or how to build a Opportunity report with Products…. She gets employee of the month often.

  • Confession #257

    I have no developers and no backup admins! I have minimal documentation because the requests never stop and they’re rarely prioritized. Someone from each department will drop by and push their projects to get to the top of the list.

  • Confession #256

    SI was kicked out of the project but the PM and 2 of his cohorts came back into the building after they were kicked out to try fix all the mistakes of the implementation. When the client PM found out she had security throw them out…Hilarious..

  • Confession #255

    We acquired a company that also had salesforce. Their admin left immediately after the acquisition so now I’m managing both orgs and working on merging them. Because both teams can’t decide on what to call fields and it ends in an argument, we have duplicate fields for each team. I do not feel empowered to make decisions in this instance so I’m creating a mess for the next person. I did however create a generic admin user so no one will ever know it was me creating this mess. I’m actively looking for another job.

  • Confession #254

    Open Opportunities with expired PRIMARY quotes created over 5 years ago.

  • Confession #253

    Very well known and large SI partner charging senior rates and putting junior people in projects… leading to predictably bad implementations with hardcoded IDs, no naming conventions and multiple PBW and Triggers on the same object.

  • Confession #252

    Client was very worried about bounce back emails when sending an email through Salesforce. “Well how many bounce back emails do you get?” “30 a day.” They did not like my suggestion that Salesforce was a powerful tool, but their call center needed to write down emails CORRECTLY.

  • Confession #251

    Spent 15 months cleaning up a poor implementation that started about 8 months before I did. Partner is consistently featured by Salesforce at events and I want to scream “Don’t use them. They implemented in Classic and created VF pages using Lightning design system instead of actual Lightning. And instead of using settings they hardcoded tons of id’s :(“

  • Confession #250

    A new client has 40+ custom Opportunity fields used to report on the forecast, instead of using Forecasts.

  • Confession #249

    I joined my company 1 year after they implemented Salesforce. Before me, they had 4 different consulting teams working on different pieces without any communication. 2 years later and I’m still cleaning it up.

  • Confession #248

    Consultant did not know how to create Community Sharing Sets, so instead they created External Sharing as Private, then created a Manual Sharing Rule to share ALL Accounts owned by ALL Internal Users with ALL Partner Community Users as Read/Write…horribly bad practices…thought they were being sharp by creating a “My Accounts” VF Page and making it the Community Default, but forgot to check the visibility and Sharing Settings of the All Accounts List View…found out when one of the Partners confessed they could see everyone else’s Account, Opptys, Contacts and Cases.

  • Confession #247

    User mentioned to me that they could now delete the (customer service) Case. I said “Huh?” and he explained that he deleted the Cases when completed, to have a tidy case log. Just like he deletes emails from his inbox when they’ve been dealt with. So well intentioned, but noooo(!) “Ah, so that’s what the Case Closed status is for!” he said afterwards.

  • Confession #246

    My users want to reopen closed won opportunities ALL THE TIME and don’t understand why this is a bad idea. We also ‘refund’ closed won opportunities from years ago if we never got paid…

  • Confession #245

    Found a user account created to own Accounts and Contacts to identify them as Terminated. It was the name of an actual user. They didn’t even fake out the name to “terminated” or any way to know what the user account was actually being used for. I deactivated the user and created a status picklist, then cleaned up the records.

  • Confession #244

    We have a new sales exec at my company telling me we should consider having non-closed won opportunities without accounts and then when the opportunity is closed won then we create an account.

  • Confession #243

    On a custom object there’s a button that “Logs the Request” it updates 3 fields (Record_Locked__c, Status__c and TimeStamp__c). The object has an approval process. But that button doesn’t submit the record to the process. Users still don’t understand why their request hasn’t been approved yet (years later on some of these records).

  • Confession #242

    Upon turning in my two weeks notice at my previous company, the CEO decided he had the time to be the Salesforce System Admin (admittedly he did). Turned him onto Trailhead and his response, “That’s too much reading”.
    Next to last day at the job, “Hey did you know Salesforce send reports to people” My reply, “Uh yeah, those are the automated reports you and everyone in production gets on a weekly basis…” “Oh I create an email filter to send those into a folder a couple of years ago”

  • Confession #241

    They built a custom lead object as the Admin didn’t know that a concept called record types with page-layouts was available out of the box and were trying to implement web to lead on this custom object.

  • Confession #240

    Org that had 925 Profiles.

  • Confession #239

    I had a client with 600 custom fields on Account. About 30 of them were contact info fields for up to 5 contacts (like contact first name 1, contact last name 1, contact email 1…times 5) and then my favorite was the account type was “lead” “account” “opportunity” “lost opportunity” Instead of using Leads or Opportunities, they just tracked it all on the Account. Oh and let’s not forget all the date fields for like activated date, activated month, activated year, activated quarter.

  • Confession #238

    800 fields on the Lead object to capture multiple people, deals, campaigns & no records on any other object.

  • Confession #237

    After cleaning up needlessly convoluted vendor work, I’ve realized that 1) vendors give 0% about maintenance, and 2) code not clicks is the easiest and fastest way to build automation.

  • Confession #236

    Public read write for everyone on everything in a 400 user org.

  • Confession #235

    When a Salesforce user tells me that she clones the Contact each time she needs to log a call, because she doesn’t know how to use the native “Log A Call” feature.

  • Confession #234

    I keep putting bandaids in our automation-workflows that separate triggers and process builders, triggering process builders through Dataloader. Mainly because nobody can agree that 20 Process Builders on one object, code from 2015, and 200 workflows is not sustainable.

  • Confession #233

    One of my super users can’t access a feature she needs. I’m super busy, and do a ‘quick fix’ and give her the Sys Admin profile. Problem temporarily solved…But wait, she’s a Trailhead enthusiast studying to be an admin. She has accidentally been downloading Trailhead data and applications into production. Ahhhhh jeez.

  • Confession #232

    Working with a client using Case object to the MAX… Nearly 100,000 records, 650+ fields, 30+ record types, 80+ page layouts with 30+ buttons. Lots of automation; 70+ validation rules, 100+ workflow rules, 15+ support processes and 20+ Process Builder Workflows. And over 450 list views.

  • Confession #231

    People refuse to do changes anywhere but in production, since there “is no real test data”.

  • Confession #230

    Formula field “Today__c” exists on various objects. The formula is simply “TODAY()”

  • Confession #229

    Client “switched” consultants (aka fired us) when we refused to rebuild GA functionality so that they could avoid license fees. We told the client they would be in violation of their Salesforce MSA and so would we if we built the app. We never heard from them again . . .

  • Confession #228

    Installed a beta managed package over the top of an existing (highly customized) package install in a sandbox. With no upgrade path to a new package version and weeks of work to remove the dependencies, the sandbox needed to be abandoned and a new one created.

  • Confession #227

    150+ case record types. 80+ Opportunity record types. Max Apex limit increased to 12 million characters.

  • Confession #226

    250k+ Contacts related to same Account. It takes approx. 1 minute for the Account to load and 3 minutes to merge Contacts. Plus, reports are very slow.

  • Confession #225

    All Contacts in linked to a single Account called “Contacts”

  • Confession #224

    To increase Apex code coverage of classes built by 5 junior devs (that hadn’t been reviewed by mistake), I had to create fake methods with thousands of lines with “a = 1;”

  • Confession #223

    Stumbled on an object with 2 checkbox fields: Has_contract_yes__c and Has_contract_no__c

  • Confession #222

    Changed an API name of a field and made a mess.

  • Confession #221

    Made unnecessary long Apex classes to pass code coverage requirements. I’m sorry.

  • Confession #220

    Previous admin must have hated formula fields. We had 20 fields with a batch job to replicate each field onto 1 million+ related records.

  • Confession #219

    I inherited an org with over 12,000 duplicate contact records. Seems we used to have volunteers doing our data entry.

  • Confession #218

    I inherited the “simple” org with 39 different record types, and 290 Lead routing rules for Call Center with about 350 active agents, almost rule per agent.

  • Confession #217

    Was asked to create a new lead queue and “give everyone access to it”. Created the queue and added all users to it. Suddenly 400+ users are being notified that leads are being reassigned to this newly created queue – over 150 records before a panicked phone call over a weekend got the notifications turned off.

  • Confession #216

    All managers insist on having a password that never expires.

  • Confession #215

    One of our developers linked their Trailhead SFDX work to our Production org.

  • Confession #214

    I inherited an Org with 16 Opportunity record types and 16 page layouts to support 2 sales processes.

  • Confession #213

    97.3% of all email to case records created daily are from spam. This has been happening for the last 18 months.

  • Confession #212

    Former CMO insisted on a 3 level lead source dependent picklists process with 200 options to select from in each picklist. 8 MILLION source options…

  • Confession #211

    After cloning off a Full Copy sandbox, I extracted all of the Contact emails to mask with a fake address. And then ran the update in Production instead of the Sandbox. I caught it and it was an easy fix from the source file, but I am reminded of the gaff every time I see field history on the Contact record.

  • Confession #210

    I once worked on an org with 18 users and each had a custom profile.

  • Confession #209

    I can’t use change sets half the time because the original team that set up the org messed things up so badly that the standard tests fail for the smallest field update.

  • Confession #208

    The org had around 60 roles named according to the sales team managers. There roles like were “Tom’s Team”, “John’s team”… and only 4 of them actually had users assigned. Management explained to me that when one sales manager leaves, they hire a new one, get Salesforce consultant to create a new role with new manager’s name, reassign users and leave the old role empty.

  • Confession #207

    Former accidentals admins would test in production and now there are 782 custom fields on the Account object. I should have looked at the org before accepting the job.

  • Confession #206

    I’m a new Admin and I just found out that org I will support has 3500 Apex classes. I can’t open the list of all classes in Salesforce Setup because the page times out. I can’t open the dev console at all because page times out. I don’t have any ideas how Enterprise org with 30 users ended up having such a high number of Apex classes.

  • Confession #205

    Former “Acting Admin” had no idea what they were doing. Would give it a whirl and then submit a case to Premier Support.

  • Confession #204

    Inherited an org where multiple partners spent several years doing ‘daily admin’. Some used Dutch or French for field labels and English for the API-names. Others did the opposite. Someone played around with translation workbench and changed standard labels. Documentation is nowhere to be found …

  • Confession #203

    My favorite was when I went into Prod one day and went “wtf is Dreamhouse?!” before realizing what happened.

  • Confession #202

    I change everything in production because I’m an awful human being.

  • Confession #201

    Users doing a Trailhead course and started installing apps in our prod org vs their own playground.

  • Confession #200

    Hired an Admin who claimed he had 6 years of international experience to assist my work; fired him because of 2 pages of red flags in a month; the guy might have only 6 weeks of training from India.

  • Confession #199

    Org with 350 users migrated to Lightning using an SI. Company got the cheapest option possible and ended up with a “lift and shift”. All the issues we had in Classic are now amplified 10x and half the stuff we had working in Classic don’t work in Lightning.

  • Confession #198

    35 users logging in with shared username/password that had System Admin access.

  • Confession #197

    I once had to teach a Senior Admin not to build things in production, and how to use a sandbox and change sets.

  • Confession #196

    Community cloud was so much customized that to refresh the org and to get it back running takes 1 entire week.

  • Confession #195

    Spent a whole week building Reports and Dashboards for an old company and was then told to export all the data into Excel and prepare a 20 Page PowerPoint with the exact same information! Needless to say I didn’t last long there.

  • Confession #194

    The Data ‘Expert’ cleansed the data and re-added as 20% was correct and that was good enough.

  • Confession #193

    As a new admin, my CFO at the time didn’t listen when me and my dev coworker advised we use the private sharing model before deploying a User Community for the customers. When a customer asked why they could see private information on employee’s users, that same CFO then approved 6 months of audit logging at 10s of thousands of dollars and 3 months of lost dev and admin time as we combed through the logs to make sure there wasn’t an exploit of the discovered “data breach” …. we turned on private sharing after that.

     

  • Confession #192

    Started learning and working as a Salesforce Admin in a small company. The current Admin said he used a separate spreadsheet for the sales data. Upon investigation found out there were no customized fields on Opportunities to record said information. Added 10 fields and no more separate spreadsheet!

  • Confession #191

    When I was first learning Salesforce, I thought sObjects stood for Standard objects and assumed there was a cObject for Custom Objects.

  • Confession #190

    Previously came across a new admin at #SalesforceSaturday completing their Trailhead on their company org. Definitely had a serious conversation with that person.

  • Confession #189

    Can no longer upload CSV updates to Pardot because Prospect ID is a 9 digit number. So are Canadian Social Security numbers. So, naturally, our company Infosec blocks upload of any files containing any 9 digit numbers…

  • Confession #188

    A former colleague was given the task of removing erroneous data from a client’s Production org. Once the bad records were identified, rather than deleting, they flagged them for removal by renaming them all “Nuke ’em”…in production…in a client’s instance. The client thought they were hacked and lost all their data. This happened late on a Friday afternoon. That led to a fun weekend activity for me and my team.

  • Confession #187

    Our Salesforce “owner” turned on Lightning for several teams with absolutely no communications to the users.

  • Confession #186

    10 year old Org. Admin didn’t know how customize nav bar. So they went in for each user and customized their tabs.

  • Confession #185

    “You’re an Admin in our Org.”
    “Am I?”

  • Confession #184

    Field name were changed when a field was deprecated by adding _DEL. Sometimes it was deprecated and then brought back and deprecated again so it had _DEL_DEL in the name.

  • Confession #183

    The app was used by an Asian offshore team who didn’t speak any English. But all the field labels and help was in English, so the data quality was a disaster.

  • Confession #182

    Dutch company with offices in 10 African countries, who never talked to each other. They all wanted to run in their own language and data was a mess.

  • Confession #181

    We consolidated 7 Orgs into 1 by simply adding everything into 1 Org. Now we are trying to understand how this impossibly complex Org with many, many duplicated field names works.

  • Confession #180

    Org is so messed up we cannot run tests unless you make them so specific to make sure that they only touch certain classes in Apex.

  • Confession #179

    A lot of fields were created by someone who couldn’t spell. Fixed the labels, but the API names are used by integrations and code and will never be fixed.  So everyone in the company talks about “customer tupes” not “customer types”.

  • Confession #178

    Creating a lead page layout for a customer that contained over 500 fields and layering in validation rules to enforce conditionally required fields based on business rules.

  • Confession #177

    Brand new Admin. Accidentally deleted 3 million records, so spent all weekend re-importing them before anyone noticed.

  • Confession #176

    We have over 10,000 custom objects, so many apps will not run in our Org. I have been given the job of cleaning it up.

  • Confession #175

    290+ users, 40+ profiles, and 200+ roles.

  • Confession #174

    Regular orders, replacement orders, and missed part orders all pushed into salesforce. Only one record type exists….

  • Confession #173

    Inherited an org where input validation for a single object was buried inside multiple Apex classes instead of using validation rules 🙁

  • Confession #172

    47 user profiles for approximately 150 users

  • Confession #171

    “We want a custom object that does everything Opportunities does”
    “Why not just create another record type for opportunities?”
    “SORCERY!!”

  • Confession #170

    Opportunity object re-purposed and utilized as if it was a custom object.

  • Confession #169

    User did the MyDomain Trailhead in Production. So our Prod login was changed to kittiesarecute.my.salesforce.com It took a tech call escalated to Salesforce Tier 3 support to undo.

  • Confession #168

    26 multi-select pick list fields on Accounts.

  • Confession #167

    Flows that run instead of validation rules to correct data errors.

  • Confession #166

    Multiple users for the same person in the same Org.

  • Confession #165

    Field names that mean different things based on how it is used.

  • Confession #164

    Sandbox not updated 10 years.

  • Confession #163

    Multiple PBW on the same object.

  • Confession #162

    I inherited an org where pretty much everyone was given system admin access.

  • Confession #161

    Duplicating Account team members just to make case routing work with GainSight.

  • Confession #160

    Creating a set of custom text fields for the account address instead of using native ones.

  • Confession #159

    Our best customer in Production is “Testy McTesterson”. We have to add filters to every report to exclude their records.

  • Confession #158

    Inherited an org with a public group for pretty much each user vs. using role hierarchy in sharing rules and report folders

  • Confession #157

    Tracking financial information on a record and with a set of fields created for each year

  • Confession #156

    Spent our entire first year with Salesforce entering real-time data into our Full Sandbox instead of Production. Now we can’t refresh because we might lose something important.

  • Confession #155

    Had a problem with a CPQ cpq field not working. Submitted a case went all the way to the executive level to find out I was missing an underscore in __c. So embarrassing.

  • Confession #154

    At my first admin job they wanted an email alert setup when any opportunity was closed/won. I then had to do a mass update of 20,000 old opportunities to update a field. I forgot to turn off the workflow rule. Crashed our email server sending 20k+ emails out to 10 people.

  • Confession #153

    Just joined company. The Org is 8 years old and I am the first full time Admin.

  • Confession #152

    A managed package that used Translation workbench to swap the labels on two fields so they are now the opposites of their API names.

  • Confession #151

    1 process includes 18 PBW, 2 flows, 12 workflow rules, 30 custom formula fields. Plus maybe some code. No one knows how or why it exists.

  • Confession #150

    Created a custom fields for every standard field because admin couldn’t see them in searches.

  • Confession #149

    Renamed every metadata API name to the business unit that needed it. The developers needed to access lookup sheet to be able to decipher.

  • Confession #148

    Process consolidation – 16 PBW on a single object and each PPW has single action and criteria.

  • Confession #147

    Multiple fields with same label.

  • Confession #146

    We track everything in spreadsheets not Salesforce. Why? No idea. I don’t have a good answer and I’m an MVP!

  • Confession #145

    We have OCD (Org Complexity Disorder).

  • Confession #144

    Law firm created a Case record type for every case they tried. We got the call when they maxed out their Case Record Type at 300.

  • Confession #143

    Customer sold 10 products. They put a checkbox on the Account record for each product and company. Every time they sold to a new company – they added those 10 checkboxes to the Account record for the new company. We got the call when they reached their 500th field on the Account record.

  • Confession #142

    Customer used workflows and triggers to create tasks for their service representatives. After 3 months they had maxed out their storage. We had to explain that there was no way that 25 service reps could clear the 450,000 tasks that had been created for them.

  • Confession #141

    Renamed Opportunity object to Donations, but users couldn’t cope with concept so had to change it back.

  • Confession #140

    Made to implement 50 unique compliance checkboxes and then an action to check them all as True in one go.

  • Confession #139

    Consultant created custom object called Opportunity, but report builder displays name not API, so we could not determine between custom and standard Opportunity object.

  • Confession #138

    So much customization with external interfaces it takes weeks to create a new Sandbox.

  • Confession #137

    We consolidated Orgs and an object for one business unit had 800 fields all visible in one page layout and the page kept scrolling and scrolling like a CVS receipt.

  • Confession #136

    Org 62.

  • Confession #135

    29 users in the Org had 6.6m archived tasks. Data storage cost was $15,000 so instead I took 14 hours report on the IDs and export. They were hours I will never get back.

  • Confession #134

    Checkbox on Account “Is not active”. Default was false.

  • Confession #133

    Pairs of fields on an object. One field is a checkbox and other is date completed. 200 pairs of fields.

  • Confession #132

    400 custom fields of which 390 were 30 groups of 13 questions.

  • Confession #131

    Opportunity object with 360 fields, 60 validation rules, 0 record types and just 1 page layout.

  • Confession #130

    27 System Admins – 29 users.

  • Confession #129

    We installed a managed package that added a currency field onto every standard AND custom object.

  • Confession #128

    That’s a big Org…. 1,058 Custom Objects, 14,108 Apex Classes, 47 Managed Packages, 896 Permission Sets, 2,269 VF Pages and 446 Lightning Pages.

  • Confession #127

    We have an Org with 2 custom objects – Contact and Report.

  • Confession #126

    We have problems regularly with troubleshooting and regression testing Process Builders to the point that we’re telling business users we can’t make updates to automation because the time commitment for regression testing even basic updates is huge.

  • Confession #125

    I inherited an org which had the sales team using a custom object for Leads… because another team was already using Leads to track their opportunities. Because obviously two teams couldn’t use the same object for similar purposes… I blew their minds with record types!

  • Confession #124

    The company service team started storing employee ID’s in the same field as the employee name. Talk about data integrity, and a massive export for clean-up.

  • Confession #123

    We have a custom object called ‘abc’.

  • Confession #122

    Somehow, a business user had System Administrator as profile. We noticed when that person installed dreamhouse application in Production environment using Trailhead!!

  • Confession #121

    A Solo Admin has developed the Org for the last 8 years. They have just left but there is no documentation on any of the changes. So now the new team of 3 people is trying to work out what was done and why.

  • Confession #120

    One of my clients directly changes Fields, Workflows, PBW, Approvals, Formulas in Production and they are careful in Full Sandbox. Developers are confused which is the real production org: is it Production or Full Sandbox?

  • Confession #119

    We have 2 Product objects and nobody knows what the differences are.

  • Confession #118

    One of our team – NOT a System Admin – is able to use the Data Import Wizard but cannot see the results file. So they are able to create havoc, but not see what they have done.

  • Confession #117

    Three fields on the same object with the same label. Even better, the Process Builder on the object references all three… except you can’t see which field is which because API name isn’t visible in PB.

  • Confession #116

    We can’t add documentation to a Process Builder Workflow because each PBW does not have a unique URL in setup. Doh!!!

  • Confession #115

    Dev team wanted to put all regional account record details into a single account, with each region having its own section.

  • Confession #114

    We can’t move to Lightning because our Dev Team refuses to learn Javascript to write the Lightning components we need.

  • Confession #113

    It is easier to create and customize a new Org than get approval to add functionality to our existing Org because it is so bloated.

  • Confession #112

    In our clean up exercise we have just deleted 178 objects. Yay!!! But how did we have that many that could be deleted?

  • Confession #111

    Making changes to launch our Service Cloud and Community in production because I can’t 100% deploy both using metadata.

  • Confession #110

    Case Sharing Setting is “Public Read/Write” and there are many Sharing Rules which are supposed to restrict the case records to different teams.

  • Confession #109

    Deleted a field, but only discovered months later when end of year processing integration ran.

  • Confession #108

    Preparing a demo, I set Deliverability to ‘no e-mail’. Result: not getting a verification code to log back in to the Org. A once-in-a-lifetime mistake!

  • Confession #107

    24 Process Builder Workflow on the same object, some of them with Active Version not being the Latest Version, plus some Workflow Rules thrown in just to keep it interesting. Then some dependencies on the Condition Criteria on those Process Builder Workflow without any way of controlling the order of operation.

  • Confession #106

    Hardcoded Record Type IDs in Apex that don’t correlate to anything? If it passed testing, it must have been ready to deploy!

  • Confession #105

    For a large telecommunications business I was asked to add a checkbox to a page, then make it required.

  • Confession #104

    Every standard object recreated as custom objects because 2 different groups were using Salesforce. When I started I was given 2 logins for the same org because nobody understood security. THEN instead of moving opportunity owners when a sales person left, they just typed over the name instead of inactivating users. Audit trails are apparently not necessary in insurance.

  • Confession #103

    Uneditable closed opps.

  • Confession #102

    No process for auditing fields before creating new fields so many duplicated fields and multiple conflicting triggers.

  • Confession #101

    All the object names were stored in code as variables a, b, c, d, e with no commenting. So impossible to read or debug.

  • Confession #100

    10 competitor fields on the Opportunity object.

  • Confession #99

    Maxed out field validations, so validations were triggering other validations. It was easier to not enter any data.

  • Confession #98

    Replaced every standard page with a VF page.

  • Confession #97

    Page layouts with 500 fields and page takes ages to load.

  • Confession #96

    9 Triggers on Lead Insert.

  • Confession #95

    Couldn’t run any report because it always times out. Too many records – 90% of the data is garbage.

  • Confession #94

    Inadvertently commenting code during Prod deploy.

  • Confession #93

    Found this code in project –
    for(i=0;i<1;i++)
    system.debug(‘<>’);

  • Confession #92

    30min trying to fix a formula (NULL v. 0, blanks as blanks v. blanks as 0s, etc.). No documentation so discovered I was referencing the wrong field….

  • Confession #91

    When you discover work done with code that could’ve easily been done with declarative tools.

  • Confession #90

    Opportunity object has “Qualified Date” and “Date Qualified” fields

  • Confession #89

    User: I don’t want to have to look at anything or click any buttons or do anything. I just want everything to be served up to me in an email everyday.

  • Confession #88

    No naming conventions, the field names (API) don’t make sense and don’t match the field values. Cleaning up page layouts is a nightmare.

  • Confession #87

    No role hierarchy implemented in complex HR app. New consultant came in and fixed the role hierarchy on Friday. Sunday morning call from CEO “Everybody’s salary is now visible”.

  • Confession #86

    Whether declarative or programmatic, it’s pretty easy to mess up a Salesforce org.

  • Confession #85

    Recreated standard system fields – such as Created By, Created Date/Time, etc – as custom fields.

  • Confession #84

    Request for a multi-select picklist with 98 values. When advised this was not the best practice and to rethink the need, they came back with a request for a picklist with 78 values.

  • Confession #83

    Question: “Can you send me an excel of this report?”
    Me: “Why?”
    Answer: “So I can add a graph to understand the data!”

  • Confession #82

    Users who can’t be bothered to learn the newest Salesforce instructions asking why they don’t have admin access and can’t see every field.

  • Confession #81

    Account object is set to private. Found a sharing rule that gives read/write access to everyone if the creator was any user…

  • Confession #80

    Salesforce is no longer our source of truth. It’s our source of duplication and despair!

  • Confession #79

    100+ Process Builder versions.

  • Confession #78

    Directors were told that setting up email-to-case is easy, it just needs to be turned on….

  • Confession #77

    Object with 2 fields “shoe size” and “size of shoe”. Why? Because couldn’t change field due to dependencies, so just created a new field.

  • Confession #76

    Custom developed project management app – core object maxed out fields.

  • Confession #75

    Regression test and UAT before CPQ go live. But clearly missed something as couldn’t do a system generated quote for 6 weeks. So had to manually create quotes. BTW quotes are 200 line items.

  • Confession #74

    40 lookup fields on the Product object.

  • Confession #73

    Validation rule firing on a field in a managed package which not visible because the managed package is expired.

  • Confession #72

    Duplicated Lead and Contact as custom objects.

  • Confession #71

    50 different records where they are lead and contact with the same name.

  • Confession #70

    3 Apps installed all with the same field name but cannot change field labels so super confusing especially as one App is not used but we cannot uninstall.

  • Confession #69

    Product object, 250+ quantity and 250+ price fields. But needed to write some Apex to query the record. CPQ on one record.

  • Confession #68

    3 million lines code, 100% was not necessary because it was an app that is not needed.

  • Confession #67

    Hard coded profile IDs in Apex Class.

  • Confession #66

    My report isn’t returning the results, because there wasn’t a role hierarchy. 

  • Confession #65

    We created a custom Opportunity object because we didn’t like the name “opportunity”  and now we can’t build a sales pipeline report easily.

  • Confession #64

    As we acquired companies and added their sales methodologies and opportunity stages… 30+ stages with overlap e.g. 7 different versions of “sales won” and 10 different versions of loss stages. And then how do I report on that.

  • Confession #63

    Hard coded vendor names in Apex Class.

  • Confession #62

    No code coverage – anywhere.

  • Confession #61

    3 custom Product objects with duplicated fields and no documentation…

  • Confession #60

    We only had 2 profiles; SysAdmin and Staff. But we discovered both had full Admin rights.

  • Confession #59

    We have 4 different source fields on the Lead object filled out by our marketing team.

  • Confession #58

    We’ve let sales people add fields and picklist values to solve their problems.

  • Confession #57

    Every day, users need to log into at least 4 different Orgs to get their job done.

  • Confession #56

    Multiple Orgs. They couldn’t work out what was configured so they start again, and again, and again. We see this a LOT in the nonprofit space.

  • Confession #55

    35 Users, 25 Profiles. Every custom field on every object starts with z_ . Different suppliers, created different fields for same purpose.

  • Confession #54

    Custom address fields on Contact and Lead objects.

  • Confession #53

    Using i++ to increase code coverage of test classes unethically.

  • Confession #52

    My Manager removed the ability to export reports. Without telling anybody. 2 days before month end reporting was due.

  • Confession #51

    Added 20 dummy classes (8000 lines code) and test classes to boost code coverage.

  • Confession #50

    A single apex class with 13,000 lines of code!

  • Confession #49

    Written and Modified Lightning Flows, Processes, and Validation Rules, in Production.

  • Confession #48

    Lead Source values maxed out with 1,000 entries.

  • Confession #47

    44,000+ reports…

  • Confession #46

    30 profiles, 5 had the same name with a year marked at the end. Example = account manager 2015, account manager 2016. Not sure why? No documentation on what was different.

  • Confession #45

    Date of first meeting being stored on Lead and Lead Stage being processed on Task.

  • Confession #44

    Two custom fields on Lead – “Converted Date” and “Date Converted”.

  • Confession #43

    200 Apex Classes. 50 tests failing in production. The other ones are fake tests with no assertions.

  • Confession #42

    Our Org was taken over by keen developers who automated everything and now we have “the world’s best self driving car… with no wheels”.

  • Confession #41

    2500 permission sets.

  • Confession #40

    UAT Sandbox not refreshed in 15 months.

  • Confession #39

    Hard coded user names in Apex classes.

  • Confession #38

    1000 users but 5000 roles.

  • Confession #37

    Core Opportunity object and then 2 extra custom objects for more fields.

  • Confession #36

    Took all custom fields off standard objects and put them on a single custom object.

  • Confession #35

    Everything was coded in Apex by consultants who didn’t understand core Salesforce features. 3 million lines of code!! Every field was referenced so none could ever be deleted.

  • Confession #34

    Inherited 6 year old Org and discovered Field History had never been switched on.

  • Confession #33

    12 triggers on the Case object. Sigh.

  • Confession #32

    1,500 lines of j++ intended to inflate test coverage.

  • Confession #31

    Inside sales couldn’t work out how to convert lead so printed it out and left on the desk of the sales person.

  • Confession #30

    Another scary Org: over 600 objects, 24,000 reports & 1200 dashboards.

  • Confession #29

    User could not access an opp. Asked them to send the URL of the record. They printed out the opp, scanned it and sent it as an email. Bless their heart.

  • Confession #28

    Someone had referenced all the Test 1, Test 2, Test 3 account names to be ignored in their code. Yikes!

  • Confession #27

    Every object had a custom field for last modified date/time.

  • Confession #26

    Every user is a system administrator.

  • Confession #25

    All business process and data for a 40-user company was on the same standard object.

  • Confession #24

    Profile for every user.

  • Confession #23

    Thousands of private reports for inactive users.

  • Confession #22

    Inherited Org. Every user had Admin rights.

  • Confession #21

    Managed packaged installs 209 objects, 79 tabs, 351 Visualforce pages, 160 apex triggers and 3126 apex classes into your org.

  • Confession #20

    Replicated Siebel CRM using all custom objects.

  • Confession #19

    700 fields and 280 are formula fields on one object.

  • Confession #18

    Our Development team built a trigger that lets an external system synchronize the account address to their contact addresses and validates with an error message if any user tries to update the contact addresses. After deploying it to the Production environment, users could not create contacts anymore.

    We spent time analyzing what was going on and found out there were workflows overlapping the trigger in the way that any user can update the contact addresses through the respective account. Workflows were given every time a Contact record is created or updated.

  • Confession #17

    738 Apex triggers developed over last 8 years by external consultants. No documentation.

  • Confession #16

    Case object maxed out at 800 fields with 54 record types.

  • Confession #15

    We found people who are doing Trailhead modules inside our Production Org.

  • Confession #14

    We have 271 Permission Sets, 100s of public groups used in sharing rules and 103(ish) profiles.

  • Confession #13

    Consolidating 2 small Orgs after an acquisition took 8 people 4 months. 

  • Confession #12

    464 fields (all used) and 14 stages on Opportunity object but the page goes on forever and takes minutes to load.

  • Confession #11

    15,000 reports. No comment.

  • Confession #10

    Contact object maxed out with 800 fields when trying to consolidate 5 orgs. So we have no idea how to consolidate without duplicating an object.

  • Confession #9

    Over 100 picklist values on a field but we have no idea which ones are used so we can’t delete any.

  • Confession #8

    We have run out of fields on the Opportunity object 5 times.

  • Confession #7

    We have 49,700 email templates. A bug in the managed package that integrated with a 3rd party marketing app (not Salesforce) created email templates every time it ran.

  • Confession #6

    We are trying to consolidate 55 Orgs. We have 4 business units but shared customers. So should we have 4 Orgs or 1? And how do we get there? 

  • Confession #5

    The audit to scope the clean-up work has taken 4 consultants 30 days. This 8-year-old Org doesn’t have a single line of documentation. 

  • Confession #4

    I learned we had 1,500,000 lines of undocumented Apex code.

  • Confession #3

    5372 Apex Classes and 55 Managed Packages, but I am not sure which we can delete.

  • Confession #2

    We have 15,000 reports with no sensible naming.

  • Confession #1

    We’ve maxed out our field limit on a Task. Let that just sink in for a minute.