<?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: Danny Thompson</title>
    <description>The latest articles on DEV Community by Danny Thompson (@dthompsondev).</description>
    <link>https://dev.to/dthompsondev</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%2F359729%2Fd5de48f7-efc3-4f1c-8566-4d946fc3724d.jpg</url>
      <title>DEV Community: Danny Thompson</title>
      <link>https://dev.to/dthompsondev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dthompsondev"/>
    <language>en</language>
    <item>
      <title>Stop Parsing LLMs with Regex: Build Production-Ready AI Features with Schema-Enforced Outputs</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Thu, 16 Oct 2025 04:26:17 +0000</pubDate>
      <link>https://dev.to/dthompsondev/llm-structured-json-building-production-ready-ai-features-with-schema-enforced-outputs-4j2j</link>
      <guid>https://dev.to/dthompsondev/llm-structured-json-building-production-ready-ai-features-with-schema-enforced-outputs-4j2j</guid>
      <description>&lt;h2&gt;
  
  
  If you've integrated an LLM by parsing its output with regex, you've likely experienced the moment when everything breaks.
&lt;/h2&gt;

&lt;p&gt;The model updates, changes a single phrase, and suddenly your carefully crafted parser fails, routing urgent customer issues to the wrong department or missing critical data entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is not a theoretical problem.&lt;/strong&gt; Consider this real scenario:&lt;br&gt;
&lt;strong&gt;Day 1:&lt;/strong&gt; Your customer support classifier works perfectly. A message like "You charged me twice! I want a refund NOW" produces: "The user is very upset about a duplicate charge. This is a billing issue. Sentiment is negative, and it seems urgent." Your regex &lt;code&gt;const department = output.match(/billing issue/i) ? 'billing' : 'general';&lt;/code&gt; routes it correctly.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2F4wvykx4grko3g1irxvp6.png" class="article-body-image-wrapper"&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%2Farticles%2F4wvykx4grko3g1irxvp6.png" alt="A flowchart titled " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 8:&lt;/strong&gt; The same input now returns: "This is a payment problem. The customer was double-billed and is demanding a refund." Your parser fails. The ticket is misrouted. Your metrics tank.&lt;/p&gt;

&lt;p&gt;The root cause is not the model. It is the approach. Unstructured text is designed for humans. Production applications need structured data. The durable solution is to make the model speak JSON and enforce the shape at generation time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Enforce a JSON Schema at generation time, then validate with Zod at runtime. No regex. No drift. Production predictable. OpenAI and Azure document this schema enforcement explicitly for structured outputs. &lt;a href="https://platform.openai.com/docs/guides/structured-outputs" rel="noopener noreferrer"&gt;OpenAI Platform&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Frf3q60syxapeuc3nm3uq.png" class="article-body-image-wrapper"&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%2Farticles%2Frf3q60syxapeuc3nm3uq.png" alt="A diagram titled " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Understanding Schema-Enforced Outputs
&lt;/h2&gt;

&lt;p&gt;Most modern LLM APIs now support structured outputs. You provide a JSON Schema, and the model is constrained to produce output that matches that schema. This is not a prompt trick. It is an API level contract for production reliability. OpenAI calls this &lt;strong&gt;Structured Outputs&lt;/strong&gt; and distinguishes it from older &lt;strong&gt;JSON mode&lt;/strong&gt;. JSON mode guarantees valid JSON syntax. Structured Outputs enforces your schema, including required properties and enums. &lt;a href="https://platform.openai.com/docs/guides/structured-outputs" rel="noopener noreferrer"&gt;OpenAI Platform&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Azure’s documentation mirrors this approach and lists the supported subset of JSON Schema. For example, you cannot use an &lt;code&gt;anyOf&lt;/code&gt; clause at the very top level of an Azure Policy rule. Design within the published subset for optimal adherence. &lt;a href="https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/structured-outputs" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you know GraphQL, the mental model is familiar. Define the shape you need up front, then receive exactly that shape. No parsing. No guesswork.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Four Compounding Benefits
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Zero parsing logic&lt;/strong&gt;&lt;br&gt;
Stop scraping paragraphs. The API constrains the model to your keys and types. The goal of structured outputs is to generate content that matches your schema. &lt;a href="https://platform.openai.com/docs/guides/structured-outputs" rel="noopener noreferrer"&gt;OpenAI Platform&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. End-to-end type safety&lt;/strong&gt;&lt;br&gt;
Define once with &lt;strong&gt;Zod&lt;/strong&gt;, derive TypeScript types, and validate at runtime with &lt;code&gt;.parse()&lt;/code&gt;. TypeScript ends at compile time. Zod closes the runtime gap with precise errors. &lt;a href="https://zod.dev/" rel="noopener noreferrer"&gt;Zod&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Operational reliability&lt;/strong&gt;&lt;br&gt;
Schema adherence reduces retries and format drift. Azure’s subset guidance exists to help you design shapes that adhere reliably in production. &lt;a href="https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/structured-outputs" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Maintainable codebase&lt;/strong&gt;&lt;br&gt;
Every response has the same keys. Dashboards stabilize. Alerts are deterministic. Your AI integration becomes as predictable as any typed API.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fl4laes7vdb0iqagjlp9n.png" class="article-body-image-wrapper"&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%2Farticles%2Fl4laes7vdb0iqagjlp9n.png" alt="A diagram titled " width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  Implementation: A Provider-Agnostic Pattern
&lt;/h2&gt;

&lt;p&gt;The pattern below works with any API that accepts a response schema. We will use TypeScript and Zod as a single source of truth.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Define your schema
&lt;/h3&gt;

&lt;p&gt;Use Zod to define schema, types, and guidance in one place. The &lt;code&gt;.describe()&lt;/code&gt; annotations are not only documentation. They steer the model toward the right values.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;typescript
import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";

export const SupportTicketSchema = z.object({
  schemaVersion: z.literal("v1")
    .describe("Schema version for analytics and migrations"),
  language: z.string()
    .describe("BCP-47 language code of the input, for example en-US"),
  sentiment: z.enum(["positive", "neutral", "negative"])
    .describe("Overall sentiment of the customer's message"),
  department: z.enum([
    "customer_support",
    "online_ordering",
    "product_quality",
    "shipping_and_delivery",
    "other_off_topic"
  ]).describe("Primary routing category for this ticket"),
  priority: z.enum(["low", "medium", "high"])
    .describe("Urgency level based on content and tone"),
  confidence: z.number().min(0).max(1)
    .describe("Model confidence in this classification from 0 to 1"),
  suggestedReply: z.string().min(1).max(500).describe(
    "Friendly, professional tone. 60 to 120 words. Acknowledge the issue. " +
    "Give the next step and a contact. No emojis. No internal policy text. " +
    "Write in the same language as the user."
  )
});

export type SupportTicket = z.infer&amp;lt;typeof SupportTicketSchema&amp;gt;;
export const SupportJSONSchema = zodToJsonSchema(SupportTicketSchema);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zod is TypeScript-first. &lt;code&gt;.parse()&lt;/code&gt; validates and returns a typed value. If the shape or values are wrong, it throws with clear messages. &lt;a href="https://zod.dev/" rel="noopener noreferrer"&gt;Zod&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Configure your LLM call
&lt;/h3&gt;

&lt;p&gt;Pass the JSON Schema to the API using its structured output parameter. The names vary by provider, but the idea is the same.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;typescript
import OpenAI from "openai";

const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

