<?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: Tawanda Nyahuye</title>
    <description>The latest articles on DEV Community by Tawanda Nyahuye (@towernter).</description>
    <link>https://dev.to/towernter</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F393559%2Fe536d6a8-f2a6-47dd-a600-682c1ea4a48e.jpg</url>
      <title>DEV Community: Tawanda Nyahuye</title>
      <link>https://dev.to/towernter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/towernter"/>
    <language>en</language>
    <item>
      <title>The German Tank Problem: Why You Need UUIDs</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Sun, 28 Jun 2026 17:44:35 +0000</pubDate>
      <link>https://dev.to/towernter/the-german-tank-problem-why-you-need-uuids-85p</link>
      <guid>https://dev.to/towernter/the-german-tank-problem-why-you-need-uuids-85p</guid>
      <description>&lt;p&gt;In World War II, the Allies had a very expensive question and no good way to answer it: &lt;strong&gt;how many tanks is Germany actually building?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The official method was spies, intercepted chatter, and educated guessing. The official method was also, as it turns out, wildly, embarrassingly wrong, intelligence estimates put German tank production at well over a thousand a month.&lt;/p&gt;

&lt;p&gt;Then some statisticians showed up and ruined everyone's mystique by doing arithmetic.&lt;/p&gt;

&lt;p&gt;See, the Germans were excellent engineers, which is another way of saying they were pathologically organized. Every tank rolled off the line with neatly sequential serial numbers stamped on the gearbox, the chassis, the road wheels, everything. And every time the Allies captured or destroyed a tank, those numbers got written down.&lt;/p&gt;

&lt;p&gt;So the statisticians stopped trying to &lt;em&gt;spy&lt;/em&gt; on the factories and started reading the &lt;strong&gt;serial numbers&lt;/strong&gt; of the wreckage. If you've captured a handful of tanks and the highest serial number you've seen is &lt;em&gt;m&lt;/em&gt;, and you've seen &lt;em&gt;k&lt;/em&gt; of them, then the total number produced is roughly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;N ≈ m + (m / k) − 1&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The intuition is beautiful and slightly evil: the biggest number you've seen tells you roughly how close you are to the top, and how many you've seen tells you how confident to be about that. The gaps between the serials you &lt;em&gt;do&lt;/em&gt; have tell you about the ones you &lt;em&gt;don't&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;For one month in 1942, the spies said Germany was making around 1,500 tanks. The statisticians, armed with nothing but captured serial numbers and a formula, said &lt;strong&gt;327&lt;/strong&gt;. After the war, the actual German production records were recovered.&lt;/p&gt;

&lt;p&gt;The real number was &lt;strong&gt;342&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The spies missed by a thousand. The nerds missed by fifteen. Somewhere, a very smug statistician got a medal, and the lesson was carved into the bedrock of intelligence work forever:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sequential numbers leak.&lt;/strong&gt; If your serial numbers go 1, 2, 3, 4, anyone who sees a few of them can estimate how many of you exist.&lt;/p&gt;

&lt;p&gt;I think about this every single time I look at a URL that says &lt;code&gt;/users/1042&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your database is the German army
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable part. Almost every backend you've ever written is the Wehrmacht, cheerfully stamping sequential serial numbers on everything and then handing them to strangers.&lt;/p&gt;

&lt;p&gt;You spin up a Postgres table. The primary key is &lt;code&gt;id SERIAL&lt;/code&gt; — auto-incrementing integer, because of course it is, that's the default and it's beautiful and it sorts nicely. User 1 is you. User 2 is your co-founder. User 3 is your mom. Everything is fine.&lt;/p&gt;

&lt;p&gt;Then you build the profile page. The route is &lt;code&gt;/users/3&lt;/code&gt;. You ship it. You are now a German tank.&lt;/p&gt;

&lt;p&gt;Because here is what your competitor, or a bored teenager, or a journalist, or anyone with a browser, can now do. They sign up for your app today and get assigned &lt;code&gt;id = 4,317&lt;/code&gt;. They wait a week. They sign up again with a different email and get &lt;code&gt;id = 4,981&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Subtract.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You got 664 signups this week.&lt;/strong&gt; They didn't breach anything. They didn't hack you. They read your serial numbers, exactly like the Allies read the gearboxes, and your growth rate fell out of the arithmetic. Your "we're crushing it, investors love us" pitch deck just got fact-checked by a stranger with two throwaway emails and the subtraction skills of a nine-year-old.&lt;/p&gt;

&lt;p&gt;It gets worse, because IDs leak more than &lt;em&gt;count&lt;/em&gt;. They leak &lt;em&gt;order&lt;/em&gt; and &lt;em&gt;time&lt;/em&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/invoices/58&lt;/code&gt; on launch day tells the world you have billed exactly 58 times in your company's entire existence.&lt;/li&gt;
&lt;li&gt;A support ticket numbered &lt;code&gt;#7&lt;/code&gt; tells your enterprise customer they are, uh, one of your first seven enterprise customers. Inspiring.&lt;/li&gt;
&lt;li&gt;Two orders placed a minute apart with IDs &lt;code&gt;9,000&lt;/code&gt; and &lt;code&gt;9,003&lt;/code&gt; tell a competitor you process roughly three orders a minute at peak.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then there's the part the security people care about, which is that sequential IDs aren't just &lt;em&gt;informative&lt;/em&gt;, they're &lt;em&gt;guessable&lt;/em&gt;. If I can see &lt;code&gt;/api/orders/9000&lt;/code&gt;, I can also just... try &lt;code&gt;/api/orders/8999&lt;/code&gt;. And &lt;code&gt;8998&lt;/code&gt;. And if your authorization is even slightly lazy, and friend, it is I am now reading other people's orders. This has a name. It's called IDOR (Insecure Direct Object Reference), it's been in the OWASP Top 10 for approximately forever, and it is almost always born the moment someone exposes a sequential primary key to the outside world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter the UUID, wearing a fake moustache
&lt;/h2&gt;

&lt;p&gt;The fix is to stop stamping your serial numbers in order. &lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;UUID&lt;/strong&gt; (Universally Unique Identifier) is a 128-bit value that, in its most common form (v4), is essentially random:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;f47ac10b-58cc-4372-a567-0e02b2c3d479
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at that gorgeous nonsense. What's the previous user's ID? You have no idea. What's the next one? No idea. How many users exist? &lt;strong&gt;You cannot tell&lt;/strong&gt;, because there's no sequence to read, no maximum to anchor on, no gaps to measure. The German Tank Problem needs serial numbers in a row. A UUID is a serial number that fell into a wood chipper. The formula has nothing to bite on.&lt;/p&gt;

&lt;p&gt;As a bonus, and this is the part that wins over the people who don't care about counting attacks, UUIDs are &lt;em&gt;globally&lt;/em&gt; unique without coordination. Two different servers, two different services, an offline mobile client on a plane, can all generate IDs at the same time and never collide. No round-trip to the database to ask "what number am I allowed to use next?" You can generate the ID &lt;em&gt;before&lt;/em&gt; the row even exists. For anyone building distributed systems, that property alone is worth the price of admission.&lt;/p&gt;

&lt;p&gt;So: random, unguessable, count-hiding, coordination-free. We solved it. Ship it. Close the tab.&lt;/p&gt;

&lt;h2&gt;
  
  
  Okay, here's where I have to be the annoying friend
&lt;/h2&gt;

&lt;p&gt;Because this idea has a failure mode on each end, and I refuse to write a post that pretends UUIDs are free.&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%2Fhl010vql6km9gil0qcqd.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%2Fhl010vql6km9gil0qcqd.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They are not free.&lt;/strong&gt; A &lt;code&gt;bigint&lt;/code&gt; is 8 bytes. A UUID is 16, and if you store it as text like a maniac it's 36. Across a hundred-million-row table with a dozen foreign keys pointing at it, that overhead is not theoretical, it's your storage bill and your RAM.&lt;/p&gt;

&lt;p&gt;But the &lt;em&gt;real&lt;/em&gt; knife is the index. Your database stores its primary key in a B-tree, which is fastest and tidiest when new values arrive in roughly increasing order, every insert tucks neatly onto the end. A random UUIDv4 arrives like a drunk guest who sits &lt;em&gt;between&lt;/em&gt; two people at every table. The database has to constantly split pages, shuffle things around, and re-read cold parts of the index off disk. This is called write amplification and page fragmentation, and it's why someone, somewhere, migrated a high-traffic table to random UUIDs and watched their insert performance fall off a cliff and then wrote a furious blog post about it. (You will read that post right before making the same mistake. It's tradition.)&lt;/p&gt;

&lt;p&gt;So we did what engineers always do: we fixed the fix.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UUIDv7&lt;/strong&gt; (standardized in 2024) puts a timestamp in the high bits and randomness in the low bits. So IDs trend upward over time — the B-tree is happy again, while still being unguessable and &lt;em&gt;uncountable&lt;/em&gt;. You can't subtract two of them to get a signup count. This is, for most apps, the correct default in 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ULIDs&lt;/strong&gt; do basically the same trick with a friendlier, sortable text encoding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snowflake IDs&lt;/strong&gt; (the Twitter classic) cram a timestamp, a machine ID, and a counter into a compact 64 bits — smaller and sortable, at the cost of leaking a little timing info.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But notice the catch, because it's the whole German Tank Problem sneaking back in the side door: &lt;strong&gt;a time-ordered ID still leaks the one thing it's ordered by, time.&lt;/strong&gt; UUIDv7 won't tell anyone your total user count, but it &lt;em&gt;will&lt;/em&gt; whisper roughly &lt;em&gt;when&lt;/em&gt; each record was created. That's a much smaller leak than "subtract for the growth rate," but it's not zero. If creation timestamps are sensitive in your domain, even v7 is a partial disrobing. Pick your poison on purpose.&lt;/p&gt;

&lt;p&gt;And the sneakiest trap of all: &lt;strong&gt;an unguessable ID is not an authorization system.&lt;/strong&gt; A UUID being hard to guess is not the same as a UUID being &lt;em&gt;protected&lt;/em&gt;. If your only defense against me reading someone else's invoice is "well, they'd have to guess a 122-bit random number," you have built a password and called it an ID. UUIDs slam the door on &lt;em&gt;enumeration&lt;/em&gt;. They do absolutely nothing if you forget to check whether the person holding the ID is actually allowed to use it. Check your authz. The random ID is the lock; the auth check is the guard. You need both.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what do you actually do tomorrow
&lt;/h2&gt;

