<?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: Jose Abreu</title>
    <description>The latest articles on DEV Community by Jose Abreu (@jabreuaps).</description>
    <link>https://dev.to/jabreuaps</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4224242%2F87e7c5d8-bdb7-4655-af8f-03b916862f6f.jpg</url>
      <title>DEV Community: Jose Abreu</title>
      <link>https://dev.to/jabreuaps</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jabreuaps"/>
    <language>en</language>
    <item>
      <title>The More I Use AI to Code, the More Engineering Judgment Matters</title>
      <dc:creator>Jose Abreu</dc:creator>
      <pubDate>Tue, 03 Nov 2026 14:49:08 +0000</pubDate>
      <link>https://dev.to/jabreuaps/the-more-i-use-ai-to-code-the-more-engineering-judgment-matters-4flb</link>
      <guid>https://dev.to/jabreuaps/the-more-i-use-ai-to-code-the-more-engineering-judgment-matters-4flb</guid>
      <description>&lt;p&gt;AI is changing the pace at which I can explore ideas and build software.&lt;/p&gt;

&lt;p&gt;Working with PHP, APIs, databases, and data platforms, I see opportunities to use AI throughout development: understanding an unfamiliar part of a codebase, comparing approaches, working through an implementation, and finding questions I might otherwise overlook.&lt;/p&gt;

&lt;p&gt;Tools such as Junie, Codex, and Claude are part of that shift for me. There is real value in being able to move between an idea and a possible implementation more quickly.&lt;/p&gt;

&lt;p&gt;That increased capacity also changes where I need to focus my attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The more capable these tools become, the more carefully I need to apply my own engineering judgment.&lt;/strong&gt; I still need to understand the code, the business rules behind it, and the consequences of putting it into production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where “vibe coding” fits
&lt;/h2&gt;

&lt;p&gt;For me, the appeal of “vibe coding” is the short loop between describing an idea, seeing something take shape, and refining it.&lt;/p&gt;

&lt;p&gt;That can be useful for exploring an interface, trying a different approach, or getting an early prototype in front of you. It creates room to experiment.&lt;/p&gt;

&lt;p&gt;As that work moves toward something customers and colleagues will depend on, the questions become more demanding.&lt;/p&gt;

&lt;p&gt;How does it fit into the existing application? Which assumptions did the model make? What happens when the input is incomplete, access is denied, or a dependency fails? Can another developer understand and maintain the result?&lt;/p&gt;

&lt;p&gt;A successful demonstration is an encouraging milestone. Production software needs a deeper understanding of its behavior.&lt;/p&gt;

&lt;p&gt;For me, staying true to the craft means carrying that understanding through the entire process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Experience gives the partnership direction
&lt;/h2&gt;

&lt;p&gt;Years of development experience shape the questions we know to ask.&lt;/p&gt;

&lt;p&gt;When I look at a generated implementation, I need to consider more than whether the syntax looks familiar. I need to connect it to the system around it.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it implement the actual business rule?&lt;/li&gt;
&lt;li&gt;Does it preserve the meaning of existing data?&lt;/li&gt;
&lt;li&gt;Does it respect the application’s access rules?&lt;/li&gt;
&lt;li&gt;Will it behave reasonably with realistic data volumes?&lt;/li&gt;
&lt;li&gt;Does it handle errors in a way the rest of the application understands?&lt;/li&gt;
&lt;li&gt;Can I explain why this approach belongs in this codebase?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions are part of the value an experienced developer brings to AI-assisted work.&lt;/p&gt;

&lt;p&gt;GitHub’s &lt;a href="https://docs.github.com/en/copilot/responsible-use/inline-suggestions" rel="noopener noreferrer"&gt;responsible-use guidance for Copilot&lt;/a&gt; acknowledges that generated code can appear valid while being incorrect or failing to reflect the developer’s intent. It recommends reviewing and testing suggestions, including their security implications and fit within the application.&lt;/p&gt;

&lt;p&gt;My experience helps me give the tool better direction and recognize when an answer needs further investigation. It also reminds me to challenge my own assumptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Greater speed calls for more deliberate review
&lt;/h2&gt;

&lt;p&gt;When code arrives quickly, there is a temptation to review it at the same pace.&lt;/p&gt;

&lt;p&gt;That is where I think our attention to detail needs to become more refined.&lt;/p&gt;

&lt;p&gt;Consider a PHP search endpoint generated with AI assistance. It uses prepared statements and returns the expected results for a sample search.&lt;/p&gt;