export async function classifyMessage(message: string): Promise&amp;lt;SupportTicket&amp;gt; {
  const completion = await openai.chat.completions.create({
    model: "gpt-4o-2024-08-06",
    messages: [
      {
        role: "system",
        content: "Classify customer support messages and suggest appropriate replies. Return structured JSON only."
      },
      { role: "user", content: message }
    ],
    response_format: {
      type: "json_schema",
      json_schema: {
        name: "support_ticket_classification",
        schema: SupportJSONSchema
      }
    }
  });

  const content = completion.choices[0]?.message?.content ?? "";
  let parsed: unknown;
  try {
    parsed = JSON.parse(content);
  } catch (err) {
    throw new Error("Model returned non JSON. Verify response_format and schema.", { cause: err });
  }
  return SupportTicketSchema.parse(parsed);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is defense in depth. The API enforces your structure at generation. Zod enforces your business rules at runtime. OpenAI is explicit about schema enforcement in structured outputs, and Azure publishes the supported subset so you can design shapes that adhere well. &lt;a href="https://platform.openai.com/docs/guides/structured-outputs" rel="noopener noreferrer"&gt;OpenAI Platform&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Use typed data throughout your app
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;typescript
const result = await classifyMessage("Order #8841 is two weeks late!");

console.log(result.sentiment);        // "negative"
console.log(result.department);       // "shipping_and_delivery"
console.log(result.priority);         // "high"
console.log(result.confidence);       // 0.94
console.log(result.suggestedReply);   // Ready to use

if (result.confidence &amp;gt;= 0.8) {
  await sendAutomatedReply(result.suggestedReply);
} else {
  await flagForHumanReview(result);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Reliability and Resilience
&lt;/h2&gt;

&lt;p&gt;Add a minimal retry with backoff and a request timeout to harden your integration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;typescript
async function withRetry&amp;lt;T&amp;gt;(op: () =&amp;gt; Promise&amp;lt;T&amp;gt;, tries = 3, baseMs = 300): Promise&amp;lt;T&amp;gt; {
  let last: unknown;
  for (let i = 1; i &amp;lt;= tries; i++) {
    try { return await op(); }
    catch (e) {
      last = e;
      if (i &amp;lt; tries) await new Promise(r =&amp;gt; setTimeout(r, baseMs * i));
    }
  }
  throw last;
}

// Usage
const safeResult = await withRetry(() =&amp;gt; classifyMessage(msg));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your HTTP client supports it, add an idempotency key and a request timeout.&lt;/p&gt;




&lt;h2&gt;
  
  
  Integrating With Modern Data Architectures
&lt;/h2&gt;

&lt;p&gt;For GraphQL teams, treat the LLM as a typed upstream source.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;graphql
type Mutation {
  enrichLead(rawInquiry: String!): EnrichedLead!
}

type EnrichedLead {
  companyName: String!
  inquiryType: InquiryType!
  urgency: Urgency!
  potentialValue: DealSize!
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;typescript
const resolvers = {
  Mutation: {
    enrichLead: async (_: unknown, { rawInquiry }: { rawInquiry: string }) =&amp;gt; {
      const structured = await llmService.enrichWithSchema(rawInquiry);
      return {
        companyName: structured.companyName,
        inquiryType: structured.inquiryType,
        urgency: structured.urgency,
        potentialValue: structured.potentialValue
      };
    }
  }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The LLM is no longer a black box. It is a reliable transformer that converts free text into typed graph data.&lt;/p&gt;




&lt;h2&gt;
  
  
  Considering a Framework for Scale
&lt;/h2&gt;

&lt;p&gt;While the direct pattern of using Zod with a provider's native schema is robust and very flexible, teams managing numerous LLM integrations or requiring provider independence may benefit from a higher level of abstraction.&lt;/p&gt;

&lt;p&gt;Frameworks like &lt;strong&gt;BAML (Boundary AI Markup Language)&lt;/strong&gt; are designed for this. BAML uses a dedicated language (&lt;code&gt;.baml&lt;/code&gt; files) to define, version, and test your LLM functions separately from your application code. This approach allows you to swap underlying LLM providers (e.g., from OpenAI to Anthropic) with a configuration change and provides a structured workflow for collaboration between engineers and prompt designers. Adopting a framework adds a toolchain to your project but can be invaluable for scaling and maintaining complex AI systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streaming UX without breaking JSON
&lt;/h2&gt;

&lt;p&gt;Streaming feels great in UI, but there is a common trap. Accumulate the stream in a buffer and parse once when complete. Do not parse partial JSON. If you use a framework, helpers like LangChain’s &lt;code&gt;.withStructuredOutput()&lt;/code&gt; abstract provider specifics and return typed objects while still allowing streaming. &lt;a href="https://js.langchain.com/docs/concepts/structured_outputs/" rel="noopener noreferrer"&gt;js.langchain.com&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Real World Business Applications
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Customer support triage&lt;/strong&gt;&lt;br&gt;
Classify sentiment, department, priority, and confidence. Preload a safe reply. Auto route high confidence results. Queue the rest for human review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lead enrichment&lt;/strong&gt;&lt;br&gt;
Transform free text into company name, intent, urgency, and potential value. Feed clean fields into your CRM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document processing&lt;/strong&gt;&lt;br&gt;
Take OCR output from PDFs or emails and transform it into database-ready records using a schema that matches your tables.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fch9ujc73iu31qt9nwoen.png" class="article-body-image-wrapper"&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%2Farticles%2Fch9ujc73iu31qt9nwoen.png" alt="A diagram titled " width="800" height="698"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Production Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Constrain any field you branch on with enums. Do not accept free text for routing or classification. Design within the published schema subset for better adherence. &lt;a href="https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/structured-outputs" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Add short, specific &lt;code&gt;.describe()&lt;/code&gt; texts to fields. Providers call out descriptions as useful guidance for generation. &lt;a href="https://platform.openai.com/docs/guides/structured-outputs" rel="noopener noreferrer"&gt;OpenAI Platform&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Keep schemas relatively flat. Deep nesting tends to hurt adherence. Start simple and add nesting only when it clearly helps. &lt;a href="https://js.langchain.com/docs/concepts/structured_outputs/" rel="noopener noreferrer"&gt;js.langchain.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Validate at runtime with Zod even when the API enforces your schema. &lt;code&gt;.parse()&lt;/code&gt; yields safe objects or actionable errors. &lt;a href="https://zod.dev/" rel="noopener noreferrer"&gt;Zod&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Include a confidence score. Gate automation by threshold.&lt;/li&gt;
&lt;li&gt;Version your schemas. Add &lt;code&gt;schemaVersion&lt;/code&gt; and migrate intentionally.&lt;/li&gt;
&lt;li&gt;For streaming, accumulate then parse. Never parse partial JSON.&lt;/li&gt;
&lt;li&gt;Consider a framework abstraction when you want provider-agnostic code. LangChain’s &lt;code&gt;.withStructuredOutput()&lt;/code&gt; binds schemas and handles quirks for you.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Security and Safety Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Delimit user input with clear markers, for example, triple quotes to reduce prompt injection risk inside your templates.&lt;/li&gt;
&lt;li&gt;Repeat key guard rails after dynamic text so the latest instructions reassert constraints.&lt;/li&gt;
&lt;li&gt;If tickets may contain PII, add &lt;code&gt;containsPii: boolean&lt;/code&gt; and redact before logging or analytics.&lt;/li&gt;
&lt;li&gt;Use confidence gating. Automate only above a threshold. Queue the rest.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A Minimal, Repeatable Micro-Benchmark
&lt;/h2&gt;

&lt;p&gt;Invite your team to measure rather than guess.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Task:&lt;/strong&gt; classify 100 real tickets into your schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics:&lt;/strong&gt; schema valid rate using Zod, average latency, tokens, and manual spot check accuracy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settings:&lt;/strong&gt; temperature 0, same prompt, same schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Goal:&lt;/strong&gt; prove that schema enforcement gives you a higher valid rate and fewer retries than prose parsing.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Complete Working Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;typescript
// npm install zod zod-to-json-schema openai

import { z } from "zod";
import { zodToJsonSchema } from "zod-to-json-schema";
import OpenAI from "openai";

// 1. Define schema and types
const ProductReviewSchema = z.object({
  rating: z.number().min(1).max(5)
    .describe("Star rating from 1 to 5"),
  pros: z.array(z.string())
    .describe("List of positive aspects mentioned"),
  cons: z.array(z.string())
    .describe("List of negative aspects mentioned"),
  wouldRecommend: z.boolean()
    .describe("Whether the reviewer would recommend this product"),
  summary: z.string().max(200)
    .describe("Brief summary suitable for display in UI")
});

type ProductReview = z.infer&amp;lt;typeof ProductReviewSchema&amp;gt;;
const ReviewJSONSchema = zodToJsonSchema(ProductReviewSchema);

// 2. Create API function with robust parsing and validation
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });

async function analyzeReview(reviewText: string): Promise&amp;lt;ProductReview&amp;gt; {
  const completion = await openai.chat.completions.create({
    model: "gpt-4o-2024-08-06",
    messages: [
      {
        role: "system",
        content: "Extract structured insights from product reviews. Return JSON only."
      },
      { role: "user", content: reviewText }
    ],
    response_format: {
      type: "json_schema",
      json_schema: {
        name: "product_review_analysis",
        schema: ReviewJSONSchema,
        strict: true
      }
    }
  });

  const content = completion.choices[0]?.message?.content ?? "";
  let data: unknown;
  try {
    data = JSON.parse(content);
  } catch (err) {
    throw new Error("Model returned non JSON. Verify response_format and schema.", { cause: err });
  }
  return ProductReviewSchema.parse(data);
}

// 3. Use it
const result = await analyzeReview(
  "Battery life is incredible, easily lasts two days. The screen is crisp and bright. " +
  "The camera sometimes hunts for focus in low light. Overall, very happy. 4/5 stars."
);

console.log(result);
// {
//   rating: 4,
//   pros: ["Long battery life", "High-quality display"],
//   cons: ["Camera autofocus issues in low light"],
//   wouldRecommend: true,
//   summary: "Excellent battery and screen, minor camera issues"
// }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;Structured JSON output turns LLM integration from fragile text parsing into reliable, typed data processing. It reduces incidents, improves maintainability, and makes AI features feel native to your application.&lt;/p&gt;

&lt;p&gt;Start with your most brittle endpoint. Replace prose parsing with schema enforcement plus Zod validation. Measure error rates and time to resolution for two weeks. Let the numbers guide your rollout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;br&gt;
OpenAI structured outputs guide and schema enforcement details. &lt;br&gt;
&lt;a href="https://platform.openai.com/docs/guides/structured-outputs" rel="noopener noreferrer"&gt;open&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Azure structured outputs guide and supported JSON Schema subset. &lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/structured-outputs" rel="noopener noreferrer"&gt;Microsoft Learn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zod documentation on &lt;code&gt;.parse()&lt;/code&gt; and runtime validation for TypeScript. &lt;br&gt;
&lt;a href="https://zod.dev/" rel="noopener noreferrer"&gt;Zod&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LangChain JS concepts and how to return structured data with &lt;code&gt;.withStructuredOutput()&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://js.langchain.com/docs/concepts/structured_outputs/" rel="noopener noreferrer"&gt;js.langchain.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>api</category>
    </item>
    <item>
      <title>Nullish Coalescing: The JavaScript Operator You Should Be Utilizing More Often</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Tue, 04 Feb 2025 16:32:44 +0000</pubDate>
      <link>https://dev.to/dthompsondev/nullish-coalescing-the-javascript-operator-you-should-be-utilizing-more-often-3cj0</link>
      <guid>https://dev.to/dthompsondev/nullish-coalescing-the-javascript-operator-you-should-be-utilizing-more-often-3cj0</guid>
      <description>&lt;p&gt;Nullish Coalescing: The JavaScript Operator You Should Be Utilizing More Often&lt;/p&gt;

&lt;p&gt;JavaScript has a ton of logical operators, but there's one that often flies under the radar, nullish coalescing ??&lt;/p&gt;

&lt;p&gt;Very Useful and here's how you can use it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const tenant1 = {
    name: &amp;amp;quot;John Doe&amp;amp;quot;,
    cars: null, 
    numberOfPets: 0,
  };

  const tenant2 = {
    name: &amp;amp;quot;Jane Smith&amp;amp;quot;,
    cars: 2,
    numberOfPets: null, 
  };


  function getTenantInfo(tenant) {
    const cars = tenant.cars ?? &amp;amp;quot;No car information available&amp;amp;quot;;
    const numberOfPets = tenant.numberOfPets ?? &amp;amp;quot;No pet data available&amp;amp;quot;;

    console.log(`Tenant: ${tenant.name}`);
    console.log(`Cars: ${cars}`);
    console.log(`Number of pets: ${numberOfPets}`);
  }

  getTenantInfo(tenant1);
  getTenantInfo(tenant2);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nullish coalescing is a logical operator (??) that helps handle null and undefined values.&lt;/p&gt;

&lt;p&gt;It works by returning the right-hand value if the left-hand value is null or undefined.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const value = someVariable ?? 'default value';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if someVariable is null or undefined, it returns 'default value'.&lt;/p&gt;

&lt;p&gt;At this point, you might be thinking:&lt;/p&gt;

&lt;p&gt;"Why not just use the OR (||) operator?"&lt;/p&gt;

&lt;p&gt;Great question! The problem is that || treats falsy values (0, false, "", etc.) as if they don’t exist.&lt;br&gt;
Here’s a real example:&lt;/p&gt;

&lt;p&gt;In this code snippet, which was at the top of the thread, we have a basic app for an apartment rental company.&lt;br&gt;
&lt;a href="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%2Farticles%2Ftijdattpwqstwtli085m.png" class="article-body-image-wrapper"&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%2Farticles%2Ftijdattpwqstwtli085m.png" alt="image of the code snippet provided earlier" width="800" height="666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Logging basic data like the tenant, number of cars, pets, etc.&lt;/p&gt;

&lt;p&gt;For numberOfPets we have 2 different values, 0 and null for Tenant1 and 2&lt;/p&gt;

&lt;p&gt;Null in this situation meaning we never got the data for the tenants pets and that we should find that out. Maybe they forgot to fill that line in on the application or the manager forgot to ask. Either way, we need a value there so this is a good place to remind the staff that "No pet data available"&lt;/p&gt;

&lt;p&gt;but if WE DID ask and found out that they had 0 pets, that means WE DO have the data. We want to see that 0.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Using OR operator
const numberOfPets = tenant.numberOfPets || "No pet data available";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since 0 is falsy in JavaScript, || treats it as "missing" and returns "No pet data available"&lt;/p&gt;

&lt;p&gt;WHICH IS INCORRECT and doesn't help us here.&lt;br&gt;
We want to see the 0, not an incorrect message.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Using Nullish Coalescing
const numberOfPets = tenant.numberOfPets ?? "No pet data available";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With ?? we will only fall back to the default message if it’s null or undefined. If the value is 0, it correctly displays 0.&lt;/p&gt;

&lt;p&gt;So, next time you reach for ||, ask yourself: “Do I really want to override all falsy values, or just the nullish ones?” If it’s the latter, ?? is your answer.&lt;/p&gt;

&lt;p&gt;Will you start using nullish coalescing?&lt;br&gt;
Let me know!&lt;/p&gt;

&lt;p&gt;Twitter: &lt;a href="https://x.com/DThompsonDev" rel="noopener noreferrer"&gt;https://x.com/DThompsonDev&lt;/a&gt;&lt;br&gt;
Linkedin: &lt;a href="https://www.linkedin.com/in/dthompsondev/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/dthompsondev/&lt;/a&gt;&lt;br&gt;
Bluesky: &lt;a href="https://bsky.app/profile/dthompsondev.bsky.social" rel="noopener noreferrer"&gt;https://bsky.app/profile/dthompsondev.bsky.social&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Nullish Coalescing: The JavaScript Operator You Should Be Utilizing More Often</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Tue, 04 Feb 2025 16:32:44 +0000</pubDate>
      <link>https://dev.to/dthompsondev/nullish-coalescing-the-javascript-operator-you-should-be-utilizing-more-often-3keh</link>
      <guid>https://dev.to/dthompsondev/nullish-coalescing-the-javascript-operator-you-should-be-utilizing-more-often-3keh</guid>
      <description>&lt;p&gt;Nullish Coalescing: The JavaScript Operator You Should Be Utilizing More Often&lt;/p&gt;

&lt;p&gt;JavaScript has a ton of logical operators, but there's one that often flies under the radar, nullish coalescing ??&lt;/p&gt;

&lt;p&gt;Very Useful and here's how you can use it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const tenant1 = {
    name: "John Doe",
    cars: null, 
    numberOfPets: 0,
  };

  const tenant2 = {
    name: "Jane Smith",
    cars: 2,
    numberOfPets: null, 
  };


  function getTenantInfo(tenant) {
    const cars = tenant.cars ?? "No car information available";
    const numberOfPets = tenant.numberOfPets ?? "No pet data available";

    console.log(`Tenant: ${tenant.name}`);
    console.log(`Cars: ${cars}`);
    console.log(`Number of pets: ${numberOfPets}`);
  }

  getTenantInfo(tenant1);
  getTenantInfo(tenant2);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nullish coalescing is a logical operator (??) that helps handle null and undefined values.&lt;/p&gt;