&lt;p&gt;You can't un-stamp the serial numbers on a system you've already shipped, but you fully control two dials, so go set them on purpose:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stop exposing your primary key.&lt;/strong&gt; The cleanest move on most teams: keep a boring auto-increment &lt;code&gt;bigint&lt;/code&gt; as the &lt;em&gt;internal&lt;/em&gt; primary key (your indexes stay fast, your joins stay cheap) and add a &lt;em&gt;separate&lt;/em&gt; random external ID — a UUIDv7 — for anything the outside world ever sees. URLs, API responses, invoice numbers. The fast key stays in the basement; the wood-chipper key goes out front.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Default new public-facing IDs to UUIDv7, not v4.&lt;/strong&gt; You get the count-hiding without setting your write performance on fire. Reach for v4 only when you specifically &lt;em&gt;want&lt;/em&gt; zero time signal and don't care about index locality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Then check your authorization anyway&lt;/strong&gt;, because the ID was never the security boundary. It just stops people from reading you like a captured gearbox.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Allies won that particular round of the war with a formula and a pile of serial numbers, because the other side was tidy enough to number everything in order and careless enough to let those numbers be seen.&lt;/p&gt;

&lt;p&gt;Don't be tidy where it counts against you. Number your tanks at random.&lt;/p&gt;

&lt;p&gt;The statisticians are still out there. They are still very smug. And the next time someone signs up for your app twice in a week just to subtract the IDs, you get to be the insufferable person who already shipped UUIDv7, and is, annoyingly, fine.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>api</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>DESIGN THINKING SKILLS: What Makes Designers Successful?</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Mon, 22 Jun 2026 06:26:00 +0000</pubDate>
      <link>https://dev.to/towernter/design-thinking-skills-what-makes-designers-successful-1558</link>
      <guid>https://dev.to/towernter/design-thinking-skills-what-makes-designers-successful-1558</guid>
      <description>&lt;p&gt;People who make great products or services share certain skills. It is not a fancy qualification. It is not natural talent. It is a simple way of thinking called &lt;strong&gt;Design Thinking&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is important to identify these skills so that we can also pick them up.&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%2Fjhhwx14ulggcf1vmvfru.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%2Fjhhwx14ulggcf1vmvfru.png" alt=" " width="500" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Can't We Just Wing It?
&lt;/h2&gt;

&lt;p&gt;"Why not just build the thing and fix problems later?" A lot of teams do this. Most of them end up with a product that nobody uses.&lt;/p&gt;

&lt;p&gt;The difference between a product people love and one that nobody touches is simple. The winning team actually understood the people they were building for. The losing team just guessed.&lt;/p&gt;

&lt;h2&gt;
  
  
  So What Is Design Thinking?
&lt;/h2&gt;

&lt;p&gt;Design thinking is a way of solving problems that does two things:&lt;/p&gt;

&lt;p&gt;It puts the &lt;strong&gt;user first&lt;/strong&gt;, you think about the real people who will use your product, not just your own ideas about them.&lt;/p&gt;

&lt;p&gt;It focuses on &lt;strong&gt;solutions&lt;/strong&gt;, instead of spending all your time talking about what is wrong, you spend your time building what could be right. I know this is hard. The normal human instinct when something breaks is to find the person responsible and make it their problem. Design thinking says that is a waste of everyone's time. Find the fix instead.&lt;/p&gt;

&lt;p&gt;For example. A company notices its staff avoid using the new internal system. The old way is to scream at employees, threaten them with warnings, make them write reports, or send the classic "please refer to the training manual" email that nobody reads. The design thinking way is to sit with employees, watch them use the system, and find out the main button is hidden on the wrong page. Then you move the button. Simple solution. Real impact.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdlbyxl59t0sruevolha4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdlbyxl59t0sruevolha4.png" alt=" " width="547" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The thing that makes all of this work is &lt;strong&gt;empathy&lt;/strong&gt;. This means you genuinely care about how other people feel and what they go through. Without this, you are just building things for yourself and hoping others like 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc1qhv3jz46j97k311xo4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc1qhv3jz46j97k311xo4.png" alt=" " width="611" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Design Thinking Framework
&lt;/h2&gt;

&lt;p&gt;The design thinking process can be broken down into three steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Explore&lt;/li&gt;
&lt;li&gt;Create&lt;/li&gt;
&lt;li&gt;Implement&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjaqtzqyme9pnpez891r6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjaqtzqyme9pnpez891r6.png" alt=" " width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Explore — Go and See
&lt;/h3&gt;

&lt;p&gt;This is the step most people skip. It is also the most important one.&lt;/p&gt;

&lt;p&gt;Before you build anything, go talk to real people. Watch how they do things today. Ask questions. Listen more than you talk. Ask "why" again and again until you find the real problem hiding under the surface.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvsxv2oruhu38g6kqp1vx.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvsxv2oruhu38g6kqp1vx.png" alt=" " width="800" height="1312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You are not trying to prove your idea is right. You are trying to learn something that surprises you. If nothing surprises you, you have not talked to enough people.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Create — Try Many Ideas
&lt;/h3&gt;

&lt;p&gt;Most people think this is where design thinking starts. It is not. But this is where the fun begins.&lt;/p&gt;

&lt;p&gt;First, write down every idea you have. Even the silly ones. Linus Pauling said the way to get good ideas is to get lots of ideas and throw the bad ones away. So write them all down first.&lt;/p&gt;

&lt;p&gt;Then, pick your best ideas and build a rough version of each one. This is called a &lt;strong&gt;prototype&lt;/strong&gt;. It does not have to look good. It just has to be something a real person can try.&lt;/p&gt;

&lt;p&gt;A paper drawing is fine. A simple clickable screen is fine. Anything that lets a real human say "I like this" or "this does not make sense" is good enough. As Reid Hoffman said, "If you are not embarrassed by the first version of your product, you've launched too late." You are not trying to get it perfect. You are trying to get feedback fast.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Implement — Ship It and Keep Learning
&lt;/h3&gt;

&lt;p&gt;When you finally launch, the work is not done. Watch how people actually use what you built. It will surprise you. Take what you learn and go back to step one.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0fbtbq0lr43zsu8b552r.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0fbtbq0lr43zsu8b552r.png" alt=" " width="800" height="805"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The best teams never really stop exploring. Every version they ship teaches them something for the next one.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1t1vhk1q6ohqelbiunz7.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1t1vhk1q6ohqelbiunz7.png" alt=" " width="640" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  This Is Not Just for Designers
&lt;/h2&gt;

&lt;p&gt;Design thinking is not about colours and fonts. Anyone can use it. A nurse, a teacher, a software developer, a shop owner, if you solve problems for other people, this way of thinking is for you.&lt;/p&gt;

&lt;p&gt;The skills are simple: be curious, care about people, try many ideas before picking one, and test before you polish.&lt;/p&gt;

&lt;p&gt;Start practising them today. Next time you face a hard problem, do not sit and stare at it. Go talk to the person who has the problem. Build the simplest possible answer. Then learn from what happens.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>design</category>
      <category>product</category>
      <category>ux</category>
    </item>
    <item>
      <title>Is Your AI Assistant Making You a Better Developer, or Just a Faster One?</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Fri, 19 Jun 2026 10:57:48 +0000</pubDate>
      <link>https://dev.to/towernter/is-your-ai-assistant-making-you-a-better-developer-or-just-a-faster-one-19o8</link>
      <guid>https://dev.to/towernter/is-your-ai-assistant-making-you-a-better-developer-or-just-a-faster-one-19o8</guid>
      <description>&lt;p&gt;It's 11 pm. You have been staring at the same bug for three hours. You are tired. You give the whole thing to Codex or Claude and say, "Just fix this".&lt;br&gt;
It gives you a solution. Tests pass. You commit and go to bed.&lt;/p&gt;

&lt;p&gt;Did you understand what just fixed your bug?&lt;/p&gt;

&lt;p&gt;I have done this, and I am sure most of us have. For me, the problem is not using AI to get unstuck. The problem is that when you do it so often, you stop being able to get yourself unstuck. I am afraid of a situation where one day, you are in an interview, or an outage, or a code review, and there is no AI.&lt;/p&gt;

&lt;p&gt;I would also like to assume that for most people, AI handles the boring parts, and you get to focus on the hard thinking, meaning you ship better work in less time. That is real, and it is great.&lt;/p&gt;

&lt;p&gt;But there is another version where you are just getting faster at not learning anything.&lt;/p&gt;

&lt;p&gt;What do you think? &lt;em&gt;Is Your AI Assistant Making You a Better Developer, or Just a Faster One?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Luck == Opportunity Meets Preparation</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Tue, 16 Jun 2026 12:32:41 +0000</pubDate>
      <link>https://dev.to/towernter/luck-opportunity-meets-preparation-58g9</link>
      <guid>https://dev.to/towernter/luck-opportunity-meets-preparation-58g9</guid>
      <description>&lt;p&gt;There's a line usually pinned on the Roman philosopher Seneca: &lt;em&gt;luck is what happens when preparation meets opportunity.&lt;/em&gt; People put it all over social media and like most things on social media, it gets repeated so often that it stops meaning anything.&lt;/p&gt;

&lt;p&gt;So let me try to make it mean something again, with a math equation and a football match that happened recently at the latest FIFA World Cup 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  The equation nobody writes down
&lt;/h2&gt;

&lt;p&gt;We talk about luck like it's a single mysterious force, either you have it or you don't. But it's not one thing. It's two things multiplied together:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Luck = Preparation × Opportunities&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Look at what that multiplication does. If your preparation is zero, it doesn't matter how many opportunities show up, zero times anything is still zero. And if you're the most prepared person alive but you never put yourself in front of a single opportunity, same result. Zero.&lt;/p&gt;

&lt;p&gt;The lucky people aren't the ones who got &lt;em&gt;more&lt;/em&gt; luck handed to them. They're the ones who kept both numbers high. They got good &lt;em&gt;and&lt;/em&gt; they kept showing up to the table where things happen.&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%2Fp2mw10ot24059nj2dvzu.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%2Fp2mw10ot24059nj2dvzu.png" alt=" " width="490" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hold that thought. Let's go to Texas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Japan, the Netherlands, and the 88th minute
&lt;/h2&gt;

&lt;p&gt;On June 14th, 2026, Japan played the Netherlands in their World Cup group opener in Arlington, Texas. On paper it was a mismatch in the most literal, physical sense.&lt;/p&gt;

&lt;p&gt;The Netherlands are &lt;em&gt;tall&lt;/em&gt;. Van Dijk, Van de Ven, the whole spine of that team is built like a row of wardrobes. Japan are one of the shorter sides in world football, quick, technical, but not the people you'd bet on to win a header. If you were designing a contest specifically to humiliate the Japanese, you'd make it about jumping.&lt;/p&gt;

&lt;p&gt;And for most of the night, the script ran exactly as the bodies predicted. The Dutch dominated the run of play, around 60% possession, more passes, more touches in the box, the better expected goals. Van Dijk, a defender, rose for a cross and headed the Netherlands ahead. Later Summerville restored their lead. The Oranje even won the aerial duels comfortably, around 74% of them. The taller, richer, more fancied team was doing exactly what everyone assumed it would.&lt;/p&gt;