&lt;p&gt;I would still want to inspect how the complete query is constructed.&lt;/p&gt;

&lt;p&gt;PHP’s &lt;a href="https://www.php.net/manual/en/pdo.prepare.php" rel="noopener noreferrer"&gt;PDO documentation&lt;/a&gt; explains that placeholders represent data values. They cannot represent column names, SQL keywords, or arbitrary parts of a query. If the endpoint lets a user choose a sort column or direction, I would use a fixed mapping of supported options and inspect how those options become SQL.&lt;/p&gt;

&lt;p&gt;I would also ask a separate question: &lt;strong&gt;Is this user allowed to see the records being returned?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A user being logged in does not establish permission to access every record. &lt;a href="https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html" rel="noopener noreferrer"&gt;OWASP’s authorization guidance&lt;/a&gt; distinguishes identity verification from access decisions and recommends checking permissions on every request, including access to the specific resource involved.&lt;/p&gt;

&lt;p&gt;This is the kind of detail that matters when reviewing an implementation. Query construction, access control, and business correctness each need attention.&lt;/p&gt;

&lt;p&gt;The same care applies to generated tests. I need to review what they establish. A test built around the same mistaken assumption as the implementation can pass while the requirement remains unmet.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a useful human–AI partnership looks like
&lt;/h2&gt;

&lt;p&gt;The partnership works best when I bring clear context and remain engaged throughout the work.&lt;/p&gt;

&lt;p&gt;The standard I want to maintain is straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Define the intended behavior.&lt;/strong&gt; Describe the requirement, important constraints, and what a correct result should look like.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provide relevant context.&lt;/strong&gt; Include the project’s PHP and framework versions, existing conventions, and the parts of the application the change touches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work in focused changes.&lt;/strong&gt; Keep each proposed change small enough to understand and review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examine the assumptions.&lt;/strong&gt; Ask why an approach was chosen and what could cause it to fail.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verify the result.&lt;/strong&gt; Inspect the actual changes and check meaningful behavior against the original requirement.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A useful instruction to an assistant might be:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Before changing this endpoint, explain its current behavior and the assumptions you are making. Use the versions declared by this project. Preserve the required access rules and response format. Propose a focused change and identify cases we should verify, including empty results, invalid input, and denied access.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That gives the collaboration a clearer purpose.&lt;/p&gt;

&lt;p&gt;AI can help propose implementations, explain alternatives, and identify possible gaps. I need to make the acceptance decision based on the code and its observed behavior.&lt;/p&gt;

&lt;p&gt;If I ship it, I need to be able to explain it, debug it, and maintain it.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP security remains part of the craft
&lt;/h2&gt;

&lt;p&gt;Keeping up with AI tools also means staying current with the technology underneath the application.&lt;/p&gt;

&lt;p&gt;For PHP work, that includes the runtime, extensions, framework, Composer dependencies, and our own application logic.&lt;/p&gt;

&lt;p&gt;As of &lt;strong&gt;November 3, 2026&lt;/strong&gt;, PHP 8.4 and 8.5 are in active support, while PHP 8.2 and 8.3 receive security fixes only. PHP 8.2 reaches the end of security support on &lt;strong&gt;December 31, 2026&lt;/strong&gt;. The official &lt;a href="https://www.php.net/supported-versions.php" rel="noopener noreferrer"&gt;PHP supported-versions page&lt;/a&gt; is a useful reference when planning maintenance and upgrades.&lt;/p&gt;

&lt;p&gt;Staying current means following security releases for a supported branch and assessing compatibility before moving an application forward. PHP’s &lt;a href="https://www.php.net/manual/en/migration85.php" rel="noopener noreferrer"&gt;8.5 migration guide&lt;/a&gt;, for example, calls out incompatibilities that should be tested before switching production environments.&lt;/p&gt;

&lt;p&gt;For a Composer-based project, two useful checks are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;composer audit &lt;span class="nt"&gt;--locked&lt;/span&gt;
composer check-platform-reqs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first audits the packages recorded in the lock file against known security advisories and other dependency policies. The second checks whether the actual PHP and extension versions satisfy the requirements of installed packages. Both are documented in the &lt;a href="https://getcomposer.org/doc/03-cli.md" rel="noopener noreferrer"&gt;Composer command reference&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;These checks answer specific questions. Application behavior, authorization, and business logic still need their own review and testing.&lt;/p&gt;