&lt;p&gt;It works by returning the right-hand value if the left-hand value is null or undefined.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const value = someVariable ?? 'default value';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;if someVariable is null or undefined, it returns 'default value'.&lt;/p&gt;

&lt;p&gt;At this point, you might be thinking:&lt;/p&gt;

&lt;p&gt;"Why not just use the OR (||) operator?"&lt;/p&gt;

&lt;p&gt;Great question! The problem is that || treats falsy values (0, false, "", etc.) as if they don’t exist.&lt;br&gt;
Here’s a real example:&lt;/p&gt;

&lt;p&gt;In this code snippet, which was at the top of the thread, we have a basic app for an apartment rental company.&lt;br&gt;
&lt;a href="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%2Farticles%2Ftijdattpwqstwtli085m.png" class="article-body-image-wrapper"&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%2Farticles%2Ftijdattpwqstwtli085m.png" alt="image of the code snippet provided earlier" width="800" height="666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Logging basic data like the tenant, number of cars, pets, etc.&lt;/p&gt;

&lt;p&gt;For numberOfPets we have 2 different values, 0 and null for Tenant1 and 2&lt;/p&gt;

&lt;p&gt;Null in this situation meaning we never got the data for the tenants pets and that we should find that out. Maybe they forgot to fill that line in on the application or the manager forgot to ask. Either way, we need a value there so this is a good place to remind the staff that "No pet data available"&lt;/p&gt;

&lt;p&gt;but if WE DID ask and found out that they had 0 pets, that means WE DO have the data. We want to see that 0.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Using OR operator
const numberOfPets = tenant.numberOfPets || "No pet data available";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since 0 is falsy in JavaScript, || treats it as "missing" and returns "No pet data available"&lt;/p&gt;

&lt;p&gt;WHICH IS INCORRECT and doesn't help us here.&lt;br&gt;
We want to see the 0, not an incorrect message.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Using Nullish Coalescing
const numberOfPets = tenant.numberOfPets ?? "No pet data available";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With ?? we will only fall back to the default message if it’s null or undefined. If the value is 0, it correctly displays 0.&lt;/p&gt;

&lt;p&gt;So, next time you reach for ||, ask yourself: “Do I really want to override all falsy values, or just the nullish ones?” If it’s the latter, ?? is your answer.&lt;/p&gt;

&lt;p&gt;Will you start using nullish coalescing?&lt;br&gt;
Let me know!&lt;/p&gt;