&lt;p&gt;Then the 89th minute happened. A ball was worked into the box, Koki Ogawa rose at the back of it, and the move ended with Daichi Kamada finishing past a flailing Dutch keeper. 2-2. A point stolen, against giants, right at the death.&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%2F3nhsw36iux8gqlzcm1pc.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%2F3nhsw36iux8gqlzcm1pc.png" alt="The Nertherlands vs Japan" width="799" height="525"&gt;&lt;/a&gt;&lt;br&gt;
(Credit: FIFA)&lt;/p&gt;

&lt;p&gt;Now a fun stat that flips the whole story, and the reason this match is actually &lt;em&gt;perfect&lt;/em&gt; for what we're about to talk about. You'd assume the dominant Dutch were the ones bombarding the box with crosses. They weren't. &lt;strong&gt;Japan attempted more crosses than the Netherlands, 23 to 21.&lt;/strong&gt; The team that was second-best on possession, second-best on xG, and &lt;em&gt;losing the aerial battle&lt;/em&gt; just kept whipping balls into the box anyway, over and over, especially once the subs came on. Most of those crosses went nowhere. And then, in the 89th minute, one of them finally found a head.&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%2F9y67x0h59o6f359otn7p.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%2F9y67x0h59o6f359otn7p.png" alt=" " width="800" height="611"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So both halves of the truth are true at once, which is what makes it a great story:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They raised their opportunities by crossing it 23 times, and their preparation cashed the one that landed.&lt;/strong&gt; A team that kept firing balls in long after it looked hopeless, that had drilled what to do when one finally dropped, that hadn't mentally checked out at 2-1 down, that team converted the half-second the universe finally handed them. The volume created the chance; the preparation finished it.&lt;/p&gt;

&lt;p&gt;That's the whole equation in one match. &lt;strong&gt;Luck = Preparation × Opportunities.&lt;/strong&gt; Japan cranked &lt;em&gt;both&lt;/em&gt; dials, more attempts &lt;em&gt;and&lt;/em&gt; the readiness to punish one, and stole a point from a team that, on every other number, beat them.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Life is a game of numbers" — the other half
&lt;/h2&gt;

&lt;p&gt;Okay, but sometimes you &lt;em&gt;don't&lt;/em&gt; have elite preparation yet. Sometimes you're just starting. What then?&lt;/p&gt;

&lt;p&gt;Then you turn the other dial: &lt;strong&gt;opportunities.&lt;/strong&gt; You take more shots.&lt;/p&gt;

&lt;p&gt;Japan's 23 crosses are a tiny, 90-minute version of this. Stretch the same idea across &lt;em&gt;years&lt;/em&gt; and you get the tech world, a graveyard-slash-trophy-room of people who simply refused to stop attempting:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WD-40&lt;/strong&gt; — the spray in half the garages on earth, literally means &lt;em&gt;"Water Displacement, 40th attempt."&lt;/em&gt; The first thirty-nine formulas failed. Somebody had the patience to label their failures honestly and keep going.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;James Dyson&lt;/strong&gt; built &lt;strong&gt;5,127 prototypes&lt;/strong&gt; of his bagless vacuum before one worked. Five thousand one hundred and twenty-seven. Read that again. He was &lt;em&gt;wrong&lt;/em&gt; 5,126 times in a row, which by any normal emotional standard is a reason to take up gardening instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Angry Birds&lt;/strong&gt; was Rovio's &lt;strong&gt;52nd game.&lt;/strong&gt; They spent years nearly going bankrupt making 51 things you have never heard of and never will. Game number 52 is the one your aunt has on her phone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are "luck" in the lottery sense. They're the equation again, just weighted the other way: when each individual attempt has a low chance of landing, you survive by taking &lt;em&gt;more attempts.&lt;/em&gt; You buy more lottery tickets in a lottery where skill stacks the odds in your favour over time.&lt;/p&gt;

&lt;p&gt;You miss 100% of the shots you don't take. But here's the part the motivational poster leaves off: &lt;strong&gt;you also miss most of the shots you do take.&lt;/strong&gt; That's fine. The whole point is to take enough of them, while getting good enough at them, that the misses become statistically survivable.&lt;/p&gt;

&lt;h2&gt;
  
  
  "A moving man will surely meet his luck"
&lt;/h2&gt;

&lt;p&gt;This is the line doing laps around the internet right now, and it's basically our equation crushed down into seven words. &lt;em&gt;A moving man will surely meet his luck.&lt;/em&gt; It's everywhere, football captions. It spreads because it's true in a very specific, almost boring way: &lt;strong&gt;luck travels along roads, and you have to be on the road to get hit by it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Luck cannot find you in your room. It does not have your home address. It finds you in the meeting you showed up to, the project you actually shipped, the conference you flew to, the cold message you sent, the game you released even though it was your 52nd one. The moving man isn't lucky because the universe likes him. He's lucky because he keeps wandering into the places where luck is standing around looking for someone to bump into.&lt;/p&gt;

&lt;p&gt;My favourite proof is Stewart Butterfield, a man so committed to moving that the universe basically had to pay him twice to make him stop.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;He set out to build an online game called &lt;em&gt;Game Neverending.&lt;/em&gt; The game flopped. But the little photo-sharing tool his team had built inside it became &lt;strong&gt;Flickr&lt;/strong&gt;, which Yahoo bought.&lt;/li&gt;
&lt;li&gt;Did he learn his lesson and sit still? Of course not. He went and built &lt;em&gt;another&lt;/em&gt; game, &lt;em&gt;Glitch.&lt;/em&gt; That one also flopped. But the internal chat tool his team had cobbled together just to talk to each other became &lt;strong&gt;Slack&lt;/strong&gt; — which Salesforce later bought for around &lt;strong&gt;$27.7 billion.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Twice he aimed at a target and missed. Twice the &lt;em&gt;act of moving&lt;/em&gt; building, shipping, keeping a team in motion, produced the thing that actually mattered, sitting quietly in the corner of his failure. Same energy with Instagram, which started life as a clunky check-in app called &lt;em&gt;Burbn&lt;/em&gt; until the founders noticed the only feature anyone used was the photos.&lt;/p&gt;

&lt;p&gt;None of these people knew which attempt would land. That's the entire point, you don't get to know. You just keep moving, so that when luck finally comes down the road, you are, in fact, &lt;em&gt;on the road.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The tech hall of accidental fame
&lt;/h2&gt;

&lt;p&gt;Honestly, once you pull this thread, you realise a frankly embarrassing chunk of Silicon Valley is just people who completely failed at their original plan and tripped face-first into a better one. The "visionary founder who knew exactly what they were building" is mostly a story told afterwards, on a podcast, by someone who got lucky and is too polite to admit it.&lt;/p&gt;

&lt;p&gt;A quick tour of the graveyard-slash-billionaire-factory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;YouTube was a dating site.&lt;/strong&gt; The founders registered the domain on &lt;em&gt;Valentine's Day,&lt;/em&gt; slapped on the slogan "Tune In, Hook Up," and literally offered women $20 on Craigslist to upload dating videos. Number of videos uploaded: zero. Romance dead, they shrugged, said &lt;em&gt;fine, upload literally anything,&lt;/em&gt; and accidentally built the second-biggest website on Earth. The first-ever video was a guy standing at a zoo talking about elephants. Swoon.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Twitter fell out of a podcasting startup.&lt;/strong&gt; It was born inside &lt;em&gt;Odeo&lt;/em&gt;, right as Apple casually rolled iTunes podcasts over the entire industry like a steamroller over a grape. Staring down certain death, the team ran a hackathon, and the dumb little "post what you're doing right now" side-project ate its own parent company. Odeo died so your uncle could argue with strangers about football at 2am.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PayPal was an app for beaming money between Palm Pilots.&lt;/strong&gt; Yes, the device. Two people had to point their PDAs at each other like wizards casting a spell to send $5. Shockingly, the world did not want to do this. So they tried "what if email, but it's money," and a fintech giant fell out of the side of the failure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nintendo — the Mario people, sold playing cards for ~70 years.&lt;/strong&gt; Before video games, they also tried running a taxi company and, this is genuinely real, &lt;em&gt;a chain of love hotels.&lt;/em&gt; The path from hourly-rate rooms to &lt;em&gt;The Legend of Zelda&lt;/em&gt; is not a straight line. Nobody's is.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And my personal favourite, pure cosmic comedy: &lt;strong&gt;Brian Acton.&lt;/strong&gt; In 2009 he applied for a job at Twitter and got rejected. Then he applied at Facebook and got rejected &lt;em&gt;there too.&lt;/em&gt; His reaction, posted publicly: &lt;em&gt;got denied by Twitter HQ, that's ok, would've been a long commute.&lt;/em&gt; He then went and co-founded WhatsApp, which &lt;strong&gt;Facebook bought five years later for $19 billion.&lt;/strong&gt; The company that wouldn't hire him paid nineteen &lt;em&gt;billion&lt;/em&gt; dollars for the thing he built &lt;em&gt;because&lt;/em&gt; they wouldn't hire him. The man got rejected directly into a yacht. If that isn't "a moving man meets his luck," nothing is.&lt;/p&gt;

&lt;p&gt;The pattern under all the jokes is the exact same boring, beautiful equation. None of them knew which attempt would hit. They just kept building, kept shipping, kept pointing Palm Pilots at each other, until something, almost never the thing they were aiming at, finally connected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trap on both sides
&lt;/h2&gt;

&lt;p&gt;Here's where I have to be the annoying friend, because this idea has a failure mode on each end.&lt;/p&gt;

&lt;p&gt;Crank &lt;em&gt;only&lt;/em&gt; preparation and never ship, and you become the person with the perfect, polished, fully-architected app that has zero users because you never put it in front of a single human. Infinite preparation × zero opportunities = zero. You studied for a test you never showed up to.&lt;/p&gt;

&lt;p&gt;Crank &lt;em&gt;only&lt;/em&gt; volume and skip the preparation, and you become the person who sends 500 lazy job applications, builds 50 half-finished side projects, and pitches the same unbaked idea to everyone, and concludes the world is just unfair when none of it lands. Infinite attempts × near-zero preparation ≈ still basically zero, just louder.&lt;/p&gt;

&lt;p&gt;And one more, the sneakiest: don't mistake &lt;strong&gt;a survivor's story for a recipe.&lt;/strong&gt; For every Dyson who attempted 5,127 times and won, there are people who attempted 5,127 times at the &lt;em&gt;wrong thing&lt;/em&gt; and quietly went broke, they just don't get a keynote. The equation isn't "suffer long enough and you're owed a win." It's "you control two inputs, your skill and your number of swings, and you &lt;em&gt;cannot&lt;/em&gt; control the roll of the dice in between." Stack the inputs. Respect the dice.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what do you actually do tomorrow
&lt;/h2&gt;