&lt;p&gt;An AI assistant can help interpret an advisory or work through a migration. I still need to verify the recommendation against current documentation and the application’s actual environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping up at a faster pace
&lt;/h2&gt;

&lt;p&gt;There is a growing amount to follow: AI tools, language releases, framework changes, database capabilities, and new development approaches.&lt;/p&gt;

&lt;p&gt;I want that learning to feed back into better engineering decisions.&lt;/p&gt;

&lt;p&gt;The learning process I want to keep strengthening has four parts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start with a real question.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
What am I trying to improve—understanding an older codebase, reviewing changes, reducing repetitive work, or solving a specific application problem? A clear question gives new tools something useful to prove.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use AI to accelerate understanding.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
An assistant can help me work through unfamiliar terminology, compare approaches, or identify questions to investigate. When a decision depends on a specific capability or behavior, I want to check the original documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try the idea on a manageable problem.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A small experiment gives me something concrete to inspect. I can judge the quality of the result, the effort needed to review it, and how well it fits the existing system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Carry useful lessons back into the work.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The knowledge becomes more valuable when it improves documentation, code reviews, shared conventions, or the next implementation.&lt;/p&gt;

&lt;p&gt;That is how I want to grow alongside these tools: remain curious, experiment deliberately, and keep strengthening the fundamentals that let me evaluate what I am seeing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The responsibility grows with the capability
&lt;/h2&gt;

&lt;p&gt;I am excited about what AI-assisted development makes possible.&lt;/p&gt;

&lt;p&gt;It gives experienced developers more room to explore ideas, work through difficult problems, and expand what we can accomplish. Making good use of that capacity requires active participation.&lt;/p&gt;

&lt;p&gt;Our judgment, technical understanding, and care for the finished result need to grow alongside the tools.&lt;/p&gt;

&lt;p&gt;For me, staying true to the craft means being able to stand behind the work—even when AI helped produce it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which parts of your development process have become more important as you have started using AI? Have you changed how you review code, test behavior, or keep up with security updates?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was drafted with AI assistance. Technical documentation is linked throughout.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Moving from MySQL to PostgreSQL: Building Flexible Search for the Next Phase of AI</title>
      <dc:creator>Jose Abreu</dc:creator>
      <pubDate>Tue, 03 Nov 2026 14:05:21 +0000</pubDate>
      <link>https://dev.to/jabreuaps/moving-from-mysql-to-postgresql-building-flexible-search-for-the-next-phase-of-ai-41k3</link>
      <guid>https://dev.to/jabreuaps/moving-from-mysql-to-postgresql-building-flexible-search-for-the-next-phase-of-ai-41k3</guid>
      <description>&lt;p&gt;I’ve spent a large part of my career working with PHP and MySQL, building applications, maintaining databases, developing APIs, and managing the processes that keep data platforms running.&lt;/p&gt;

&lt;p&gt;That experience has taught me to pay attention to the connection between database design and the experience a customer has on the screen.&lt;/p&gt;

&lt;p&gt;At AccuPoint Solutions, we’re transitioning from MySQL to PostgreSQL as we build the next phase of our intelligence platform. A major part of that work is supporting more flexible customer searches, more complex queries, and faster loading times.&lt;/p&gt;

&lt;p&gt;The migration is also giving me an opportunity to think more carefully about the database foundation we need for AI-assisted search.&lt;/p&gt;

&lt;p&gt;These are some of the capabilities and design questions that stand out to me as we move forward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A flexible search tool creates many different workloads&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A customer-facing search platform has to support a wide range of questions.&lt;/p&gt;

&lt;p&gt;One customer might begin with geography and professional credentials. Another might start with firm characteristics. Someone else might combine those conditions, exclude certain records, add a date range, and choose a different sort order.&lt;/p&gt;

&lt;p&gt;An illustrative search might be:&lt;/p&gt;

&lt;p&gt;Find professionals licensed in selected states, with a business email available, whose firms match a particular set of characteristics.&lt;/p&gt;

&lt;p&gt;That request can involve multiple tables, optional filters, inclusion and exclusion rules, sorting, and pagination.&lt;/p&gt;

&lt;p&gt;A small change in the customer’s criteria can produce a very different query.&lt;/p&gt;

&lt;p&gt;This is where the engineering challenge becomes interesting: how do we keep the experience responsive across the combinations customers actually use?&lt;/p&gt;