&lt;p&gt;Twitter: &lt;a href="https://x.com/DThompsonDev" rel="noopener noreferrer"&gt;https://x.com/DThompsonDev&lt;/a&gt;&lt;br&gt;
Linkedin: &lt;a href="https://www.linkedin.com/in/dthompsondev/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/dthompsondev/&lt;/a&gt;&lt;br&gt;
Bluesky: &lt;a href="https://bsky.app/profile/dthompsondev.bsky.social" rel="noopener noreferrer"&gt;https://bsky.app/profile/dthompsondev.bsky.social&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React 19 useOptimistic Hook Breakdown</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Mon, 03 Feb 2025 19:22:36 +0000</pubDate>
      <link>https://dev.to/dthompsondev/react-19-useoptimistic-hook-breakdown-5g9k</link>
      <guid>https://dev.to/dthompsondev/react-19-useoptimistic-hook-breakdown-5g9k</guid>
      <description>&lt;p&gt;React is always improving and evolving with new ways to approach things and also new hooks, one of which that I have really liked using is the useOptimistic hook!&lt;/p&gt;

&lt;p&gt;I struggled in the beginning with why/when I would find the best opportunities to use it, Tiktok answered that:&lt;/p&gt;

&lt;p&gt;A couple weeks ago When I was watching a video on TikTok, I liked it and INSTANTLY saw feedback that a heart was added to the post. An ad popped up at the end of the video and I immediately scrolled away. Went BACK to the video but saw the heart was gone.&lt;/p&gt;

&lt;p&gt;That's when it hit me:&lt;br&gt;
When I initially liked the post it gave me the feedback that the heart on the video registered but swiping away so quickly with the ad blocking things, it may not have registered the like.&lt;/p&gt;

&lt;p&gt;Now this might not be TikToks issue but this made me realize HOW I could use it!&lt;br&gt;
How does the hook work?&lt;br&gt;
"useOptimistic is a React Hook that lets you optimistically update the UI." - React Docs&lt;/p&gt;

&lt;p&gt;It lets you perform an action, and OPTIMISITICALLY, it assumes everything will work. It performs the action with the UI, so the user gets an immediate response.&lt;/p&gt;

&lt;p&gt;If you want to see the code, I put it on stackblitz so it is easy to follow.&lt;/p&gt;

&lt;p&gt;I put all of the code in the App.tsx file.&lt;br&gt;
&lt;a href="https://stackblitz.com/edit/vitejs-vite-tt72lmea?file=src%2FApp.tsx" rel="noopener noreferrer"&gt;https://stackblitz.com/edit/vitejs-vite-tt72lmea?file=src%2FApp.tsx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this video you can see how this app is working. The first two posts that get likes show it immediately even though there is a delay! This is because of the useOptimistic hook!&lt;/p&gt;