&lt;p&gt;You can't manufacture luck. But luck is the &lt;em&gt;product&lt;/em&gt; of two numbers you fully control, so go raise both:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Get genuinely good at one thing&lt;/strong&gt; — that's your multiplier. Skill is what converts a half-chance into a goal in the 88th minute. Suffer through the reps now so that when the ball comes in, your head's already in the right place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put yourself in front of more chances&lt;/strong&gt; — ship the project, send the message, enter the competition, publish the article you've been sitting on. Every swing is another roll where your preparation gets to &lt;em&gt;do something.&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do both, long enough, and one day something will land and somebody will call you lucky. Smile and let them. You'll know it wasn't luck that showed up, it was you, prepared, standing exactly where the ball was always going to drop.&lt;/p&gt;

&lt;p&gt;The short team can out-jump the giants. But only the one that practised the jump.&lt;/p&gt;

&lt;p&gt;Now go take your shot. Preferably your 52nd one.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>learning</category>
      <category>analytics</category>
    </item>
    <item>
      <title>A Love Letter to Survivorship Bias in Tech</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Tue, 16 Jun 2026 09:32:49 +0000</pubDate>
      <link>https://dev.to/towernter/a-love-letter-to-survivorship-bias-in-tech-kfa</link>
      <guid>https://dev.to/towernter/a-love-letter-to-survivorship-bias-in-tech-kfa</guid>
      <description>&lt;p&gt;How many times have you seen a picture of a plane with red dots posted on the internet without context?&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%2Fmprfldrli5a0amvuhspk.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%2Fmprfldrli5a0amvuhspk.png" alt=" " width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's a famous story about a statistician named Abraham Wald and a bunch of WWII bombers. The military looked at the planes coming back from combat, mapped where they were riddled with bullet holes, and decided to add armor there. Wald, being the kind of person who ruins meetings by being right, pointed out the obvious thing nobody wanted to hear:&lt;/p&gt;

&lt;p&gt;The planes they were looking at &lt;em&gt;came back&lt;/em&gt;. The ones hit in the spots with no bullet holes, the engine, the cockpit, were at the bottom of the English Channel, not available for the survey.&lt;/p&gt;

&lt;p&gt;Reinforce the parts that &lt;em&gt;aren't&lt;/em&gt; shot up. That's where the dead planes got hit.&lt;/p&gt;

&lt;p&gt;I think about this story a lot, mostly while reading those blog posts titled "X Habits That Made Me a 10x Engineer."&lt;/p&gt;

&lt;h2&gt;
  
  
  The entire industry is a returning-plane survey
&lt;/h2&gt;

&lt;p&gt;Here is the uncomfortable thing about software engineering wisdom: almost all of it is collected from the planes that came back.&lt;/p&gt;

&lt;p&gt;Successful companies write blog posts. Successful founders do podcast tours. Successful engineers give conference talks with titles like "Scaling to 100 Million Users with Three People and a Dream." The companies that did the &lt;em&gt;exact same things&lt;/em&gt; and died do not have a booth at the conference. They are not on the panel. They are in the channel, with the engines.&lt;/p&gt;

&lt;p&gt;And yet we keep doing the survey. We stare at the bullet holes on the survivors and go, "Ah, &lt;em&gt;this&lt;/em&gt; is where we add armor."&lt;/p&gt;

&lt;h2&gt;
  
  
  "Netflix uses microservices, so we should too"
&lt;/h2&gt;

&lt;p&gt;You have eleven users. Three of them are your co-founders, and one is your mom.&lt;/p&gt;

&lt;p&gt;Netflix runs a globe-spanning streaming empire on hundreds of microservices because they have hundreds of teams, billions in revenue, and problems you will be lucky to have in a decade. You have a Postgres database that is doing just fine, thank you, and a monolith that boots in four seconds.&lt;/p&gt;

&lt;p&gt;So naturally, you spend the next eight months splitting your perfectly functional app into 23 microservices, introducing a message queue you don't understand, adding a service mesh to manage the services you didn't need, and now your local dev environment requires 40GB of RAM and a small prayer.&lt;/p&gt;

&lt;p&gt;You did what Netflix does! And you will &lt;em&gt;also&lt;/em&gt; do what most companies that copied Netflix did, which is quietly migrate back to a monolith in two years and write a blog post about it called "Why We Moved Back to a Monolith." That post will be very popular. It will be read by people who are about to make the same mistake and will not be dissuaded.&lt;/p&gt;

&lt;p&gt;The bullet holes are on the survivors. The armor goes where the holes &lt;em&gt;aren't&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  "All our best engineers skipped college"
&lt;/h2&gt;

&lt;p&gt;Survivorship bias loves a hiring anecdote.&lt;/p&gt;

&lt;p&gt;"Our best people are self-taught, never finished a CS degree, just shipped." Cool. You are describing the four self-taught people &lt;em&gt;you hired and kept.&lt;/em&gt; You are not describing the enormous pool of self-taught applicants you rejected, or the ones who flamed out in month two, or the entire category of people who never applied because the job post wanted "10 years of Kubernetes experience" for a technology that is nine years old.&lt;/p&gt;

&lt;p&gt;You hired survivors and then concluded that being a survivor is a great predictor of survival. Groundbreaking.&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%2Fdncf9hr3tct2pfj5tnmm.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%2Fdncf9hr3tct2pfj5tnmm.png" alt=" " width="800" height="784"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  "They don't build software like they used to"
&lt;/h2&gt;

&lt;p&gt;Ah, yes, the legendary robustness of old software. That COBOL system from 1987 that still keeps that one giant corporation afloat. They really knew how to build things back then.&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%2Fyc4asotmgvcckagajib5.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%2Fyc4asotmgvcckagajib5.png" alt=" " width="640" height="761"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Friend. That COBOL system is the &lt;em&gt;survivor.&lt;/em&gt; It is one plane. The skies of 1987 were &lt;em&gt;thick&lt;/em&gt; with garbage software that crashed, got cancelled, lost its company, and was mercifully deleted before you were born. Nobody's writing "we don't make 'em like we used to" think-pieces about &lt;code&gt;PayrollSystem_FINAL_v3_actuallyfinal.exe&lt;/code&gt; because it was put out of its misery in 1991.&lt;/p&gt;

&lt;p&gt;We remember old software fondly for the same reason we remember the planes that landed: the other ones aren't here to interview.&lt;/p&gt;

&lt;h2&gt;
  
  
  The advice that is secretly just luck wearing a hoodie
&lt;/h2&gt;

&lt;p&gt;The most dangerous survivorship bias is the confident first-person retrospective. It goes like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I never wrote tests. I never used a debugger. I just shipped fast and trusted my gut. And look where I am now."&lt;/p&gt;
&lt;/blockquote&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%2Fjt9cvjkk3xz1t4s7usnd.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%2Fjt9cvjkk3xz1t4s7usnd.png" alt=" " width="300" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes. Look where you are. You are &lt;em&gt;one data point&lt;/em&gt; who happens to be holding a microphone. For every you, there is a graveyard of developers who &lt;em&gt;also&lt;/em&gt; never wrote tests, &lt;em&gt;also&lt;/em&gt; shipped on vibes, and are now explaining to a very calm room why prod has been down for six hours. They are not at this conference. They are in a Slack channel called &lt;code&gt;#incident-2024&lt;/code&gt; that will never be archived.&lt;/p&gt;

&lt;p&gt;The gut-trusting works great right up until it doesn't, and the "doesn't" is invisible because it doesn't get a keynote.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to actually not be the dumb general
&lt;/h2&gt;

&lt;p&gt;The fix is the whole point of the Wald story, and it's deceptively simple: &lt;strong&gt;go looking for the missing planes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When someone tells you, "Do X, it's why we won," ask the question nobody at the survey wanted to ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;How many teams did X and lost?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the trait shows up just as often in the wreckage as in the winners, it didn't cause the winning. Microservices, rewriting in Rust, a four-hour daily standup, unlimited PTO, "we don't do meetings" — run them all through the same filter. The survivors will tell you their habits caused their success. The dead can't tell you their identical habits caused nothing of the sort.&lt;/p&gt;

&lt;p&gt;This is why post-mortems are worth more than success stories. A blameless write-up of how something &lt;em&gt;failed&lt;/em&gt; is one of the rare documents written from inside the wreckage. It's a transmission from a plane that didn't come back, which makes it the only useful data on the whole map.&lt;/p&gt;

&lt;h2&gt;
  
  
  Please add the armor where the holes aren't
&lt;/h2&gt;

&lt;p&gt;So go forth. Read the FAANG engineering blog. Admire the architecture diagram with 200 boxes. Feel the pull to adopt all of it.&lt;/p&gt;

&lt;p&gt;Then remember that you are surveying returning planes, close the tab, and go ship the boring monolith that your eleven users will actually be served by.&lt;/p&gt;

&lt;p&gt;The bullet holes are a trap. The survivors are a biased sample. And the next time someone says "we should do it like Google," you get to be the insufferable person in the meeting who is, annoyingly, correct.&lt;/p&gt;

&lt;p&gt;Wald would be proud. Wald would also tell you to write tests.&lt;/p&gt;