&lt;p&gt;I want to evaluate the searches that return a few records, the searches that match a large audience, and the more complicated combinations that are easy to overlook during development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The PostgreSQL capabilities that interest me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What attracts me to PostgreSQL is the range of tools available for matching the database design to different kinds of searches.&lt;/p&gt;

&lt;p&gt;Here are several areas I’m paying attention to:&lt;/p&gt;

&lt;p&gt;Search requirement&lt;/p&gt;

&lt;p&gt;PostgreSQL capability worth evaluating&lt;/p&gt;

&lt;p&gt;Customers combine several optional filters&lt;/p&gt;

&lt;p&gt;Bitmap index scans that can combine index results with AND and OR&lt;/p&gt;

&lt;p&gt;Searches repeatedly target a particular subset of records&lt;/p&gt;

&lt;p&gt;Partial indexes defined by a condition&lt;/p&gt;

&lt;p&gt;Customers search text in different ways&lt;/p&gt;

&lt;p&gt;Full-text search, GIN indexes, and the pg_trgm extension&lt;/p&gt;

&lt;p&gt;Some attributes are less uniform or change over time&lt;/p&gt;

&lt;p&gt;JSONB and its indexing options&lt;/p&gt;

&lt;p&gt;Multiple filters describe related attributes&lt;/p&gt;

&lt;p&gt;Extended statistics to help the planner understand certain column relationships&lt;/p&gt;

&lt;p&gt;MySQL has useful capabilities in these areas too. Its Index Merge optimization can combine index scans, and its functional indexes can index expression results.&lt;/p&gt;

&lt;p&gt;For me, the useful comparison is how each database handles our particular data, queries, and application requirements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Partial indexes offer a more targeted approach&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A PostgreSQL partial index includes only records that satisfy a defined condition.&lt;/p&gt;

&lt;p&gt;For example, here is an illustrative index for searches that repeatedly target active professionals:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CREATE INDEX professionals_active_state_name_idx&lt;br&gt;
ON professionals (state, last_name, id)&lt;br&gt;
WHERE is_active = true;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A compatible search could look like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT id, first_name, last_name&lt;br&gt;
FROM professionals&lt;br&gt;
WHERE is_active = true&lt;br&gt;
  AND state = 'NJ'&lt;br&gt;
ORDER BY last_name, id&lt;br&gt;
LIMIT 50;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This creates an index focused on the active subset. Its usefulness depends on that subset’s size, the query pattern, and the planner’s choices.&lt;/p&gt;

&lt;p&gt;The planner also needs to establish that the query satisfies the index condition. Parameterized predicates can complicate that recognition.&lt;/p&gt;

&lt;p&gt;For a configurable search builder, that makes the relationship between generated SQL and index design especially important.&lt;/p&gt;

&lt;p&gt;Reference: PostgreSQL partial indexes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Different text searches need different approaches&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A platform may need several kinds of text matching:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An exact identifier lookup.&lt;/li&gt;
&lt;li&gt;A search for words in a description.&lt;/li&gt;
&lt;li&gt;A partial firm name.&lt;/li&gt;
&lt;li&gt;A similarity search that can accommodate some spelling differences.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PostgreSQL provides full-text search, with GIN as its preferred index type for that workload. The pg_trgm extension provides another set of tools for text similarity and indexed pattern searches, including LIKE and ILIKE.&lt;/p&gt;

&lt;p&gt;Those tools address different matching requirements. A name search and a document search deserve their own relevance and performance checks.&lt;/p&gt;

&lt;p&gt;Trigram indexing also has limits: patterns without extractable trigrams can require a full-index scan. The actual search terms matter.&lt;/p&gt;

&lt;p&gt;MySQL also supports full-text search. The opportunity I see in PostgreSQL is having additional approaches to evaluate within the relational platform.&lt;/p&gt;

&lt;p&gt;References: PostgreSQL full-text indexes, pg_trgm, and MySQL full-text search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flexible attributes still need deliberate data modeling&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;JSONB is another PostgreSQL feature that interests me for evolving metadata or attributes that do not fit one uniform structure.&lt;/p&gt;

&lt;p&gt;PostgreSQL supports GIN indexing for several JSONB containment, existence, and path operations. MySQL also has a native JSON type and indexing approaches for extracted values and arrays.&lt;/p&gt;

&lt;p&gt;My preference is to keep core identifiers, relationships, and frequently searched fields clearly modeled, then use flexible structures where they solve a specific problem.&lt;/p&gt;

&lt;p&gt;The question is where each attribute belongs and how customers need to query it.&lt;/p&gt;

