<?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: Krishna</title>
    <description>The latest articles on DEV Community by Krishna (@krisshnacool).</description>
    <link>https://dev.to/krisshnacool</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%2F1102195%2Fd3ed2b80-f9bb-4abb-bcec-fee737fb3625.jpg</url>
      <title>DEV Community: Krishna</title>
      <link>https://dev.to/krisshnacool</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/krisshnacool"/>
    <language>en</language>
    <item>
      <title>Push Notifications That Earn Their Place</title>
      <dc:creator>Krishna</dc:creator>
      <pubDate>Mon, 26 Oct 2026 15:57:04 +0000</pubDate>
      <link>https://dev.to/krisshnacool/push-notifications-that-earn-their-place-31nl</link>
      <guid>https://dev.to/krisshnacool/push-notifications-that-earn-their-place-31nl</guid>
      <description>&lt;p&gt;Most apps lose over half their opted-in users within a year. The cause is usually the app itself: wrong timing, generic copy, too many sends.&lt;/p&gt;

&lt;p&gt;Before any push, ask one question:&lt;/p&gt;

&lt;p&gt;Why would this person be glad their phone buzzed right now?&lt;/p&gt;

&lt;p&gt;If the answer is "so our numbers go up", don't send it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask for permission after a win, not at launch
Wait for the first real win: a saved result, a completed order.
Show your own screen first. Trigger the system prompt only after they tap yes.
Name the reason: "Get a message when your order ships", not "Enable notifications".
On iOS, use provisional authorization for informational pushes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Asking at launch gets about 40% opt-in on iOS. Asking after a win gets 70%+.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give every push a reason that belongs to the reader
Noise   Their reason
We miss you! Come back and explore. Your draft from Tuesday is still here.
New features just dropped.  The export you asked about is live.
50% off, today only!    The jacket you saved dropped to $48.
Lead with the specific; only the first few words show on a locked phone.
One push, one thing. No exclamation marks or emoji in the title.
Never fake urgency or activity.&lt;/li&gt;
&lt;li&gt;Reach drifting users at their own hour&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Two small jobs replace the campaign blast:&lt;/p&gt;

&lt;p&gt;Nightly score: how likely each user is to return on their own (days away, first-week sessions, core action done, past taps).&lt;br&gt;
Hourly send: users below the line, inside their usual open hours, not reached this week. Send the one message that fits. No match, no send.&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%2Fv389a82jzjdbo380et0g.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%2Fv389a82jzjdbo380et0g.png" alt=" " width="800" height="495"&gt;&lt;/a&gt;&lt;br&gt;
Bonus: home Wi-Fi in the evening means the user has sat down. Infer it from connection type, open hour and a hashed IP. You don't need the SSID or location permission.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give every user a budget
Rule    Value
Nudges per user 1 a week, max 2
Gap after any push  24 hours
Quiet hours (local) 22:00 to 08:00
After 1 ignored push    Wait 2 weeks
After 2 ignored in a row    Stop nudging
Transactional (order shipped, reply received)   Unlimited&lt;/li&gt;
&lt;li&gt;Get the platform basics right
Android: one channel per kind of push ("Order updates", "Reminders"), named for users.
Tokens: delete on FCM UNREGISTERED or APNs Unregistered. Re-register on every launch.
Deep links: test them from a cold start.
Rich media: only when the image is the content. Keep it under 100 KB.&lt;/li&gt;
&lt;li&gt;Measure opt-outs, not opens&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Open rate flatters you. Track these instead:&lt;/p&gt;

&lt;p&gt;Opt-out rate within 7 days of a push: under 0.5%&lt;br&gt;
Opens that lead to the core action: above 30%&lt;br&gt;
Opt-in rate on your own pre-prompt: above 60%&lt;br&gt;
Dead-token rate per send: under 2%&lt;/p&gt;

&lt;p&gt;Send fewer pushes and you'll keep more users.&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>ux</category>
      <category>android</category>
      <category>ios</category>
    </item>
    <item>
      <title>Harnessing the Power of JavaScript's Map Function for Enhanced Development Introduction</title>
      <dc:creator>Krishna</dc:creator>
      <pubDate>Tue, 12 Sep 2023 06:55:16 +0000</pubDate>
      <link>https://dev.to/krisshnacool/harnessing-the-power-of-javascripts-map-function-for-enhanced-developmentintroduction-n8k</link>
      <guid>https://dev.to/krisshnacool/harnessing-the-power-of-javascripts-map-function-for-enhanced-developmentintroduction-n8k</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As developers, we often find ourselves working with arrays in JavaScript, manipulating data, and transforming it in various ways to meet the requirements of our applications. The map function in JavaScript is a powerful tool that can simplify and streamline this process. In this blog post, we'll explore the map function and demonstrate how it can be used to enhance your development workflow.&lt;/p&gt;

&lt;p&gt;Understanding the map Function&lt;br&gt;
The map function is a built-in method that JavaScript provides for arrays. It allows you to apply a specified function to each element of an array and create a new array with the results. Here's the basic syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const newArray = array.map(callback(element, index, array));

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

&lt;/div&gt;



&lt;p&gt;array: The original array you want to iterate through.&lt;br&gt;
callback: A function that is called for each element in the array.&lt;br&gt;
element: The current element being processed.&lt;br&gt;
index (optional): The index of the current element being processed.&lt;br&gt;
array (optional): The array that map was called upon.&lt;br&gt;
Mapping to a New Array&lt;br&gt;
One of the most common use cases for the map function is to create a new array by applying a transformation to each element of the original array. Let's look at a simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const numbers = [1, 2, 3, 4, 5];
const doubledNumbers = numbers.map((number) =&amp;gt; number * 2);

console.log(doubledNumbers); // [2, 4, 6, 8, 10]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the map function to double each number in the numbers array, resulting in a new array called doubledNumbers.&lt;/p&gt;

&lt;p&gt;Mapping Objects&lt;br&gt;
The map function is not limited to working with simple values like numbers or strings; it can also be used to transform objects. Consider the following example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' },
];

const userNames = users.map((user) =&amp;gt; user.name);

console.log(userNames); // ["Alice", "Bob", "Charlie"]

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

&lt;/div&gt;



&lt;p&gt;In this case, we are mapping an array of user objects to an array of their names.&lt;/p&gt;

&lt;p&gt;Filtering with map&lt;br&gt;
The map function can also be used to filter an array while mapping it. By returning undefined for elements you want to exclude, you effectively filter out those elements from the resulting array. Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.map((number) =&amp;gt; {
  if (number % 2 === 0) {
    return number;
  }
});

console.log(evenNumbers); // [undefined, 2, undefined, 4, undefined]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the map function to filter out odd numbers while mapping the array. You can then use methods like filter or reduce to further process the filtered array if needed.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
The map function is a versatile tool that every JavaScript developer should have in their toolkit. It simplifies the process of transforming and manipulating arrays, making your code more concise and readable.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