</description>
      <category>career</category>
      <category>software</category>
      <category>productivity</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Authentication vs Authorization (Like I'm 5 years Old)</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Sun, 26 Apr 2026 11:26:44 +0000</pubDate>
      <link>https://dev.to/towernter/authentication-vs-authorization-like-im-5-years-old-538</link>
      <guid>https://dev.to/towernter/authentication-vs-authorization-like-im-5-years-old-538</guid>
      <description>&lt;p&gt;You are probably wondering why this guy is writing an article on this. Is this some AI slop or what? They keep asking this question in interviews; it is our duty to put it out there and flood the internet with it until everyone easily understands it.&lt;/p&gt;

&lt;p&gt;Besides, people have different ways of understanding different concepts. So after reading this article, go out there and write about it in your own words. The internet needs more of that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The candy store door vs the candy aisle
&lt;/h2&gt;

&lt;p&gt;Authentication is the candy store door. There's a guard at the entrance who checks your ID before letting you in. No ID, no entry. It does not matter how much you want the candy; you need to prove who you are first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authorization&lt;/strong&gt; is the candy aisle. You're inside the store now, but that doesn't mean you can go everywhere. Customers stay in the aisles. The stockroom? Staff only. The manager's office? Don't even think about it. Where you're allowed to go depends on who you are, and that's &lt;strong&gt;authorization&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Authentication: Can you get through the door? → prove who you are

Authorization: Which aisles can you walk down? → decided once you're inside
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How it actually works in software — JWT
&lt;/h3&gt;

&lt;p&gt;When you log into an app, the server needs a way to remember you without asking for your password on every single click. This is where JSON Web Tokens (JWT) come in.&lt;/p&gt;

&lt;p&gt;Think of a JWT as the receipt the guard gives you after checking your ID at the candy store door. Every time you want to grab something off a shelf, you show the receipt, so the staff doesn't need to call the guard again. They check the receipt and know exactly who you are and what you're allowed to pick up.&lt;/p&gt;

&lt;p&gt;A JWT has three parts separated by dots:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;header.payload.signature

Header → algorithm used to sign it
Payload → user info, roles, expiry
Signature → proof it hasn't been tampered with
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server signs the token when you log in. Every request you make after that carries the token in the header. The server verifies the signature, and if it checks out, it trusts the payload. No database lookup needed on every request. Fast, stateless, and widely used in REST APIs&lt;/p&gt;

&lt;h3&gt;
  
  
  Authorization in the real world — RBAC
&lt;/h3&gt;

&lt;p&gt;Once a user is authenticated, the system needs to decide what they can do. The most common approach is &lt;strong&gt;Role-Based Access Control (RBAC)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of assigning permissions to individual users which gets messy fast, you assign them to roles. Then users are given a role. Back to the candy store: customers can browse the aisles, staff can access the stockroom, and managers can open the safe. Same store, completely different access.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Role    Can read    Can delete
Admin   Yes         Yes
Editor  Yes         No
Viewer  Yes         No
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In a JWT, the user's role is often stored right in the payload. So when the server decodes the token, it sees role: &lt;code&gt;admin&lt;/code&gt; and knows exactly what that person is allowed to do no extra database call required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Putting it all together
&lt;/h3&gt;

&lt;p&gt;Here's the full flow in a typical web app:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User logs in with credentials → server verifies → authentication (through the door)&lt;/li&gt;
&lt;li&gt;Server issues a signed JWT with the user's role baked in (the receipt)&lt;/li&gt;
&lt;li&gt;User sends JWT on every request&lt;/li&gt;
&lt;li&gt;Server checks the role in the token → grants or denies access → authorization (which aisle)&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
      <category>security</category>
    </item>
    <item>
      <title>Screening Opportunities</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Sat, 25 Apr 2026 10:14:48 +0000</pubDate>
      <link>https://dev.to/towernter/screening-opportunities-4g72</link>
      <guid>https://dev.to/towernter/screening-opportunities-4g72</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;The way to get good ideas is to get lots of ideas and throw the bad ones away." — &lt;em&gt;Linus Pauling&lt;/em&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In a world dominated by AI, coming up with ideas is no longer the greatest challenge (“Just prompt it,” they say). The real challenge lies in selecting the right ideas. And I know you’re probably thinking, “What is he on about? I can use AI for that too.”&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%2Fsb6dsafrbgl0783s7b08.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%2Fsb6dsafrbgl0783s7b08.png" alt="Stop abusing AI and use your brain" width="800" height="589"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Join me for a few minutes as I babble about a well-proven framework for idea screening. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Is It Important to Use a Proven Framework to Screen Ideas?
&lt;/h2&gt;

&lt;p&gt;I know you’re probably asking yourself, “Why not just follow my gut?” Yeah, about that ... we could learn a thing or two from food. Food goes through your mouth, smells nice, follows your gut, and then comes out as sh*t.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is It We Are Talking About?
&lt;/h2&gt;

&lt;p&gt;The process of screening opportunities is all about asking questions, and there are not many. All you have to do is ask these three questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is it &lt;em&gt;REAL&lt;/em&gt;?&lt;/li&gt;
&lt;li&gt;Can we &lt;em&gt;WIN&lt;/em&gt;?&lt;/li&gt;
&lt;li&gt;Is it &lt;em&gt;WORTH IT&lt;/em&gt;?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those three bad boys combined form a framework called the &lt;em&gt;Real-Win-Worth (RWW)&lt;/em&gt;. If we are to combine those three into a Venn diagram in the middle, there is a &lt;em&gt;sweet spot&lt;/em&gt;, and that's what they call &lt;em&gt;INNOVATION&lt;/em&gt;. Your idea needs to answer those three questions to become a great opportunity.&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%2Fxjhw3yc3lvydpavryigs.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%2Fxjhw3yc3lvydpavryigs.png" alt="Credit MIT Sloan" width="799" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the way, I am not smart enough to come up with a framework like that, thanks to &lt;em&gt;George Day&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Breakdown
&lt;/h2&gt;

&lt;p&gt;Now that we have the questions, let's go one by one, asking each question in detail.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it &lt;em&gt;REAL&lt;/em&gt;?
&lt;/h3&gt;

&lt;p&gt;The Real Dimension or the People Dimension. Here, you need to determine whether there are real people who can benefit from your so-called great idea. It could be you asking yourself: Would I really benefit from what I want to do? Is it really a problem that I should be solving? &lt;/p&gt;

&lt;p&gt;In terms of business opportunities, you need to ask: Is the opportunity real? Does someone out there actually want this? Is there a market for it? How big is that market? Is there a genuine unmet need?&lt;/p&gt;

&lt;p&gt;In summary, is there a customer with this problem who is willing to pay to solve it? If the REAL is not making real sense, stop being delulu and reflect right away.&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%2F6q4f2esabwd396knyche.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%2F6q4f2esabwd396knyche.png" alt=" " width="800" height="857"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Can we &lt;em&gt;WIN&lt;/em&gt;?
&lt;/h3&gt;

&lt;p&gt;The Technical Dimension or the Win Dimension. Here, you need to ask yourself whether you’ve got what it takes. At this stage, managing delusions has to be on another level. You need to honestly assess yourself and take a hard look at the competition. I appreciate my non-technical friends who always approach me with their crap APP ideas. Kudos for not being delulu.&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%2Frq62oi8yvolvka9pnq0e.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%2Frq62oi8yvolvka9pnq0e.png" alt=" " width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From a business perspective, ask: Can we deliver? Do we have the necessary resources? Can we solve the problem in a technically feasible way? Do we truly believe we have a better solution? And can we build a real competitive advantage?&lt;/p&gt;

&lt;h3&gt;
  
  
  Is it &lt;em&gt;WORTH IT&lt;/em&gt;?
&lt;/h3&gt;

&lt;p&gt;The Business Dimension or the Worth Dimension. Here, you need to ask yourself whether you have the money to do it and, after putting your money into it, whether you’re going to get some money out of it.&lt;/p&gt;

&lt;p&gt;From a business perspective, you’re looking at overall viability. Is it worth it? Is it financially viable? That means building a business around it that is both viable and sustainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Is It Important for Your Opportunity to Answer All Three Questions?
&lt;/h2&gt;

&lt;p&gt;Your idea needs to be balanced across all three aspects. If it scores highly on all three, you may be onto something special. If it falls short in any one of them, you’ll eventually find out. In Japan, they call it a &lt;a href="https://chindogu.com/ics" rel="noopener noreferrer"&gt;Chindogu&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Chindogu is the art of inventing ingenious yet "un-useless" gadgets designed to solve everyday problems, while actually creating more problems than they solve (Kenji Kawakami).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Have some time to take a look at the &lt;a href="https://chindogu.com/ics" rel="noopener noreferrer"&gt;Chindogu&lt;/a&gt; website. There are examples of ideas that are weak in different dimensions that we have talked about.&lt;/p&gt;

&lt;p&gt;Take a look at the following ideas, they are just incredible, aren't they? Truth is, nobody is ever paying for those kinds of solutions.&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%2Fpjeramkrzb6whdx8irb2.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%2Fpjeramkrzb6whdx8irb2.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s it for today. Thank you for wasting your time. Let’s not get addicted to AI, alright?&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%2Fanocbgnmmevf9m49tbgm.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%2Fanocbgnmmevf9m49tbgm.png" alt=" " width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>creativity</category>
      <category>innovation</category>
      <category>design</category>
    </item>
    <item>
      <title>Exploring Connections: How Meeting People Enriched My Master's Journey</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Wed, 30 Aug 2023 13:57:37 +0000</pubDate>
      <link>https://dev.to/towernter/exploring-connections-how-meeting-people-enriched-my-masters-journey-4bcm</link>
      <guid>https://dev.to/towernter/exploring-connections-how-meeting-people-enriched-my-masters-journey-4bcm</guid>
      <description>&lt;p&gt;I recently completed my 2-year master's degree in Big Data Analytics and I would like to take you on a ride through my experience in the world of Big Data Analytics. This won't be about crunching numbers, and datasets or building machine learning models; it's about the incredible individuals I crossed paths with. The connections that I made along the way and how these connections turned out to be like golden tickets to new perspectives that have had a big impact on my entire life.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Meeting Diverse People: Unlocking Valuable Career Insights&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;During my learning journey, I met people from all sorts of fields - social sciences, finance, engineering, healthcare, HR, and more. It was like stepping into different universes. Talking to people in social sciences showed me how data and human behavior are connected. The finance people taught me how data fuels financial decisions. Tech-savvy engineers shared ways to solve problems that blew my mind. Healthcare experts proved how data literally saves lives. Chatting with HR professionals helped me to get a backstage pass on how data makes managing people a breeze. Coming from a technical background, honestly, I thought doing such a program was for people with programming and other IT-related skills only. In the end, it was these people from different fields who had an upper hand since for them it was about applying big data skills in their respective fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Opening Doors to Future Collaborations&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;While pursuing this master's, I got to meet professors who taught me different courses and life skills. They were not just names on a list, they were people who shared their wisdom and stories. This wasn't just in class; it was in the real world. These connections are like keys to doors that lead to future collaborations and exciting research opportunities.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Challenge of Juggling Work and Learning&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I will be honest, juggling a full-time job while learning part-time wasn't a walk in the park. It was tough. But guess what? Challenges aren't always bad. They pushed me to my limits and made me sharper. Learning how to manage my time and balance responsibilities turned out to be a skill that's super valuable.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Payoff: Career Growth and Personal Development&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let's talk about the good stuff. The connections I made with people are like treasures. They've opened up a world of possibilities for my career, especially when it comes to future jobs. Employers love to see a network of diverse connections. And those professors and experts I met? They're like mentors who guide me and help me think outside the box.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Embracing the Challenge: A Transformative Experience&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Was it easy? No, it was not. But was it worth it? Absolutely! Balancing work and learning was like a boot camp for my time management and multitasking skills. It might have been challenging, but it was also rewarding. The experience has made me resilient, adaptable, and ready to tackle anything that comes my way.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Consider the Journey: Your Next Big Adventure&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you're wondering whether a Master's in Big Data Analytics is for you, let me tell you, it's more than just a degree. It's a chance to meet incredible people who can shape your future. It's about opening doors to collaborations and research that you might never have imagined. And it's about facing challenges head-on and coming out stronger on the other side. The field of big data is very diverse and it can be applied in any field that you can think of be it soccer, hairdressing, cooking, gardening, and any career that you may think of. I highly recommend doing any master's degree not just Big Data analytics. Pursuing postgraduate programs helps you meet different people from different careers which will help you build valuable connections.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So, here's to meeting people, opening doors, and taking on challenges! My Master's journey has been about more than just data, it's been about growth, connections, and a whole lot of learning. If this journey sounds like your kind of adventure, a Master's in Big Data Analytics or any other postgraduate program might just be the next step you've been looking for. Let's embrace the possibilities together!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>programming</category>
      <category>machinelearning</category>
      <category>bigdata</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Is using AI tools really good for your career?</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Wed, 24 May 2023 11:31:12 +0000</pubDate>
      <link>https://dev.to/towernter/is-using-ai-tools-really-good-for-your-career-1a82</link>
      <guid>https://dev.to/towernter/is-using-ai-tools-really-good-for-your-career-1a82</guid>
      <description>&lt;p&gt;Gone are the days when gaining a skill through spending some time learning in order to know stuff separated developers from great developers. In this day and era, your skill to prompt the AI is what makes you a super coder. &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%2Ftkutpdz67ezjtbqdhnlq.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%2Ftkutpdz67ezjtbqdhnlq.png" alt="who wants to learn new skills?" width="602" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article I will be rumbling about what I think about the use of AI, is it good for your career (beginners vs experts), and of course the most controversial question (will AI takeover our jobs)&lt;/p&gt;

&lt;h3&gt;
  
  
  Is AI really good for your career?
&lt;/h3&gt;

&lt;p&gt;Well, it depends. For me AI is a tool that you should use to assist you to do your job not heavily rely on it to do your entire job. Using AI tools like ChatGPT is great if you are in later stages of your career than when you are still a beginner. If you are using AI to do your entire job you should not be having a job (you are just lucky your boss does not know you can be replaced by AI)&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%2Fpsgraufi0e8p4qd3xzea.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%2Fpsgraufi0e8p4qd3xzea.png" alt="you gettin' replaced" width="521" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tools like ChatGPT should come in handy when you are stuck with a bug and need a way out. If you are still learning to code you need to avoid abusing the use of such tools for every problem that you will face. This will help you master whatever are learning and help with building your creativity.&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%2Feptnjgckxn2ie9fkbzwp.jpeg" 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%2Feptnjgckxn2ie9fkbzwp.jpeg" alt="Change my mind" width="800" height="807"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I know you are already saying to yourself, "this guy is crazy, ChatGPT was created to do that. If I cannot use it to do that then what is the point of having it?". Well, that actually makes sense and it is supposed to do that. Is having AI doing everything for you good for you though? I do not think so.&lt;/p&gt;

&lt;p&gt;I was recently doing my MSc degree the past 2 years and I realized that if ChatGPT had been released before I commenced my MSc degree I would have become an empty head. Considering my levels of laziness, I would have dodged doing all the assignments on my own and that would have costed me all the knowledge that I have now. When you are learning something new you need to limit the use of AI tools, suffer a little bit trying to figure out things on your own.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“There is no growth without pain. No life without suffering.”&lt;br&gt;
   ― Cynthia Eden, Burn For Me&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Will AI takeover our jobs?
&lt;/h3&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%2F9xl1kwcj77r7opkm20g0.jpeg" 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%2F9xl1kwcj77r7opkm20g0.jpeg" alt="Machine learning coder chilling like nothing is happening" width="800" height="945"&gt;&lt;/a&gt;&lt;br&gt;
That actually depends with the job. Some people have already lost their jobs because of AI but as developers I do not think AI will never be able to replace us.  As developers I think we are &lt;strong&gt;users of AI&lt;/strong&gt; therefore we will never be replaced. The worst thing AI will do to us is cut our jobs that is instead of having a team of 10 developers we might end up having a team of 1 10x super coder and god level ChatGPT user.&lt;/p&gt;

&lt;p&gt;Though AI might not takeover our jobs, i think we a heading to an AI dystopia. The use of tools like ChatGPT will improve our productivity but ruin our creativity. &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%2Ft5ra78iyylg7j4b7ply4.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%2Ft5ra78iyylg7j4b7ply4.png" alt="Civilization in the mud" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A world where an AI tool can generate an entire application for you would be great right? well i dont think so, i believe that suffering makes you a great thinker and being a great thinker makes you creative.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>development</category>
      <category>ai</category>
    </item>
    <item>
      <title>How I became a successful meme account and the benefits it has provided</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Fri, 08 Jul 2022 11:00:52 +0000</pubDate>
      <link>https://dev.to/towernter/how-i-became-a-successful-meme-account-and-the-benefits-it-has-provided-1n4e</link>
      <guid>https://dev.to/towernter/how-i-became-a-successful-meme-account-and-the-benefits-it-has-provided-1n4e</guid>
      <description>&lt;p&gt;&lt;code&gt;Originally published on&lt;/code&gt; &lt;a href="https://doc.clickup.com/20646114/d/h/kp272-200/3cb5a1933d51775?utm_campaign=tw_value_1&amp;amp;utm_medium=community&amp;amp;utm_source=twitter&amp;amp;utm_content=thread_value_towernter" rel="noopener noreferrer"&gt;ClickUp&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You probably looked at the title and you were like, "huh, this guy calls himself successful?"&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%2Fris4dmz3383oxkktcfm0.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%2Fris4dmz3383oxkktcfm0.gif" alt="confused" width="268" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, when it comes to memeing, I can beat Elon Musk at this game.&lt;/p&gt;

&lt;p&gt;Let's jump straight into it. I have had several people approach me, mostly those who admire my work on Twitter. Most of their questions were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  How did you manage to get quite a number of followers?&lt;/li&gt;
&lt;li&gt;  How do you manage to get those banger memes?&lt;/li&gt;
&lt;li&gt;  Are there any benefits to doing this?&lt;/li&gt;
&lt;li&gt;  Can I have your account when you die?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I then decided, why not write something to answer all the questions and then share it with everyone? In this write-up, I will mainly focus on how I have managed to build my Twitter account and the surprising benefits it has provided.&lt;/p&gt;

&lt;h3&gt;
  
  
  How did you manage to get quite a number of followers?
&lt;/h3&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxsi9of79v4g7oiwvrg1m.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxsi9of79v4g7oiwvrg1m.jpg" alt="sh*tposting " width="600" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running a meme account on Twitter is not really different from running any other account. You just need to understand the following (not really a standard, but that's what I do and what has worked for me):&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Admiring others in the game/role model(s)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When I started using Twitter, there were a few accounts that I looked up to, both tech accounts and non-tech accounts. One of the accounts I admired was &lt;a href="https://twitter.com/markdalgleish" rel="noopener noreferrer"&gt;markdalgleish&lt;/a&gt; (who used to post memes). The trick is not just to admire your favorite accounts; notice how they do it; comment; plug your own unfunny tweets in the comment section to get noticed by others (it's low but well it works). Commenting in context with the tweet helps you to get noticed by people who are fans of the tweet author or topic as well as the tweet author. This will probably help you get followed by people who have the same interests as you and most likely the tweet author (yeah, that's the prize you get for being a top fan).&lt;/p&gt;

&lt;p&gt;That being said, if you want to be a fellow memer, you know who to idolize.&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%2Flpiiveaszljb6ffdv9vm.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%2Flpiiveaszljb6ffdv9vm.gif" alt="im the captain now" width="286" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Tricking the Algorithm&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Tricking the Twitter algorithm increases your chances of coming up with a banger (Also answers the second question on how to come up with banger tweets). You need to play some games with the Twitter algorithm, that is, know when to post and what to post. In terms of knowing when to post, it depends on your time zone and your audience. Take note of your audience and when they are likely to be active. If you post when the guy who likes your tweets for no reason is asleep, your post will disappear into a sinkhole. Remember, going viral starts with one click, and going viral gives you new followers.&lt;/p&gt;

&lt;p&gt;In terms of what to post, you need to pay attention to the trends. Don't post about Linux when Windows is trending, unless of course you are bashing Linux, but remember to include the keyword Windows (be creative). I remember posting the following tweet when Facebook changed its name to Meta.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngwsoktg8k5lhf9v24en.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fngwsoktg8k5lhf9v24en.jpg" width="670" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Keep it simple
&lt;/h4&gt;

&lt;p&gt;Don't go too deep. Most of us on Twitter are not that smart and are not slacking off at work to hear you shout about quantum physics.&lt;/p&gt;

&lt;p&gt;As a developer, do you breathe while coding?&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%2Fbbiaxljsekgsqp37442g.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%2Fbbiaxljsekgsqp37442g.gif" alt="coding" width="224" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Consistency
&lt;/h3&gt;

&lt;p&gt;What has helped me a lot is being consistent. I post memes and only memes. As a result, the people who follow me do it for the memes, and they will end up staying for the memes. If you post vegan tips today and then post a steak tomorrow, you will scare your audience. Take note that my account posts mostly about technology, and it's very important for me to stick to the topic of technology, as my audience is likely to be a bunch of geeks, nerds, and printer fixers who are not familiar with football. Posting memes about Lionel Messi will probably scare the majority of them. While going viral gives you new followers, being consistent keeps the followers.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you manage to get banger memes?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; Trick the algorithm.&lt;/li&gt;
&lt;li&gt; Be creative.&lt;/li&gt;
&lt;li&gt; Understand your audience and post when they are active and post what they like the most.&lt;/li&gt;
&lt;li&gt; Use a trending meme template (for example, when Squid Game was trending).&lt;/li&gt;
&lt;/ol&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uyprpllioky2qiq61kb.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uyprpllioky2qiq61kb.png" width="668" height="643"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Are there any benefits to doing this?
&lt;/h2&gt;

&lt;p&gt;I post memes for fun, but I get a lot of opportunities that I actually never thought someone who just posts images and videos captioned with silly text would ever get. Some of the opportunities include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Job opportunities&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You are probably thinking of job opportunities to post memes while sitting on a rotating chair somewhere, but no, these are actually opportunities to do with my career, especially software development opportunities. I am not sure how this works, but hey, iris wat iris&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Marketing&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When it comes to marketing, memers are highly demanded. I get a lot of opportunities to promote different products for several companies (especially startups). There is a high chance you once liked a meme that was part of a promotion and did not even notice it. Usually, with most of these, the company running the promotion gets to post it on their page. Memers just handle the memeing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I have your account when you die?
&lt;/h3&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%2F1sn4oka8wtq10ev1wa26.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%2F1sn4oka8wtq10ev1wa26.gif" width="356" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a C# Blazor App with NoSQL and SQL Using HarperDB</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Tue, 01 Mar 2022 14:29:13 +0000</pubDate>
      <link>https://dev.to/towernter/building-a-c-blazor-app-with-nosql-and-sql-using-harperdb-lc</link>
      <guid>https://dev.to/towernter/building-a-c-blazor-app-with-nosql-and-sql-using-harperdb-lc</guid>
      <description>&lt;p&gt;This tutorial describes how to use &lt;strong&gt;&lt;a href="https://harperdb.io/" rel="noopener noreferrer"&gt;HarperDB&lt;/a&gt;&lt;/strong&gt; Database and &lt;strong&gt;&lt;a href="https://dotnet.microsoft.com/en-us/apps/aspnet/web-apps/blazor" rel="noopener noreferrer"&gt;Blazor&lt;/a&gt;&lt;/strong&gt;. For this tutorial, we are going to build a simple &lt;strong&gt;Blazor&lt;/strong&gt; .Net Core app using HarperDB. The final source code for this tutorial can be found on this &lt;a href="https://github.com/Towernter/HarperDB_BlazorAPP" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is required to follow along this tutorial
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Basic knowledge of &lt;a href="https://docs.microsoft.com/en-us/dotnet/csharp/" rel="noopener noreferrer"&gt;C#&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://visualstudio.microsoft.com/" rel="noopener noreferrer"&gt;Visual studio&lt;/a&gt; (in my case I am using Visual Studio 2019)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://studio.harperdb.io/sign-up" rel="noopener noreferrer"&gt;HarperDB&lt;/a&gt; account&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why HarperDB?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://harperdb.io/docs/overview/" rel="noopener noreferrer"&gt;HarperDB&lt;/a&gt; has an easy to use REST API which supports both &lt;strong&gt;SQL&lt;/strong&gt; and &lt;strong&gt;NoSQL&lt;/strong&gt;. It is very simple to use with a wide range of tutorials, support and documentation in different languages like &lt;code&gt;Python&lt;/code&gt;, &lt;code&gt;Javascript&lt;/code&gt; and &lt;code&gt;CSharp&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up our HarperDB database
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create your &lt;a href="https://studio.harperdb.io/sign-up" rel="noopener noreferrer"&gt;HarperDB account&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Go to the &lt;a href="https://studio.harperdb.io/sign-up" rel="noopener noreferrer"&gt;HarperDB Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Create your Organisation&lt;/li&gt;
&lt;li&gt;Create new HarperDB Cloud instance&lt;/li&gt;
&lt;li&gt;Create a Schema dev&lt;/li&gt;
&lt;li&gt;Create two tables dog and breed and set the &lt;code&gt;hash attr&lt;/code&gt; to &lt;code&gt;id&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt; To make it simple, for our pets app we are going to use dogs only&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Video tutorial on how to setup your &lt;a href="https://www.youtube.com/watch?v=W4pvuyp-2tk&amp;amp;t=314s" rel="noopener noreferrer"&gt;HarperDB&lt;/a&gt; cloud&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating our project
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open Visual Studio &lt;/li&gt;
&lt;li&gt;Click: Create a new Project -&amp;gt; Blazor Web Assembly App&lt;/li&gt;
&lt;/ol&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%2Fp4rqht9x8p6rf96sl82r.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%2Fp4rqht9x8p6rf96sl82r.jpg" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click Next&lt;/li&gt;
&lt;/ol&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%2Fqc4xjhx66ryfzzj47fgf.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%2Fqc4xjhx66ryfzzj47fgf.jpg" alt=" " width="800" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Name your Project &lt;code&gt;**MyPets**&lt;/code&gt; and click Next&lt;/li&gt;
&lt;/ol&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%2Fyxj6sk9cfad0z5zei0i9.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%2Fyxj6sk9cfad0z5zei0i9.jpg" alt=" " width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select .Net Core 5 and configurations then click create&lt;/li&gt;
&lt;/ol&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%2Fhz0kd8irtmctayv0bymf.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%2Fhz0kd8irtmctayv0bymf.jpg" alt=" " width="800" height="561"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring our project
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Edit Navigation menu (&lt;code&gt;NavMenu.razor&lt;/code&gt;)
Let’s edit our &lt;code&gt;MyPets&lt;/code&gt; navigation App by opening the &lt;code&gt;NavMenu.razor&lt;/code&gt; in the &lt;code&gt;Shared&lt;/code&gt; folder. We want to add three options, our &lt;code&gt;Home&lt;/code&gt;, &lt;code&gt;Add Pets&lt;/code&gt; and lastly the page to &lt;code&gt;Display Pets&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Edit the URLs as shown below&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"@NavMenuCssClass"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"ToggleNavMenu"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav flex-column"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-item px-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;NavLink&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;Match=&lt;/span&gt;&lt;span class="s"&gt;"NavLinkMatch.All"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"oi oi-home"&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt; Home
            &lt;span class="nt"&gt;&amp;lt;/NavLink&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-item px-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;NavLink&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"AddPet"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"oi oi-plus"&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt; Add Pets
            &lt;span class="nt"&gt;&amp;lt;/NavLink&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-item px-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;NavLink&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"nav-link"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"fetchdata"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"oi oi-list-rich"&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt; Display Pets
            &lt;span class="nt"&gt;&amp;lt;/NavLink&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After running the project, our app looks like this&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%2Fyabedumq787qjober72o.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%2Fyabedumq787qjober72o.jpg" alt=" " width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setting up a Home page
Let's rename the &lt;code&gt;SurveyPrompt.razor&lt;/code&gt; to &lt;code&gt;HomePage&lt;/code&gt; as follows&lt;/li&gt;
&lt;/ol&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%2Fwzx9w9eaw95rividgp5w.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%2Fwzx9w9eaw95rividgp5w.jpg" alt=" " width="485" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Change the last line of &lt;code&gt;Index.razor&lt;/code&gt;. &lt;code&gt;Index.razor&lt;/code&gt; is found under pages as shown above&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;SurveyPage&lt;/span&gt; &lt;span class="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"How is Blazor working for you?"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;HomePage&lt;/span&gt; &lt;span class="n"&gt;Title&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Explore"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Adding important imports
&lt;/h2&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%2F38av8t5xivh5scroz1k1.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%2F38av8t5xivh5scroz1k1.jpg" alt=" " width="467" height="76"&gt;&lt;/a&gt;&lt;br&gt;
Open &lt;code&gt;_Imports.razor&lt;/code&gt; and add the following imports&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;@using&lt;/span&gt; &lt;span class="n"&gt;MyPets&lt;/span&gt;
&lt;span class="n"&gt;@using&lt;/span&gt; &lt;span class="n"&gt;MyPets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Shared&lt;/span&gt;
&lt;span class="n"&gt;@using&lt;/span&gt; &lt;span class="n"&gt;MyPets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Helpers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;@using&lt;/span&gt; &lt;span class="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create a Pet class to help us pass the object data from DB
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Right click your project -&amp;gt; add folder&lt;/li&gt;
&lt;li&gt;Name the folder &lt;code&gt;Helpers&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Right click &lt;code&gt;Helpers&lt;/code&gt; folder and add a new Class&lt;/li&gt;
&lt;li&gt;Name it &lt;code&gt;Pet&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&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%2Fgekf4ivku48ewkdytcuz.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%2Fgekf4ivku48ewkdytcuz.jpg" alt=" " width="417" height="47"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add the following code to your &lt;code&gt;pet&lt;/code&gt; class&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Collections.Generic&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Linq&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;System.Threading.Tasks&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;MyPets.Helpers&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Pet&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;dog_name&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;breed_id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;NB: To setup your database, DB URL and token can be found in the HarperDB studio account under &lt;code&gt;config&lt;/code&gt; tab&lt;br&gt;
To find your DB URL and token:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Login to &lt;a href="https://studio.harperdb.io/" rel="noopener noreferrer"&gt;HarperDB Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on your instance (if you do not have any instances, click &lt;code&gt;Create New HarperDB Cloud Instance&lt;/code&gt; to create a new instance&lt;/li&gt;
&lt;li&gt;Click on the &lt;code&gt;config&lt;/code&gt; tab&lt;/li&gt;
&lt;li&gt;Your &lt;strong&gt;HDB URL&lt;/strong&gt; is the &lt;code&gt;Instance URL&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Your &lt;strong&gt;Authentication token&lt;/strong&gt; is the &lt;code&gt;Instance API Auth Header (this user)&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Adding pets to our database
&lt;/h2&gt;

&lt;p&gt;We are going to make use of the existing pages created by our default Razor app. Rename &lt;code&gt;Counter.Razor&lt;/code&gt;  to &lt;code&gt;AddPet.razor&lt;/code&gt; in the &lt;code&gt;Pages&lt;/code&gt; folder and edit it as shown below:&lt;br&gt;
&lt;strong&gt;HTML Section&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@page "/AddPet"

&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Add a new Dog&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-group"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;Placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Id"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;bind-value=&lt;/span&gt;&lt;span class="s"&gt;"@id"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-group"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;Placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Dog Name"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;bind-value=&lt;/span&gt;&lt;span class="s"&gt;"@dog_name"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-group"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;Placeholder=&lt;/span&gt;&lt;span class="s"&gt;"BreedID"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;bind-value=&lt;/span&gt;&lt;span class="s"&gt;"@breed_id"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-group"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"form-control"&lt;/span&gt; &lt;span class="na"&gt;Placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Age"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;bind-value=&lt;/span&gt;&lt;span class="s"&gt;"@age"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;@result&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"AddPets"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Add New Pet&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;C# Code Section&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;@code&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="c1"&gt;//Variables for our inputs&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;dog_name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;breed_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="c1"&gt;//Request and response variables&lt;/span&gt;
    &lt;span class="n"&gt;HttpRequestMessage&lt;/span&gt; &lt;span class="n"&gt;requestMessage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;HttpResponseMessage&lt;/span&gt; &lt;span class="n"&gt;responseMessage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;HttpClient&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;AddPets&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;postBody&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="c1"&gt;//our request body&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;

                &lt;span class="n"&gt;operation&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;  &lt;span class="s"&gt;"insert"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;  &lt;span class="s"&gt;"dog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;records&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;dog_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;dog_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;breed_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;breed_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;

                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="n"&gt;http&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HttpClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;requestMessage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HttpRequestMessage&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Method&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HttpMethod&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;RequestUri&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@"YOUR_HDB_URL_HERE"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;//DB URl&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;

            &lt;span class="n"&gt;requestMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Content&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;postBody&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DefaultRequestHeaders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Basic put_your_token_here"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;responseMessage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SendAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;requestMessage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;responseMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsSuccessStatusCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"New pet added"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;responseMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;** NB: **To setup your database, DB URL and token can be found in the HarperDB studio account under &lt;code&gt;config&lt;/code&gt; tab&lt;br&gt;
To find your DB URL and token:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Login to &lt;a href="https://studio.harperdb.io/" rel="noopener noreferrer"&gt;HarperDB Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on your instance (if you do not have any instances, click &lt;code&gt;Create New HarperDB Cloud Instance&lt;/code&gt; to create a new instance&lt;/li&gt;
&lt;li&gt;Click on the &lt;code&gt;config&lt;/code&gt; tab&lt;/li&gt;
&lt;li&gt;Your &lt;strong&gt;HDB URL&lt;/strong&gt; is the &lt;code&gt;Instance URL&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Your &lt;strong&gt;Authentication token&lt;/strong&gt; is the &lt;code&gt;Instance API Auth Header (this user)&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Display Pets from the database
&lt;/h2&gt;

&lt;p&gt;Edit the code in &lt;code&gt;FetchData.razor&lt;/code&gt; in the &lt;code&gt;Pages&lt;/code&gt; folder as shown below &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt; For this section we will use the HarperDB SQL functionality&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;HTML Section&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@page "/fetchdata"

&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Dogs&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This section demonstrates fetching data from HarperDB&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt; @result&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
@if (pets == null) //display nothing when our DB is empty
{
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&lt;/span&gt;Loading...&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
}
else
{
    &lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"table"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;thead&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Id&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Dog Name&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Breed&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Age&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Action&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/thead&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;
            @foreach (var pet in pets)
            {
                &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;@pet.id&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;@pet.dog_name&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;@pet.breed_id&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;@pet.age&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
               &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
            }
        &lt;span class="nt"&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;C# Code Section&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;@code&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;HttpRequestMessage&lt;/span&gt; &lt;span class="n"&gt;requestMessage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;HttpResponseMessage&lt;/span&gt; &lt;span class="n"&gt;responseMessage&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;HttpClient&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Pet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;pets&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Pets list to store our pets retrieved from the database&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;OnInitializedAsync&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; 
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;postBody&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;operation&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"sql"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;sql&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"SELECT * FROM dev.dog WHERE 1"&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="n"&gt;http&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HttpClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;requestMessage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HttpRequestMessage&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Method&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HttpMethod&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;RequestUri&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@"YOUR_HDB_URL_HERE"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="n"&gt;requestMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Content&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;postBody&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DefaultRequestHeaders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Basic put_your_token_here"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;responseMessage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SendAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;requestMessage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;pets&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Deserialize&lt;/span&gt; &lt;span class="c1"&gt;// for our HTML table&lt;/span&gt;
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Pet&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;responseMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadAsStringAsync&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;responseMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test addition and Display functionality
&lt;/h2&gt;

&lt;p&gt;Let's test out what we have so far:&lt;br&gt;
Start your project in Visual Studio&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%2Fxm59ywshgpff0swv6iux.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%2Fxm59ywshgpff0swv6iux.jpg" alt=" " width="800" height="523"&gt;&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%2Frk6odg7kcarkzf532nd3.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%2Frk6odg7kcarkzf532nd3.jpg" alt=" " width="800" height="525"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;** NB: **To setup your database, DB URL and token can be found in the HarperDB studio account under &lt;code&gt;config&lt;/code&gt; tab&lt;br&gt;
To find your DB URL and token:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Login to &lt;a href="https://studio.harperdb.io/" rel="noopener noreferrer"&gt;HarperDB Studio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on your instance (if you do not have any instances, click &lt;code&gt;Create New HarperDB Cloud Instance&lt;/code&gt; to create a new instance&lt;/li&gt;
&lt;li&gt;Click on the &lt;code&gt;config&lt;/code&gt; tab&lt;/li&gt;
&lt;li&gt;Your &lt;strong&gt;HDB URL&lt;/strong&gt; is the &lt;code&gt;Instance URL&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Your &lt;strong&gt;Authentication token&lt;/strong&gt; is the &lt;code&gt;Instance API Auth Header (this user)&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Deleting our Pets
&lt;/h2&gt;

&lt;p&gt;We will add the functionality to delete a pet in the display &lt;code&gt;FetchData.razor&lt;/code&gt; page&lt;br&gt;
Edit the HTML in &lt;code&gt;FetchData.razor&lt;/code&gt; to add the following table data to your HTML page&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;td&amp;gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-danger"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"() =&amp;gt; DeletePet(pet.id)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Delete&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After adding the line your page should look like the one below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;@page "/fetchdata"

&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Dogs&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This section demonstrates fetching data from HarperDB&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt; @result&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
@if (pets == null)
{
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&lt;/span&gt;Loading...&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
}
else
{
    &lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"table"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;thead&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Id&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Dog Name&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Breed&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Age&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;th&amp;gt;&lt;/span&gt;Action&lt;span class="nt"&gt;&amp;lt;/th&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/thead&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;
            @foreach (var pet in pets)
            {
                &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;@pet.id&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;@pet.dog_name&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;@pet.breed_id&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&lt;/span&gt;@pet.age&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                    &lt;span class="nt"&gt;&amp;lt;td&amp;gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-danger"&lt;/span&gt; &lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"() =&amp;gt; DeletePet(pet.id)"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Delete&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
            }
        &lt;span class="nt"&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the following &lt;code&gt;DeletePet()&lt;/code&gt; method to your &lt;code&gt;@code&lt;/code&gt; section under &lt;code&gt;OnInitializedAsync()&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt; &lt;span class="c1"&gt;//Delete a pet &lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;DeletePet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;postBody&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;

                &lt;span class="n"&gt;operation&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;  &lt;span class="s"&gt;"delete"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;schema&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;  &lt;span class="s"&gt;"dog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;hash_values&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="n"&gt;http&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HttpClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="n"&gt;requestMessage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;HttpRequestMessage&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;Method&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HttpMethod&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;RequestUri&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;@"YOUR_HDB_URL_HERE"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;
            &lt;span class="n"&gt;requestMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Content&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;JsonContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;postBody&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DefaultRequestHeaders&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Basic put_your_token_here"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;responseMessage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SendAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;requestMessage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;responseMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsSuccessStatusCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Pet has been deleted"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;responseMessage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Test Deletion
&lt;/h2&gt;

&lt;p&gt;Start your project in Visual Studio &lt;br&gt;
Let’s add another pet&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%2Fctxfayf1pazgmv2bqoen.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%2Fctxfayf1pazgmv2bqoen.jpg" alt=" " width="800" height="441"&gt;&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%2Fii3lw2ixyl84f21qlidl.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%2Fii3lw2ixyl84f21qlidl.jpg" alt=" " width="799" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We now have two dogs, test by deleting any of the two&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%2Fdfc4oaw2qvv324bo8y8y.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%2Fdfc4oaw2qvv324bo8y8y.jpg" alt=" " width="800" height="441"&gt;&lt;/a&gt;&lt;br&gt;
After deleting Bruno we are now left with one dog (Harper) in the database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This tutorial demonstrated how to create a basic C# Blazor app and how to use HarperDB SQL and NoSQL operations in C#.&lt;/p&gt;

&lt;p&gt;The Purpose of the &lt;code&gt;DisplayPets&lt;/code&gt; function was to demonstrate how you can communicate with HarperDB SQL operations and provide an example to make it easy to use other SQL operations provided in the HarperDB API. &lt;/p&gt;

&lt;p&gt;Finally, the &lt;code&gt;AddPet&lt;/code&gt; and &lt;code&gt;DeletePet&lt;/code&gt; functions demonstrate how you can add and alter data using HarperDB’s NoSQL operations and to help you get started for any NoSQL reference in HarperDB using C#.&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>blazor</category>
      <category>harperdb</category>
      <category>database</category>
    </item>
    <item>
      <title>Getting started with a project written by another developer</title>
      <dc:creator>Tawanda Nyahuye</dc:creator>
      <pubDate>Fri, 09 Jul 2021 19:25:24 +0000</pubDate>
      <link>https://dev.to/towernter/getting-started-with-a-project-written-by-another-developer-1l61</link>
      <guid>https://dev.to/towernter/getting-started-with-a-project-written-by-another-developer-1l61</guid>
      <description>&lt;h2&gt;
  
  
  Lets get into this
&lt;/h2&gt;

&lt;p&gt;I have been there and if you are not a newbie, you have probably been there but if you haven't been there, don't worry you will be there. There will always be a time in your life when you inherit code that was written by another developer. If the developer is smarter than you, that's a problem and if they are not, well that's a huge problem. This is a problem most developers face when they start a new job at a different 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%2Fu9k41x9qf46u8o10rs3o.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%2Fu9k41x9qf46u8o10rs3o.jpg" alt="Alt Text" width="500" height="733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How did we get here?
&lt;/h2&gt;

&lt;p&gt;Recently I was given a task to maintain a project that was written by another developer using a programming language that I am not familiar with. This article has some few things that helped me get up to speed with this new project as well as explaining these ways in case you encounter the same problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  You have been given a project written by another Developer. What should you do?
&lt;/h2&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%2Ftr2s5kqldtl4x1mryb84.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%2Ftr2s5kqldtl4x1mryb84.jpg" alt="Alt Text" width="650" height="434"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;We don't run away from the code, we run the code&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Study the programming language used
&lt;/h4&gt;

&lt;p&gt;The first thing you have to do before trying to add functionality to a project written by someone else is to understand the programming language that was used to write the project. Most people say programming languages are the same, learn one and you are good with all of them. I disagree, programming languages are different in terms of syntax but they use the same concepts like , OOP, if statements exception handling etc. Take your time to understand the syntax of the language before you try changing some lines of code in a project and this will save you a lot of time. This applies to all programming languages, Python, JavaScript, PHP, C# etc.&lt;/p&gt;

&lt;h4&gt;
  
  
  Study the source code
&lt;/h4&gt;

&lt;p&gt;Once you get an understanding of the programming language, take your time to read through the project code. Go through the code as much as you can if possible from line 1 to line n, file 1 to file n. Going through the code thoroughly will help you understand the way the developer structures their code, their commenting style, strength and weaknesses. This will also help you know where to edit when you want to edit any features of the project. &lt;/p&gt;

&lt;h4&gt;
  
  
  Experiment with the project
&lt;/h4&gt;

&lt;p&gt;Experiment with the project, make a backup then break it and fix it. If you break the project you will suffer, the suffering is necessary because it will help you understand the concepts and technologies used in the project when you are trying to fix the project. This will also help you to understand several modules of the project and their connection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt; There are several ways that can help one to get started with a project that was written by another developer but this is what worked for me. &lt;/p&gt;

</description>
      <category>productivity</category>
      <category>codenewbie</category>
      <category>python</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