&lt;p&gt;References: PostgreSQL JSONB indexing and MySQL JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Query plans matter as much as the feature list&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Flexible search makes execution plans especially useful.&lt;/p&gt;

&lt;p&gt;In PostgreSQL, EXPLAIN (ANALYZE, BUFFERS) helps examine actual execution behavior, including row estimates, rows processed, and buffer activity. ANALYZE executes the query, so I would use it deliberately with representative searches.&lt;/p&gt;

&lt;p&gt;MySQL also provides EXPLAIN ANALYZE. The habit of inspecting execution plans carries across the migration.&lt;/p&gt;

&lt;p&gt;Some questions I want those plans to answer are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How much data is examined before the first results are returned?\&lt;/li&gt;
&lt;li&gt;Are row estimates reasonably close to the actual result?&lt;/li&gt;
&lt;li&gt;Which joins, filters, and sorts account for the work?&lt;/li&gt;
&lt;li&gt;Does a small change in the search criteria produce a significantly different plan?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are useful details to watch. PostgreSQL’s bitmap index combination loses the indexes’ original ordering, so a query may still need an additional sort.&lt;/p&gt;

&lt;p&gt;Related filters deserve attention too. Geography fields, for example, can be correlated. PostgreSQL’s extended statistics can help with certain relationships between columns, although they need to be chosen and maintained for the relevant workload.&lt;/p&gt;

&lt;p&gt;References: PostgreSQL EXPLAIN, combining indexes, planner statistics, and MySQL EXPLAIN.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Faster loading needs to be measured across the application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Customers experience the time between submitting a search and being able to use the results.&lt;/p&gt;

&lt;p&gt;That includes database execution, application processing, response size, network delivery, and browser rendering.&lt;/p&gt;

&lt;p&gt;For this migration, I want the evaluation to cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common searches and difficult combinations.&lt;/li&gt;
&lt;li&gt;Broad results and highly selective results.&lt;/li&gt;
&lt;li&gt;First-page results, pagination, and full exports.&lt;/li&gt;
&lt;li&gt;Exact result counts and any supporting queries.&lt;/li&gt;
&lt;li&gt;Multiple customers searching at the same time.&lt;/li&gt;
&lt;li&gt;Search performance while data updates are running.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A quick first-page query can still leave the customer waiting if the endpoint also performs an expensive count or loads unnecessary data.&lt;/p&gt;

&lt;p&gt;Pagination deserves its own design decisions. Cursor-based pagination is worth evaluating for next-page navigation with a stable sort order. Interfaces that require arbitrary page jumps have different requirements.&lt;/p&gt;

&lt;p&gt;I would also compare median and 95th-percentile response times under representative load. The slower end of the experience matters when customers can build many different searches.&lt;/p&gt;

&lt;p&gt;The goal is consistent, useful performance across the workload.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI direction makes a reliable search foundation more important&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As we build the next phase of the platform, I’m thinking about how customers can express what they want in more natural language.&lt;/p&gt;

&lt;p&gt;That increases the importance of a well-defined search model.&lt;/p&gt;

&lt;p&gt;A design principle I want to carry forward is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Interpret the customer’s request.&lt;/li&gt;
&lt;li&gt;Translate it into supported fields, operators, and values.&lt;/li&gt;
&lt;li&gt;Validate the search against the customer’s permissions.&lt;/li&gt;
&lt;li&gt;Build a parameterized query through the application’s search layer.&lt;/li&gt;
&lt;li&gt;Return results with criteria the customer can understand and refine.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This gives AI-assisted search a clear connection to the existing search experience.&lt;/p&gt;

&lt;p&gt;Semantic similarity is another possibility to evaluate. The optional pgvector extension adds vector similarity search to PostgreSQL, including exact search and approximate indexes such as HNSW and IVFFlat.&lt;/p&gt;

&lt;p&gt;Approximate search trades some recall for speed. Combining it with restrictive filters needs testing because filtering can reduce the number of qualifying results returned.&lt;/p&gt;

&lt;p&gt;For a business data platform, similarity still needs to work alongside exact criteria and access controls.&lt;/p&gt;

&lt;p&gt;Natural-language filter building and vector similarity solve different problems. I want to choose each based on the customer’s task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I want to learn from the migration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The move to PostgreSQL is an opportunity to review our query construction, indexing strategy, data model, and application behavior together.&lt;/p&gt;

&lt;p&gt;Result correctness is part of that work. Search behavior, sorting, case handling, dates, and null values all need careful validation across the transition.&lt;/p&gt;