&lt;p&gt;Notice how the bottom two posts don't update immediately—that's because they aren't using useOptimistic, so they wait for the server before updating.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { useOptimistic, startTransition } from "react";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Need to import the optimistic hook and startTransition api.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [optimisticPosts, addOptimisticPost] = useOptimistic(
posts,
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This part sets up an "optimistic state", which means it updates the UI immediately before waiting for the real data from the server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Apply the optimistic update immediately
startTransition(() =&amp;gt; {
addOptimisticPost(postId);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;startTransition API tells React: “Hey, update the UI immediately, but don't make this the highest priority API call, perform the others first since the user already has the UI feedback and then we can process this API call as the lowest priority." This prevents the UI from blocking OTHER important updates and ensures a smooth experience.&lt;/p&gt;

&lt;p&gt;NOW, if you wanted to, You COULD potentially add some additional features that will trigger in case something fails. This way, we do not display the wrong state, like removing the "like" if the API fails.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fosixnz6utrbsw78sihri.gif" class="article-body-image-wrapper"&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%2Farticles%2Fosixnz6utrbsw78sihri.gif" alt=" " width="360" height="360"&gt;&lt;/a&gt;&lt;br&gt;
(The gif isn't easy to see so if you want to see the video of it you can find it in this twitter thread here &lt;a href="https://x.com/DThompsonDev/status/1884821001671749971" rel="noopener noreferrer"&gt;https://x.com/DThompsonDev/status/1884821001671749971&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Honestly, this was fun to make and experiment with!&lt;br&gt;
Let me know if this helped you understand useOptimistic hooks and let me know what I should do a technical breakdown of next!&lt;/p&gt;

&lt;p&gt;Follow me on all platforms at DThompsonDev&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>reactjsdevelopment</category>
    </item>
    <item>
      <title>Financial Post Mortem For The Commit Your Code Conference</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Mon, 09 Dec 2024 00:23:02 +0000</pubDate>
      <link>https://dev.to/dthompsondev/financial-post-mortem-for-the-commit-your-code-conference-57of</link>
      <guid>https://dev.to/dthompsondev/financial-post-mortem-for-the-commit-your-code-conference-57of</guid>
      <description>&lt;p&gt;&lt;a href="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%2Farticles%2Fs4ob1gm5pkitopbhmkun.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fs4ob1gm5pkitopbhmkun.jpg" alt="Group Photo At The End Of Day 1" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On December 5th and 6th, we hosted A Conference For Charity called "The Commit Your Code Conference," where &lt;strong&gt;100% of all ticket sales would be donated to charity.&lt;/strong&gt; I got the idea at the end of August and really started everything mid-September. So, in less than 3 months, we put on this conference that was trending worldwide!&lt;/p&gt;

&lt;p&gt;Important stats and cliff notes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We had over 60 speakers&lt;/li&gt;
&lt;li&gt;Ticket sales are 100% donated to charity.&lt;/li&gt;
&lt;li&gt;77% of attendees worked in tech&lt;/li&gt;
&lt;li&gt;40% of attendees have NEVER been to a tech conference ever before.&lt;/li&gt;
&lt;li&gt;We raised $10,197.70 for charity&lt;/li&gt;
&lt;li&gt;Our total sponsorship money equaled $11,500&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fq4j27efc1tzit3bv08gl.jpg" class="article-body-image-wrapper"&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%2Farticles%2Fq4j27efc1tzit3bv08gl.jpg" alt="Group photo of all the speakers" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
Group photo of all the speakers&lt;/p&gt;

&lt;p&gt;Running a conference for the sake of money never interested me and I do not knock anyone else for doing it. For-profit conferences are great! I absolutely support them! For me, it just didn't get me excited. The idea that I became really hooked on in August was to create a conference where income or location was not a barrier to resources. So for us, the tickets start at $30, and your food will be covered for both days of the conference. The only difference between a $30 ticket and a $100 ticket was how much we donated to charity. Your experience would NOT CHANGE or be different by how much money you gave.&lt;/p&gt;

&lt;p&gt;I promised to publish all financial data publicly at the beginning of advertising this conference. Transparency is the biggest factor here, and I want nothing hidden. Here is a full breakdown of everything.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2Fg3odi3jxjum1qnsuwpvf.png" class="article-body-image-wrapper"&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%2Farticles%2Fg3odi3jxjum1qnsuwpvf.png" alt="screenshot of revenue from the dashboard" width="800" height="355"&gt;&lt;/a&gt;&lt;br&gt;
We raised $10,167.70 + $30, which was given at the end of the conference in cash, for a total of $10,197.70. We sold the tickets using a tool called Checkout Page, and it worked really well. Every penny will be donated.&lt;/p&gt;

&lt;p&gt;In sponsorship money, we collected $11,500 from 8 sponsors.&lt;br&gt;
Huge kudos to them because each sponsor had to make a VERY special exception to donate. One of the things I found out is that a large majority of organizations I approached plan their conference sponsorship budgets a year in advance. I thought 3 months was too long, but I quickly learned how wrong I was.&lt;/p&gt;

&lt;p&gt;I also learned that the word charity scared off A TON of potential sponsors. This was actually one of the hardest pills to swallow, but it completely shifted my thinking as we are planning to Commit Your Code 2025. The word charity will not be in the title of the conference. It will be all over the advertising and website as we will do the same thing, donating everything to charity, BUT we will not put that on the prospectus when presenting it to businesses. It made them back away from the conversations. I am not happy that this resulted in that, but I will make sure I play the game that works to help us going forward. This way, it limits their liability and helps the community.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;&lt;strong&gt;So we had $11,500, what did we spend it on?&lt;/strong&gt;&lt;/u&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;Food&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;we spent a total of $7,387.73. This was the biggest cost for everything and we had to be very creative with it because it wasn't much as far as dollars go by. With 88.9% of feedback survey respondents rating the food at the event as a 7/10 or higher (as of the time of writing this), I am pretty happy with what we were able to do. Especially with people recording, taking pictures and praising it on socials, I feel like it was a win for what it was.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;So here is the total breakdown of the food.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;950.46 was spent at Costco. This was for a pallet of water, pastries, chips, sweets, plates, utensils, napkins, etc.&lt;/li&gt;
&lt;li&gt;956.24 was spent just on panera bread coffee. It is a developer conference, you have to spend it for those that need it.&lt;/li&gt;
&lt;li&gt;66.31 at Walmart to get aluminum trays&lt;/li&gt;
&lt;li&gt;1,337.14 for two days of pizza. That is 54 pizzas each day.&lt;/li&gt;
&lt;li&gt;1,128.07 for two days of Taco Bell. Roughly 260 tacos per day including Vegan tacos for the people that said vegan on their ticket to ensure we did not leave them out.&lt;/li&gt;
&lt;li&gt;800.01 for two days of KFC.&lt;/li&gt;
&lt;li&gt;2,175.82 for a speaker happy hour that also had tacos. We had to do something to honor the speakers for being there and just coming through for the community. We didn't have a lot of cash and with over 60 speakers, I think this was effective.&lt;/li&gt;
&lt;li&gt;Extra mention, we did a full conference social at the end of Day 1 but one of our sponsors paid it directly so I did not add this into the sponsorship money or food cost but if I did, that was another $2,000.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;Badges&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;We spent a total of $1,003.95 on badges for attendees and volunteers. I originally planned to spend less until I had a conversation with another conference organizer, Vincent Myers, who said "For many attendees, this may be the only badge they ever get, or one of few. They appreciate their badges. So I don't skimp out on them because it means a lot to people." Really glad I took his advice. Many compliments were received because of the badges.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;Camera and equipment rental&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;We spent $220.83. We rented a camera for the third track so we could stream it online. I brought my camera to stream track one, and the incredible Tracy Lee brought a camera we used to stream the second track.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;&lt;strong&gt;Processing fees&lt;/strong&gt;&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;This was $678.56. This is for processing invoices and the associated transactions for ticket sales, as well as card transaction costs. For those that may be unaware, any time you use your card, there is a fee the business has to pay which is generally a percentage as well as a transaction fee. Now we are counting the processing fees for tickets under sponsorship money so we can ensure 100% of the ticket sale goes to charity and not the ticket sale minus processing fees! This was a big deal to me. I wanted every penny to go direct to charity.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;&lt;strong&gt;Photographer&lt;/strong&gt;&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;The cost was $1,500. We had a photographer give out free headshots to attendees and since this was for charity, they gave us an amazing deal. Many of the conference attendees updating their LinkedIns with the photo on the same day! I think this was a huge value add for folks there.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;u&gt;&lt;strong&gt;Printing and Misc&lt;/strong&gt;&lt;/u&gt;
&lt;/h2&gt;

&lt;p&gt;This was 511.97, We had to print signs, get some buffet wire racks, sternos, Streamyard, cam links, etc. Small stuff, but it was essential.&lt;/p&gt;

&lt;p&gt;This leaves us with under $200 left over, which we will need to use to file taxes and probably need to add a couple hundred in with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;u&gt;Where we saved money?&lt;/u&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Food cost was the biggest savings because we didn't use a caterer. The quotes we got were almost $10,000 higher! That alone helped us save a lot of money.&lt;/li&gt;
&lt;li&gt;Venue! We have been hosting meetups here for a couple years now and the venue loved the mission so much that they gave us the space for free for both days. When we were looking at conference centers attached to colleges we were receiving quotes for $5000- $7000 per day. So this really helped us out!&lt;/li&gt;
&lt;li&gt;The entire team donating their time. We didn't do this to make money. Everyone involved volunteered and this eliminated any costs with labor so we could make sure all the cash went to charity!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;u&gt;Results&lt;/u&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The result was having an amazing conference experience for people that was so popular that the internet was buzzing about it. That people in the building felt true value for time. Where new friends were made and new partnerships were formed.&lt;/p&gt;

&lt;p&gt;Going into it, we were pretty deadset on only doing it one time. Just a fun thing to do to bring the community together. THE ATTENDEES AND SPEAKERS were the ones to really force us and create so much enthusiasm in us that we agreed to do it again. So much so, that when I announced it, the cheers were so loud that we set off the alarm system haha!&lt;/p&gt;

&lt;p&gt;CYC 2025 will be back, and we are aiming for mid-November! With 20 speakers already locked in!&lt;/p&gt;

&lt;p&gt;Now, I will be donating 5,098.85 to FreeCodeCamp and 5,098.85 to St. Jude Children's Hospital. I am awaiting instructions on donating it to them and limiting the fees they incur. It will probably be ACH or Wire Transfers, but I haven't received them yet as it is Sunday night. I am sure Monday Morning will be when we finally get it.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Farticles%2F2tex2gj26z182xnuw3xc.png" class="article-body-image-wrapper"&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%2Farticles%2F2tex2gj26z182xnuw3xc.png" alt="screenshot of the business bank account" width="800" height="532"&gt;&lt;/a&gt;&lt;br&gt;
Current bank account totals.&lt;/p&gt;

&lt;p&gt;Thank you everyone!&lt;/p&gt;

&lt;p&gt;I am DThompsonDev on all social media platforms.&lt;br&gt;
I am also a Director Of Technology at This Dot Labs and a podcast host on "Modern Web Podcast" and "The Programming Podcast"&lt;/p&gt;

&lt;p&gt;Linkedin &lt;a href="https://www.linkedin.com/in/dthompsondev/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/dthompsondev/&lt;/a&gt;&lt;br&gt;
Bluesky &lt;a href="https://bsky.app/profile/dthompsondev.bsky.social" rel="noopener noreferrer"&gt;https://bsky.app/profile/dthompsondev.bsky.social&lt;/a&gt;&lt;br&gt;
Twitter &lt;a href="https://twitter.com/DThompsonDev" rel="noopener noreferrer"&gt;https://twitter.com/DThompsonDev&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
      <category>career</category>
    </item>
    <item>
      <title>I hope you fail.🙏🏽❤️</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Sat, 22 Aug 2020 19:58:38 +0000</pubDate>
      <link>https://dev.to/dthompsondev/fail-4gea</link>
      <guid>https://dev.to/dthompsondev/fail-4gea</guid>
      <description>&lt;p&gt;&lt;em&gt;If you like this article, chances are you'd like what I tweet as well. If you are curious, &lt;a href="https://www.twitter.com/DThompsonDev" rel="noopener noreferrer"&gt;have a look at my Twitter profile&lt;/a&gt;. Or check out my podcast - "Commit Your Code!" where I interview and talk to some phenomenal developers and motivate you to stay on the coding journey!&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;You can learn A LOT from failing!&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;The lessons, the insight and the education a failure can give are unlike any other. You can learn things about yourself that you never knew before! How you handle yourself under pressure. How to pivot quickly. How to survive a hard situation.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;One of my biggest beliefs, if you fail, fail forward and fail fast.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;One thing I realized about many people, they will say "I am thinking about doing XYZ". Instead of actually doing it. They are thinking about it, asking their friends, seeing how it feels, might be a few weeks before they actually try it.&lt;/p&gt;

&lt;p&gt;Instead, I will say "I'm thinking about XYZ" and I will start on it right then. No delaying. If I fail, I want it to be fast. I don't want to waste all of this time and energy thinking about it before I even see if it is worth it.&lt;/p&gt;

&lt;p&gt;Let me try TODAY and if this sucks, I don't want to spend more than a few hours on it to find out.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Some times the hesitation to the starting line is worse than the failure.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We build up this idea, this thought, and almost become intimidated by it. If I start right away, I don't give myself enough time to be intimidated by it. I'm in the act of doing. I am lazer focused to reaching a goal.&lt;/p&gt;

&lt;p&gt;Don't psych yourself out. You are FAR MORE CAPABLE of the amazing things you THINK you can do. The only way you will find out though is if you take that first step.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Swift Action, Swift Results&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;If you delay an idea, getting tangible results will also be delayed. Think about that for a moment. You have this idea that you think is great. When you tell your friends about it, OF COURSE they say it is great! Isn't that funny how that works most of the time? Our friends don't want to hurt our feelings and they tell us something is great even if it isn't. When we finally try it, it is blatantly obvious that this was a bad idea but we took that reassurance from our friends that it was great! Sometimes, doing the action will show you right away that it was a bad idea. Don't delay the results! Swift Action, Swift Results! Find out if the idea actually has real merit. Everyone has a great opinion until it is time to purchase a product.&lt;/p&gt;

&lt;p&gt;Cut the time on thinking about doing something and increase the time of actually trying it out.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Tech Conference&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;I wanted to throw a tech conference for my city. Never threw a conference before but I knew I really wanted to bring resources and value to people here. I approached many people with experience. Everyone said "This isn't a smart move. COVID just hit. It isn't a good time. You don't have experience." I was gutted. I really wanted to do this.&lt;/p&gt;

&lt;p&gt;2 weeks go by and 1 person that I spoke with finally came back and said "If you really want to do this, if you really want to, I will spend some of my time to help you get this thing off of the ground."&lt;/p&gt;

&lt;p&gt;I just looked back and said "oh, did... Did you think that I was going to stop doing this when everyone else said no? I already have all of the speakers, the software we will use to stream and organized the tracks." I realized with COVID, planning this was going to be significantly easier! I don't have to worry about the actual logistics of getting people there. When everyone said no, I wanted to see if I could actually do this but I wanted to fail fast. In doing so, I was able to make a conference that over 3000 people were able to enjoy!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;I am not worried about you reaching a great level of success, I am confident you will.&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
I'm worried that you won't try something due to a fear of failure. There are lessons in those failures. But if you have to fail, fail fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep doing amazing things.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you like this article, chances are you'd like what I tweet as well. If you are curious, &lt;a href="https://www.twitter.com/DThompsonDev" rel="noopener noreferrer"&gt;have a look at my Twitter profile&lt;/a&gt;. Or check out my podcast - "Commit Your Code!" where I interview and talk to some phenomenal developers and motivate you to stay on the coding journey!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>motivation</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>Steps I Took To Become A Developer</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Fri, 14 Aug 2020 22:04:21 +0000</pubDate>
      <link>https://dev.to/dthompsondev/steps-i-took-to-become-a-developer-ogd</link>
      <guid>https://dev.to/dthompsondev/steps-i-took-to-become-a-developer-ogd</guid>
      <description>&lt;p&gt;&lt;em&gt;If you like this article, chances are you'd like what I tweet as well. If you are curious, &lt;a href="https://www.twitter.com/DThompsonDev" rel="noopener noreferrer"&gt;have a look at my Twitter profile&lt;/a&gt;. Or check out my podcast - "Commit Your Code!" where I interview and talk to some phenomenal developers and motivate you to stay on the coding journey!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;One of the most common questions I get asked &lt;strong&gt;"What path did you take to become a developer?"&lt;/strong&gt;. Now I am a pretty firm believer in it doesn't matter where you start &lt;strong&gt;AS LONG&lt;/strong&gt; as you start. Normally I recommend beginning on freecodecamp since that is where I began. The real reason why I recommend that is it is HARD to know where to start when you don't know anything. You don't know if you like frontend or backend. You have very rough ideas because you just don't know what you don't know! Education is a window and your understanding increases once you are exposed to something. If you spend a little time learning, you will actually have an idea of what you enjoy the most, then it is significantly easier to make a decision on what you like as a career path.&lt;/p&gt;

&lt;h1&gt;
  
  
  So I began with HTML and CSS.
&lt;/h1&gt;

&lt;p&gt;HTML and CSS were the beginning of my journey and I started making static websites. This was my real first taste of programming. This is usually a great beginning for a developer and the truth is, HTML and CSS are extremely powerful! Funny enough, the very first website I ever sold was only made with HTML and CSS! Was to a Mexican Restaurant that just needed a place to display their menu and store hours. I was eating there, before I ever had a job in tech, and mentioned that the current site they had could be significantly better. After a short conversation, I had my first client that I have had repeat business with over the years!&lt;/p&gt;

&lt;h1&gt;
  
  
  Open a github account
&lt;/h1&gt;

&lt;p&gt;You need to start storing those projects. Especially if you are an aspiring developer, you need to show your code to employers to demonstrate that you can do what you are saying you can! If you make a project, big or small, put it in your github.&lt;/p&gt;

&lt;h1&gt;
  
  
  Learn Javascript
&lt;/h1&gt;

&lt;p&gt;Javascript was my next step. Now my websites can be more interactive and dynamic! I increased the level of projects and really focused on making something that could stand out! Something I could talk about.&lt;/p&gt;

&lt;h1&gt;
  
  
  Went to meetups
&lt;/h1&gt;

&lt;p&gt;Meetups where the biggest thing that changed everything for me! It made me so focused and determined to become a developer because I walked into a room filled with developers that were passionate about helping others learn, grow and just hung out together! I instantly wanted to keep learning more and helping the community grow! I would bounce ideas off of developers and get tips. They were practically unofficial code reviews. They would critique my code and give me tips on how to keep getting better.&lt;/p&gt;

&lt;p&gt;Now meetups are all online and you can find a meetup pretty much anywhere and join. Highly recommend it! A great place to start searching for meetups is on meetup.com&lt;/p&gt;

&lt;h1&gt;
  
  
  Linkedin
&lt;/h1&gt;

&lt;p&gt;Linkedin was the biggest thing that led to my career. Linkedin is also the tool that I have used to help over 60 people land their first jobs in tech. You need to stand out where the hiring managers hang out! Create a stand out profile! If you need help there, check out my series on linkedin. I had 4 different hiring managers with me and we critiqued linkedin profiles and showed what actually shows up in the search to help you land in their job searches! youtube.com/DThompsonDev&lt;/p&gt;

&lt;h1&gt;
  
  
  Keep on learning!
&lt;/h1&gt;

&lt;p&gt;I am always learning. There is still so much that I just do not know! Tech is a life long journey of learning. You will never know it all. that is kind of the exciting part about this! You always get to learn new things and become better!&lt;/p&gt;

&lt;h1&gt;
  
  
  Backend
&lt;/h1&gt;

&lt;p&gt;I jumped to backend! I started with Python, absolutely love it but there were no jobs in my area for Python. So I dropped it and picked up Java. I really love backend and solving problems. From there I also learned SQL. This was what I needed to find my dream job in tech!&lt;/p&gt;

&lt;h3&gt;
  
  
  What matters the most is, you just don't stop.
&lt;/h3&gt;

&lt;p&gt;There will always be something to learn, there will always be things you can improve. Just don't stop. As long as you keep moving, even at the pace of a turtle, the possibility of your dream in tech is still alive. If you stop however, the only guarantee is that you dream in tech stops. So just don't stop. Keep progressing slowly. If you keep moving slowly, you will eventually reach a place, turn around and be shocked at how much you have actually achieved!&lt;/p&gt;

&lt;h1&gt;
  
  
  Keep doing amazing things!
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;If you like this article, chances are you'd like what I tweet as well. If you are curious, &lt;a href="https://www.twitter.com/DThompsonDev" rel="noopener noreferrer"&gt;have a look at my Twitter profile&lt;/a&gt;. Or check out my podcast - "Commit Your Code!" where I interview and talk to some phenomenal developers and motivate you to stay on the coding journey!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>career</category>
    </item>
    <item>
      <title>From frying chicken in gas stations to becoming a Software Engineer!</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Thu, 07 May 2020 03:07:14 +0000</pubDate>
      <link>https://dev.to/dthompsondev/from-frying-chicken-in-gas-stations-to-becoming-a-software-engineer-4ff4</link>
      <guid>https://dev.to/dthompsondev/from-frying-chicken-in-gas-stations-to-becoming-a-software-engineer-4ff4</guid>
      <description>&lt;p&gt;&lt;em&gt;If you like this article, chances are you'd like what I tweet as well. If you are curious, have a look at &lt;a href="//www.twitter.com/DThompsonDev"&gt;my Twitter profile&lt;/a&gt;. Or check out my podcast - "Commit Your Code!" where I interview and talk to some phenomenal developers and motivate you to stay on the coding journey!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The reason why I got into tech was because of a rapper.&lt;/p&gt;

&lt;p&gt;This rapper was being interviewed for investing several million dollars into a tech company. The interviewer asks the obvious question, "Why did you invest into a tech company?". He replied that he was learning how to code. This blew my mind. I had always thought that programmers were the rocket scientists and PhD holders of the world! I didn't know someone like me could have the opportunity to learn this!&lt;/p&gt;

&lt;p&gt;I was 30 and working in gas stations. I found myself at a fork in the road, I can stay in this life forever or it is time for a change. So I began learning to code on freecodecamp! The absolute best decision of my life.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Ftiornkchyqp0iz0zmpbp.png" class="article-body-image-wrapper"&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%2Fi%2Ftiornkchyqp0iz0zmpbp.png" alt="Frying Chicken" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My challenge was, I was working 80+ hours a week at that time. To learn, I had to be creative in order to create the hours in my day since they didn't exist. I knew I wanted to learn to be a developer. I knew my path was here. I was willing to do WHATEVER it took to make it happen! I began waking up at 2:30am daily to study and learn before work. I literally did not have the time otherwise to do it. I would code in the mornings and fry chicken and ring up customers in the afternoon. I would find myself at work thinking about these problems I was reading in the morning before work and try to figure them out!&lt;/p&gt;

&lt;p&gt;I would even write code in my note taking app and try the code when I got home to see if I was close! I was absolutely hooked!&lt;/p&gt;

&lt;p&gt;I started learning to code and in passing I heard about meetups. I Googled my area and found out we had some! I went to my first meetup! I had this very simple web app written in HTML, CSS and a small bit of Javascript. You would enter the URL for an image and it would return it with some coloring. Basically at this point of my life I could cure cancer with code lol. &lt;/p&gt;

&lt;p&gt;I walk into this meetup and instantly realize, Oh! I don't know sh--stuff. I don't know anything! People are speaking a foreign language saying things like C#, Java and SQL! I had no idea what this was BUT NOW I AM HOOKED! I told myself I will study, learn and grow! Right now I am a fly on the wall when all of these developers are talking but I guarantee I will be IN THE conversation soon enough!&lt;/p&gt;

&lt;p&gt;I kept learning. I would show up to meetups smelling like chicken but I kept going! Then something interesting happened.&lt;/p&gt;

&lt;p&gt;I would ask people, just like others, "How do you get that first job in tech?" Every response was the same as if a record was playing "OHHHHH MAN! The first job is the hardest job to find. It is so hard! BUT! Once you find the first job, the others after that are easier." I thought this was the WORST answer I ever heard in my whole life. Not only have you not answered the question, but you demoralized, demotivated and are now making me question the thing that I have spent the last 5 months learning! You also haven't even given me an action item to work on or a roadmap to follow. I couldn't accept this and realized others had to be facing the same issue.&lt;/p&gt;

&lt;p&gt;I wanted to change this. I wanted to create a way for aspiring developers to have an easier way of at least heading down the path to reach a first job, instead of that terrible answer.&lt;/p&gt;

&lt;p&gt;I started working with that meetup group, a group called Code Connector. I saw a way I could help others. I created a linkedin page and started creating a network focused on getting connections with hiring managers, recruiters and decision makers. It was working. I started talking to these people, networking with developers and the community around me! Things were coming together!&lt;/p&gt;

&lt;p&gt;I then left that group and was able to start GDG Memphis! A community that supports developers and brings resources to the community to help everyone grow! &lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fb5gb79qx3jcamd5l3jwo.png" class="article-body-image-wrapper"&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%2Fi%2Fb5gb79qx3jcamd5l3jwo.png" alt="GDG Memphis" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I was able to help create such an amazing community that helps lift each other up, but more than that, help people get jobs! Last year I helped almost 50 people land jobs in tech! Growing the entire community!&lt;/p&gt;

&lt;p&gt;Positive impact creates MORE positive impact! If you can positively effect a life, you will create a ripple, if we create enough ripples we will create a wave of change.&lt;/p&gt;

&lt;p&gt;I landed my dream job at an amazing company. Many of my new coworkers have literally been people that were coming to GDG Memphis meetups and landed their dream jobs in tech!&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2F2n8wemp14fn1udll6pau.png" class="article-body-image-wrapper"&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%2Fi%2F2n8wemp14fn1udll6pau.png" alt="Speeches" width="800" height="335"&gt;&lt;/a&gt;&lt;br&gt;
Now I have been able to experience and talk with some truly phenomenal people. I have given talks to prisoners learning to code, I have been able to go to Google and NOT be escorted out by security! I was allowed to be there! lol I got to speak with some phenomenal and passionate people! You can create positive impact, don't forget that. You are truly valuable!&lt;/p&gt;

&lt;p&gt;Keep doing amazing things!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you like this article, chances are you'd like what I tweet as well. If you are curious, have a look at &lt;a href="//www.twitter.com/DThompsonDev"&gt;my Twitter profile&lt;/a&gt;. Or check out my podcast - "Commit Your Code!" where I interview and talk to some phenomenal developers and motivate you to stay on the coding journey!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>motivation</category>
    </item>
    <item>
      <title>GitBash breakdown for beginners! Use git the way you would need to in a company position!</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Fri, 24 Apr 2020 20:27:33 +0000</pubDate>
      <link>https://dev.to/dthompsondev/gitbash-breakdown-for-beginners-use-git-the-way-you-would-need-to-in-a-company-position-4dlj</link>
      <guid>https://dev.to/dthompsondev/gitbash-breakdown-for-beginners-use-git-the-way-you-would-need-to-in-a-company-position-4dlj</guid>
      <description>&lt;p&gt;&lt;em&gt;If you like this article, chances are you'd like what I tweet as well. If you are curious, have a look at my &lt;a href="//www.twitter.com/DThompsonDev"&gt;Twitter&lt;/a&gt; profile. Or check out my podcast! "Commit Your Code!" Where we interview and talk to some phenomenal developers and motivate you to stay on the coding journey!&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;The last thread was about uploading a project to github using a simple method. But in any company you work you are going to need to use git or terminal. &lt;br&gt;
Have git bash installed then follow.&lt;/p&gt;

&lt;p&gt;First go to github &amp;amp; press New.&lt;br&gt;
Now we need a repository name. A repository is the space we are saving our code in. You can add a description to explain what is in this space, so if you come back after a few months you can remember what is in there.&lt;/p&gt;

&lt;p&gt;Now lets go ahead and create the repository!&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2F4ad1rj2obu63hh2wvgwj.png" class="article-body-image-wrapper"&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%2Fi%2F4ad1rj2obu63hh2wvgwj.png" alt="repository menu" width="665" height="623"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the URL in the box. And now go to the folder you have your project in.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fq53p9r2g96t1p57vlk19.png" class="article-body-image-wrapper"&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%2Fi%2Fq53p9r2g96t1p57vlk19.png" alt="Copy the URL" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Navigate to the folder you have the project in. I lead a group called GDG Memphis, so that is what I named this folder.&lt;/p&gt;

&lt;p&gt;Right click and you will see the option Git Bash here. Press it. If you do not see that, go to git bash and navigate to your folder. I will show you how.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2F2lctmbasbsuylgaom5oq.png" class="article-body-image-wrapper"&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%2Fi%2F2lctmbasbsuylgaom5oq.png" alt="Folder" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can type cd  which stands for change directory and this will allow you to go into another folder. You can go 1 at a time or a way to do it faster would be&lt;/p&gt;

&lt;p&gt;cd coding/GDGMemphis/gdgmemphis &lt;/p&gt;

&lt;p&gt;This will give the same result as what you see below. Either way will work.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fng4ebhx4nv9dkcy9rxlz.png" class="article-body-image-wrapper"&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%2Fi%2Fng4ebhx4nv9dkcy9rxlz.png" alt="Git bash cd" width="581" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So we need to initialize the folder. We will do that by using &lt;/p&gt;

&lt;p&gt;git init&lt;/p&gt;

&lt;p&gt;This is making a .git folder and will be necessary so we can push the contents of this folder. After the init I used git status to see what the status is of the files in this folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2F1l6lqyb685iyrle07hvd.png" class="article-body-image-wrapper"&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%2Fi%2F1l6lqyb685iyrle07hvd.png" alt="git init" width="567" height="326"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here i added our files. Notice the red file names are now green? This shows the files that we have added so that we can commit them.&lt;/p&gt;

&lt;p&gt;to add files just do &lt;br&gt;
git add &lt;br&gt;
OR! &lt;br&gt;
git add .&lt;/p&gt;

&lt;p&gt;The period means add everything in this folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fm7tpt1hft6h2kyza5amj.png" class="article-body-image-wrapper"&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%2Fi%2Fm7tpt1hft6h2kyza5amj.png" alt="git add" width="568" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we need to COMMIT the files. Committing means we want these files to be sent to our github repository! To commit we'll use&lt;/p&gt;

&lt;p&gt;git commit -m "our message"&lt;/p&gt;

&lt;p&gt;ALWAYS write a good commit message. this text will be displayed next to the file name. Professional developers PRAISE detailed messages! Definitely do them.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fcrr4l9zy16nhn5qpeobm.png" class="article-body-image-wrapper"&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%2Fi%2Fcrr4l9zy16nhn5qpeobm.png" alt="commit" width="568" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now here is where we add the URL of where we will send our COMMIT or our Files!&lt;br&gt;
so we will use&lt;/p&gt;

&lt;p&gt;git remote add origin &lt;a href="https://github.com/" rel="noopener noreferrer"&gt;https://github.com/&lt;/a&gt;/&lt;/p&gt;

&lt;p&gt;Remember that URL we copied above from the Third image? Time to use that bad boy and paste it in!&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fh45jn0yyqvvqspw8k7y9.png" class="article-body-image-wrapper"&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%2Fi%2Fh45jn0yyqvvqspw8k7y9.png" alt="remote" width="573" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can't use ctrl + v to paste. you have to right click and paste or use CTRL + Shift + insert! Now you know why we have an insert key on our keyboard! lol After that type&lt;/p&gt;

&lt;p&gt;git push -u master origin&lt;/p&gt;

&lt;p&gt;The master branch is the main branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2F1d9hwx7p6s0mfu79cs9f.png" class="article-body-image-wrapper"&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%2Fi%2F1d9hwx7p6s0mfu79cs9f.png" alt="push" width="592" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you work in a company, you will be expected to work on your OWN branch. after the code is reviewed and tested, then you will MERGE that branch to the master! So how can we do that? Super easy! &lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fff1j04x1rplkelp6rfw3.png" class="article-body-image-wrapper"&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%2Fi%2Fff1j04x1rplkelp6rfw3.png" alt="branch" width="654" height="148"&gt;&lt;/a&gt;&lt;br&gt;
Notice the green text on the right? Shows which branch we are on!&lt;/p&gt;

&lt;p&gt;A working branch is great and will prevent you from destroying the original code by accident! GET USED TO THIS! Vital in any business setting!&lt;/p&gt;

&lt;p&gt;git branch  creates the branch&lt;br&gt;
git checkout switches you to that new branch!&lt;/p&gt;

&lt;p&gt;You have made it the whole way! This was a lot! I WISH I spent more time learning git before getting hired and not knowing how to navigate branches!&lt;/p&gt;

&lt;p&gt;You made it the whole way and you are incredible!&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fyomlvbf484kzk3ixej1u.png" class="article-body-image-wrapper"&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%2Fi%2Fyomlvbf484kzk3ixej1u.png" alt="Proud of you" width="330" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="//www.twitter.com/DThompsonDev"&gt;Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>git</category>
      <category>github</category>
      <category>career</category>
    </item>
    <item>
      <title>GITHUB Breakdown for beginners THREAD!</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Fri, 24 Apr 2020 20:04:28 +0000</pubDate>
      <link>https://dev.to/dthompsondev/github-breakdown-for-beginners-thread-3e39</link>
      <guid>https://dev.to/dthompsondev/github-breakdown-for-beginners-thread-3e39</guid>
      <description>&lt;p&gt;&lt;em&gt;If you like this article, chances are you'd like what I tweet as well. If you are curious, have a look at my &lt;a href="//www.twitter.com/DThompsonDev"&gt;Twitter&lt;/a&gt; profile. Or check out my podcast! "Commit Your Code!" Where we interview and talk to some phenomenal developers and motivate you to stay on the coding journey!&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;We have a project we want to upload to github! So let's do this step by step.&lt;br&gt;
Left hand side of the screen, you will see a green button that says New. Press that.&lt;/p&gt;

&lt;p&gt;Now we need a repository name. A repository is the space we are saving our code in. You can add a description to explain what is in this space, so if you come back after a few months you can remember what is in there.&lt;/p&gt;

&lt;p&gt;Now lets go ahead and create the repository!&lt;/p&gt;

&lt;p&gt;Now one way we can do this, is by copying and pasting our code. By pressing the Create a new file link, it will open an editor that will allow us to paste our code in.&lt;br&gt;
&lt;a href="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%2Fi%2Fax0h1gb9rkgvicjnlnlh.png" class="article-body-image-wrapper"&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%2Fi%2Fax0h1gb9rkgvicjnlnlh.png" alt="Create a new file on github" width="384" height="108"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where we would paste our code and then press Commit new file&lt;br&gt;
Your code is now saved in the repository!&lt;br&gt;
&lt;a href="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%2Fi%2Fcpb57mh3creffem1rmjy.jpg" class="article-body-image-wrapper"&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%2Fi%2Fcpb57mh3creffem1rmjy.jpg" alt="github text editor" width="680" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NOW! Learn how to do this using Git! Learn how to do this like a professional!&lt;br&gt;
&lt;a href="https://dev.to/dthompsondev/gitbash-breakdown-for-beginners-use-git-the-way-you-would-need-to-in-a-company-position-4dlj"&gt;GitBash breakdown for beginners!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="//www.twitter.com/DThompsonDev"&gt;Twitter!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>codenewbie</category>
      <category>beginners</category>
    </item>
    <item>
      <title>PRISONERS learning to code. I spoke to a room full of prisoners to motivate them. Here is how that went.</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Sat, 04 Apr 2020 02:02:11 +0000</pubDate>
      <link>https://dev.to/dthompsondev/prisoners-learning-to-code-what-i-learned-from-a-room-full-of-prisoners-18m3</link>
      <guid>https://dev.to/dthompsondev/prisoners-learning-to-code-what-i-learned-from-a-room-full-of-prisoners-18m3</guid>
      <description>&lt;p&gt;The passion could tear down the walls, The enthusiasm could lift the roof and the eager eyes ready to learn lifted from their computer screens. All eyes fell on me. I was in a room filled with prisoners... learning to code.&lt;/p&gt;

&lt;p&gt;"The deck is stacked against you and there isn't a person around that wants you to succeed! I believe this is your new beginning, IT DOESN'T HAVE TO BE YOUR END! But You need to be so da*n good that they HAVE to need you! You need to be so good, that they have to pay attention to you. You need to be so good, that they have to ask someone 'Who is that? What is their name?' YOU NEED TO BE SO GOOD THAT THEY LEARN how to pronounce your name correctly. Be so good, that you... are undeniable."&lt;/p&gt;

&lt;p&gt;No internet, lessons and work pre-prepared. The prisoners have nothing on their side for success except the amazing people that put on this program, their heart, their stamina and their sheer will NOT TO be denied. They are working hard, putting in the hours to produce a better version of themselves.&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2Fg88i0xpbwsnaafeai2eg.png" class="article-body-image-wrapper"&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%2Fi%2Fg88i0xpbwsnaafeai2eg.png" alt="Danny Thompson with the people that work with the state to do this program" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
(Danny Thompson with the people that work with the state to do this program.)&lt;/p&gt;

&lt;p&gt;I supported this program right away for a BIG reason. This is the situation of not giving a man a fish but teaching him to fish. You are giving an actual tool to these humans, to change the outcome of their lives. They are landing decent jobs when they get out which will deter them from wanting to return. They can freelance, they can pay their bills and not be swayed back into their old lifestyles!&lt;/p&gt;

&lt;p&gt;Positive Impact Creates Positive Impact!&lt;/p&gt;

&lt;p&gt;The reason why this program exists is there is factual proof that shows the recidivism rate for inmates that learns to code drops close to ZERO. Working with these inmates, I was able to see their drive to create change in their lives.&lt;/p&gt;

&lt;p&gt;Now if these people can push themselves to get to the point of creating the change they want with ALL OF THE ODDS against them. Then shouldn't you be able to hit the goals you are going for?&lt;/p&gt;

&lt;p&gt;"Why is it so hard to learn to code? Why can't I pick up code easily? Why is it so painful to learn how to program?! Why is this happening to me!?!" &lt;/p&gt;

&lt;p&gt;WHY NOT YOU! It should happen to all of us! The greatest pains have hardened all of us into who we currently are. Embrace the circumstance to reach the level you want to achieve!&lt;/p&gt;

&lt;p&gt;If a prisoner can see the light at the end of the tunnel. If they can say "I will not go quietly into the night! I will not give up!" Then you can too! You are phenomenal beyond measure! It is time to act like it. Recognize how valuable you are, shock your mind and SHOW YOURSELF how amazing you are!&lt;/p&gt;

&lt;p&gt;I am Danny Thompson and I can't wait to see how amazing you become.&lt;br&gt;
You can find me on twitter &lt;a class="mentioned-user" href="https://dev.to/dthompsondev"&gt;@dthompsondev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This last photo is with our meetup community GDG Memphis. &lt;br&gt;
&lt;a href="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%2Fi%2F6n95emmq0o9p807eehaw.png" class="article-body-image-wrapper"&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%2Fi%2F6n95emmq0o9p807eehaw.png" alt="GDG Memphis community" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>beginners</category>
      <category>career</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Don't worry about HOW long it takes you to become a programmer!</title>
      <dc:creator>Danny Thompson</dc:creator>
      <pubDate>Thu, 02 Apr 2020 20:23:48 +0000</pubDate>
      <link>https://dev.to/dthompsondev/don-t-worry-about-how-long-it-takes-you-to-become-a-programmer-85h</link>
      <guid>https://dev.to/dthompsondev/don-t-worry-about-how-long-it-takes-you-to-become-a-programmer-85h</guid>
      <description>&lt;p&gt;The only journey in tech that matters, is your own. Stop comparing yourself to these developers on social media. Some of them are fast learners, Some had a head start. Also, some lie! Stop using social media as the ruler to which you gauge and measure your life on.&lt;/p&gt;

&lt;p&gt;A good friend of mine took 6 years to become a software engineer. It took me a little less than a year. Want to know something interesting? Both of our titles are "Software Engineer". His title isn't "Took 6 years Engineer". No. Same title. Same paycheck. There is no reward for rushing through and there is no punishment for taking longer. The ONLY  journey in tech that matters, is your own!&lt;/p&gt;

&lt;p&gt;&lt;a href="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%2Fi%2F9ngj9x5fam0efrb7bdpj.jpg" class="article-body-image-wrapper"&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%2Fi%2F9ngj9x5fam0efrb7bdpj.jpg" alt="Teaching developers" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The only path that matters is your own. So many people get caught up in the idea of "I need to become a developer in 6 months!", "90 days until I make 6 figures!", "6 weeks until I change my life!". This isn't real. Sure there are some cases where someone really did well and got a job quickly, but for each one of those cases there has to be hundreds that took ten times longer to achieve the same.&lt;/p&gt;

&lt;p&gt;Stop under valuing yourself! You are amazing and valuable! You are truly great! Bring value to the table and companies will want you. Increase your skill set and they will be drawn to you and your abilities!&lt;/p&gt;

&lt;p&gt;I look forward to seeing you grow.&lt;/p&gt;

&lt;p&gt;You may be down, but you haven't sung your last song yet. You haven't shown your best talent yet, you haven't tapped into your abilities yet. It is time YOU shock yourself! Show yourself how great you are!&lt;/p&gt;

&lt;p&gt;Follow me on Twitter &lt;a class="mentioned-user" href="https://dev.to/dthompsondev"&gt;@dthompsondev&lt;/a&gt;&lt;br&gt;
Hope I can keep motivating and inspiring you.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>career</category>
      <category>javascript</category>
      <category>codenewbie</category>
    </item>
  </channel>
</rss>
