<?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: Abdul Abdullah</title>
    <description>The latest articles on DEV Community by Abdul Abdullah (@1bn_abdullah).</description>
    <link>https://dev.to/1bn_abdullah</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%2F107686%2Fa97ff373-4c3a-440d-9bd9-ffa3ca4f8a99.jpg</url>
      <title>DEV Community: Abdul Abdullah</title>
      <link>https://dev.to/1bn_abdullah</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/1bn_abdullah"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Abdul Abdullah</dc:creator>
      <pubDate>Sat, 28 Jun 2025 16:32:52 +0000</pubDate>
      <link>https://dev.to/1bn_abdullah/-156</link>
      <guid>https://dev.to/1bn_abdullah/-156</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/1bn_abdullah/why-we-default-to-serializer-in-unpredictable-projects-58ca" class="crayons-story__hidden-navigation-link"&gt;Why We Default to `Serializer` in Unpredictable Projects&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/1bn_abdullah" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F107686%2Fa97ff373-4c3a-440d-9bd9-ffa3ca4f8a99.jpg" alt="1bn_abdullah profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/1bn_abdullah" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Abdul Abdullah
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Abdul Abdullah
                
              
              &lt;div id="story-author-preview-content-2633674" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/1bn_abdullah" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F107686%2Fa97ff373-4c3a-440d-9bd9-ffa3ca4f8a99.jpg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Abdul Abdullah&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/1bn_abdullah/why-we-default-to-serializer-in-unpredictable-projects-58ca" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 28 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/1bn_abdullah/why-we-default-to-serializer-in-unpredictable-projects-58ca" id="article-link-2633674"&gt;
          Why We Default to `Serializer` in Unpredictable Projects
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/django"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;django&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/restapi"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;restapi&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/backend"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;backend&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/bestpractices"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;bestpractices&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/1bn_abdullah/why-we-default-to-serializer-in-unpredictable-projects-58ca" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/1bn_abdullah/why-we-default-to-serializer-in-unpredictable-projects-58ca#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>django</category>
      <category>restapi</category>
      <category>backend</category>
      <category>bestpractices</category>
    </item>
    <item>
      <title>Why We Default to `Serializer` in Unpredictable Projects</title>
      <dc:creator>Abdul Abdullah</dc:creator>
      <pubDate>Sat, 28 Jun 2025 16:21:41 +0000</pubDate>
      <link>https://dev.to/1bn_abdullah/why-we-default-to-serializer-in-unpredictable-projects-58ca</link>
      <guid>https://dev.to/1bn_abdullah/why-we-default-to-serializer-in-unpredictable-projects-58ca</guid>
      <description>&lt;p&gt;In many Django REST Framework (DRF) tutorials and quick-start guides, you’ll see &lt;code&gt;ModelSerializer&lt;/code&gt; used by default. It’s fast, declarative, and seemingly convenient. But in real-world, client-driven projects—especially the kind where requirements shift like weather patterns—this default can quickly become a liability.&lt;/p&gt;

&lt;p&gt;In our team, we’ve developed a rule of thumb: &lt;strong&gt;start with &lt;code&gt;serializer.Serializer&lt;/code&gt; unless you can justify &lt;code&gt;ModelSerializer&lt;/code&gt;.&lt;/strong&gt; This post explores why.&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 The Philosophy: Control Over Convenience
&lt;/h2&gt;

&lt;p&gt;Projects with unpredictable clients require &lt;strong&gt;flexibility&lt;/strong&gt;. Business logic evolves, models change, and the rules of engagement get rewritten mid-sprint. In this kind of chaos, &lt;code&gt;ModelSerializer&lt;/code&gt; can feel like coding with your hands tied behind your back.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔁 Tight coupling to the model
&lt;/li&gt;
&lt;li&gt;🎩 Hidden framework magic
&lt;/li&gt;
&lt;li&gt;🔧 Extra work to override defaults for custom logic
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔍 The Case for &lt;code&gt;Serializer&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Using &lt;code&gt;serializer.Serializer&lt;/code&gt; may take a few more lines of code, but it buys you:&lt;/p&gt;

&lt;p&gt;✅ Total control&lt;br&gt;&lt;br&gt;
✅ Decoupled API logic&lt;br&gt;&lt;br&gt;
✅ Easier debugging&lt;br&gt;&lt;br&gt;
✅ Mentorship-friendly structure  &lt;/p&gt;

&lt;p&gt;In volatile projects, &lt;strong&gt;explicit &amp;gt; implicit&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ A Real-World Example
&lt;/h2&gt;

&lt;p&gt;If I spot raw Python manually filtering results in &lt;code&gt;views.py&lt;/code&gt; when DRF already handles it declaratively, I know something’s off. Why ignore built-in tools?&lt;/p&gt;

&lt;p&gt;Instead, by using DRF properly and defaulting to &lt;code&gt;Serializer&lt;/code&gt;, we:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce complexity
&lt;/li&gt;
&lt;li&gt;Improve maintainability
&lt;/li&gt;
&lt;li&gt;Keep performance in check
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  👨🏽‍💻 How I Onboard Devs
&lt;/h2&gt;

&lt;p&gt;New to the team? I don’t just give you the repo. I ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Are you familiar with DRF?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If yes, I follow with:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Go compare &lt;code&gt;serializer.Serializer&lt;/code&gt; vs &lt;code&gt;ModelSerializer&lt;/code&gt;. Convince me if the latter fits &lt;em&gt;this&lt;/em&gt; project.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s not about control—it’s about intentionality.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 Our Default = A Signal
&lt;/h2&gt;

&lt;p&gt;We still use &lt;code&gt;ModelSerializer&lt;/code&gt;—but intentionally, not automatically. It’s allowed when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The endpoint is read-only
&lt;/li&gt;
&lt;li&gt;The structure maps directly to the model
&lt;/li&gt;
&lt;li&gt;No complex validation or decoupling is required
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in most cases? The flexibility of &lt;code&gt;Serializer&lt;/code&gt; wins.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✍🏽 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;In unpredictable projects, &lt;strong&gt;clarity and control are everything&lt;/strong&gt;. Our approach with &lt;code&gt;serializer.Serializer&lt;/code&gt; helps us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build robust APIs
&lt;/li&gt;
&lt;li&gt;Adapt to change
&lt;/li&gt;
&lt;li&gt;Mentor through intention
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Convenience is great—but never at the cost of maintainability.&lt;/p&gt;




&lt;h2&gt;
  
  
  👤 About the Author
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Abdul Abdullah&lt;/strong&gt; is a backend engineer who thrives at the intersection of clean code, pragmatic architecture, and team mentorship. When he’s not guiding devs through Django REST Framework best practices, you’ll find him perfecting pull requests and sharing insights.&lt;/p&gt;

&lt;p&gt;🐦 Twitter: &lt;a href="https://twitter.com/lbn_Abdullah" rel="noopener noreferrer"&gt;@lbn_Abdullah&lt;/a&gt;&lt;br&gt;&lt;br&gt;
💻 GitHub: &lt;a href="https://github.com/AbdulAbdullah" rel="noopener noreferrer"&gt;AbdulAbdullah&lt;/a&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>restapi</category>
      <category>backend</category>
      <category>bestpractices</category>
    </item>
  </channel>
</rss>