&lt;p&gt;I also want to understand the operational tradeoffs: index storage, update costs, statistics maintenance, and how the platform behaves as the data changes.&lt;/p&gt;

&lt;p&gt;MySQL has been a substantial part of my engineering background. Working with PostgreSQL is expanding the set of approaches I can consider as our search requirements evolve.&lt;/p&gt;

&lt;p&gt;The outcome I’m working toward is a platform where customers can ask more varied questions, receive dependable results, and benefit from AI features built on a reliable data foundation.&lt;/p&gt;

&lt;p&gt;If you’ve migrated a platform with flexible customer searches, which changes made the biggest difference: the data model, indexes, query construction, or pagination?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>database</category>
      <category>mysql</category>
    </item>
    <item>
      <title>Hi, I’m Jose: Lessons from Building PHP Applications and Data Platforms</title>
      <dc:creator>Jose Abreu</dc:creator>
      <pubDate>Tue, 03 Nov 2026 12:59:13 +0000</pubDate>
      <link>https://dev.to/jabreuaps/hi-im-jose-lessons-from-building-php-applications-and-data-platforms-1lj6</link>
      <guid>https://dev.to/jabreuaps/hi-im-jose-lessons-from-building-php-applications-and-data-platforms-1lj6</guid>
      <description>&lt;h2&gt;
  
  
  Hi everyone, I’m Jose Abreu, Director of Engineering at AccuPoint Solutions.
&lt;/h2&gt;

&lt;p&gt;I’ve spent more than a decade working across PHP development, MySQL databases, APIs, automation, and the systems that keep business applications running. My work also involves Laravel, JavaScript, Python, Google Cloud, and, increasingly, AI-assisted development.&lt;/p&gt;

&lt;p&gt;I’m joining DEV to share practical lessons from that work and learn how other developers approach similar challenges.&lt;/p&gt;

&lt;p&gt;Here are a few principles I keep coming back to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand the workload before optimizing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Working with large datasets has made me pay close attention to how an application accesses its data.&lt;/p&gt;

&lt;p&gt;Before changing a slow query, I want to understand the filters, joins, indexes, and amount of data being processed. I also want to know how often the query runs and what the user actually needs from the result.&lt;/p&gt;

&lt;p&gt;My starting point is to examine the execution plan, check the results for correctness, and measure changes against a representative workload. Those habits are useful long before a database becomes especially large.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make automated processes easy to understand&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Data imports and background jobs deserve the same attention as the features users see.&lt;/p&gt;

&lt;p&gt;For a data update, I care about questions such as:&lt;/p&gt;

&lt;p&gt;Did the expected records arrive?&lt;/p&gt;

&lt;p&gt;Were invalid or duplicate records handled?&lt;/p&gt;

&lt;p&gt;Can I tell which step failed?&lt;/p&gt;

&lt;p&gt;Can the process recover without creating inconsistent data?&lt;/p&gt;

&lt;p&gt;Clear logging, validation, and recovery behavior make these systems much easier to maintain.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn the existing behavior before modernizing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maintaining established applications teaches you how much business knowledge can live inside code.&lt;/p&gt;

&lt;p&gt;Before changing a system, I want to understand the workflows people depend on, the integrations involved, and the assumptions behind its behavior.&lt;/p&gt;

&lt;p&gt;That understanding helps me choose useful, manageable improvements. It also gives me a better basis for checking that a modernization effort preserves the things users rely on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bring engineering judgment into AI-assisted development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’ve been using tools such as Claude, Codex, and PHPStorm Junie as part of my development work.&lt;/p&gt;

&lt;p&gt;I’m interested in how they can help with understanding code, exploring implementation options, refactoring, and application modernization.&lt;/p&gt;

&lt;p&gt;Review remains a central part of that process. I want to understand the generated code, check its assumptions, and verify how it behaves with real application requirements. Database access, permissions, error handling, and edge cases all deserve attention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I’d like to share here&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I plan to write about PHP and Laravel development, MySQL performance, data pipelines, API integrations, cloud applications, and practical uses of AI in development.&lt;/p&gt;

&lt;p&gt;I’m especially interested in the everyday decisions that make software easier to operate and maintain over time.&lt;/p&gt;

&lt;p&gt;What is one lesson from maintaining production applications that changed how you approach development?&lt;/p&gt;

</description>
      <category>database</category>
      <category>laravel</category>
      <category>php</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
