<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gino Suarez</title>
    <description>The latest articles on DEV Community by Gino Suarez (@gino_suarez_58c991193a60c).</description>
    <link>https://dev.to/gino_suarez_58c991193a60c</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1549693%2Fb73a5244-1609-4f98-a080-43ae65c90985.png</url>
      <title>DEV Community: Gino Suarez</title>
      <link>https://dev.to/gino_suarez_58c991193a60c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gino_suarez_58c991193a60c"/>
    <language>en</language>
    <item>
      <title>Real-world Challenges of Team Development with Oracle APEX, SQLcl, and Liquibase: A Starting Point for Discussion</title>
      <dc:creator>Gino Suarez</dc:creator>
      <pubDate>Fri, 16 Jan 2026 21:02:27 +0000</pubDate>
      <link>https://dev.to/gino_suarez_58c991193a60c/real-world-challenges-of-team-development-with-oracle-apex-sqlcl-and-liquibase-a-starting-point-5e63</link>
      <guid>https://dev.to/gino_suarez_58c991193a60c/real-world-challenges-of-team-development-with-oracle-apex-sqlcl-and-liquibase-a-starting-point-5e63</guid>
      <description>&lt;p&gt;In modern CI/CD, the goal is simple: 1 Jira Ticket = 1 Pull Request. Every commit should be clean, isolated, and automated. However, when working with Oracle APEX and database objects in a team environment, achieving this "clean state" is anything but straightforward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Working Copies: Great for APEX, But...&lt;/strong&gt;&lt;br&gt;
The Approach: Use APEX's native "Working Copies" to branch the application metadata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "But":&lt;/strong&gt; Working Copies only isolate APEX components (pages, items, etc.). They still point to a shared parsing schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Result:&lt;/strong&gt; When you export your Working Copy, you might have clean APEX metadata, but your database export will still capture every other developer's changes in that shared schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Liquibase Automation: Great for Schemas, But...&lt;/strong&gt;&lt;br&gt;
The Approach: Use liquibase generate-schema -split to automate database object exports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "But":&lt;/strong&gt; In a shared schema (e.g., BO_SHARED), Liquibase captures the state of the entire schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Result:&lt;/strong&gt; If Developer A creates a table for Ticket 1, and Developer B creates a package for Ticket 2, Developer A’s export will automatically include Developer B’s work. Automation is defeated because the developer must then manually identify and git add only their specific files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Separate Schemas: Great for Isolation, But...&lt;/strong&gt;&lt;br&gt;
The Approach: Give every developer their own schema (DEV1, DEV2, DEV3) for true isolation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "But":&lt;/strong&gt; This breaks the APEX parsing connection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Result:&lt;/strong&gt; Developers cannot easily test their changes within the shared APEX application without first migrating those objects back to a master schema, creating a different kind of integration bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Git Filtering: Great for Precision, But...&lt;/strong&gt;&lt;br&gt;
The Approach: Use advanced Git techniques (interactive staging, cherry-picking, or rebasing) to filter out unrelated changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "But":&lt;/strong&gt; This places a massive manual overhead on the developer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Result:&lt;/strong&gt; We end up using Liquibase as a mere file generator rather than an automation tool. If a developer has to manually reset 48 out of 50 generated files, the "automation" has failed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Current Reality: Accepting the Trade-offs&lt;/strong&gt;&lt;br&gt;
We have concluded that no current approach provides 100% full automation for both APEX and Database objects in a shared environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our Current "Workaround":&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We accept Manual Selection as the "tax" we pay for using Working Copies.&lt;/p&gt;

&lt;p&gt;We rely on strong processes and checklists to reduce human error during that manual staging phase.&lt;/p&gt;

&lt;p&gt;We use Pre-Development Reviews to align on architecture, ensuring that even if the "push" is manual, the logic is sound.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let’s Discuss&lt;/strong&gt;&lt;br&gt;
Is there a way to achieve a truly automated, isolated 1-to-1 mapping of Jira tasks to PRs in APEX without separate schemas? Or is the "Manual Selection" bottleneck simply the price of doing business in a shared-database IDE?&lt;/p&gt;

&lt;p&gt;How is your team handling the shared schema bottleneck? I’m looking for feedback from anyone who has managed to automate this without the manual overhead.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>database</category>
      <category>devops</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
