Three Ways to Integrate Slack With Heroku

Three Ways to Integrate Slack With Heroku

On December 1, Salesforce made the decision to acquire the industry-leading business communication platform, Slack,  in order to combine functionality with the Salesforce Customer 360 software product. Heroku, a cloud-based platform as a service (PaaS) offering, has been a Salesforce product since being purchased ten years ago, nearly to the day.

As a result of this announcement, I thought it would be fun to demonstrate how to integrate Slack with three Heroku add-ons. For this article, the following products will be utilized:

  • Activity To Go
  • Coralogix Logging
  • RollBar

My goal is to demonstrate how Slack—a tool already used for intra-team communication—can also be the target for application status updates, logging, and unexpected issues.

Activity To Go

Activity To Go keeps your team notified of all Heroku app changes and integrates quickly and easily with Slack. In fact, of all the integrations performed in this exercise, Activity To Go is by far the easiest to implement.

Installing the Activity To Go add-on can be done using the Heroku user interface or the following command:

heroku addons:create activitytogo:free

Once installed, the Activity To Go dashboard is available via the Heroku user interface:

Once launched, the Dashboard appears as shown below:

Connecting to Slack

For the purposes of this example, Activity To Go will be used to send alerts any time the Heroku Dyno changes. The use case here is to alert the feature team when changes are being pushed to Heroku.

In order to accomplish this, the Add subscription button is used from the Activity To Go dashboard. That opens a new subscription form:

For the purposes of this example, I named my subscription Service Alerts and selected the Release and App options. Next, click the Configure button for “Send a Slack message.”

This pops up a modal to allow access to Slack:

From here, select the service-alerts Slack channel and choose the Allow button.

The Configure Slack action modal is displayed so the settings can be confirmed:

Upon pressing the Done button, you are ready to save the new subscription:

Once saved, the Activity To Go Dashboard is updated:

Coralogix Logging

Coralogix Logging provides logging which is integrated with Heroku’s existing status levels.

Adding the Coralogix Logging add-on can be completed using the Heroku user interface or the following command:

heroku addons:create coralogix:free-30mbday

Once installed, the Coralogix dashboard can be displayed from the Heroku user interface:

Connecting to Slack

In order to connect to Slack, enter the Settings within the Coralogix dashboard. Next, select the Webhooks option and select the Add new webhook option (use the plus icon on the right side of the screen). Provide an alias as shown below and make sure to select the Slack option.

With the Slack instance open, launch the following URL:

Create a new Slack Webhook

Select the channel you wish to use (or create a new one) and single-click the Add Incoming Webhooks Integration button:

If the page does not automatically refresh, refresh it yourself and note the Webhook URL value.

Copy and paste the value in the Coralogix webhook form.

To validate, single-click the Test Configuration button. A message similar to what is displayed below should appear in the Slack instance:

At this point, Coralogix is now integrated with the specified Slack channel.

Configuring Alerts

With Coralogix ready for use, I decided to create two custom alerts:

  • Activity alert
  • Out of bounds error alert

Activity Alert

Within the Alerts section of the Coralogix dashboard, I made a new alert with the following attributes to track activity for the API:

Out of Bounds Error Alert

Within the Alerts section of the Coralogix dashboard, I created this new alert with the following attributes to track when the out of bounds exception occurs:

Adding Rollbar

Rollbar provides a different approach to application monitoring. It’s not only focused on agile development and continuous delivery, but on providing real-time visibility into your application without having to refresh cluttered log screens and mine mountains of data. Furthermore, the data that arrives into the Rollbar dashboard links to the underlying source code—even to the point where existing tickets can be linked to an unexpected event, or a new ticket can be created directly from Rollbar itself.

To install the Rollbar add-on, use the Heroku user interface or the following command:

heroku addons:create rollbar:free

The pom.xml file has already been updated in this repository to include the following dependency:

Next, the application.yml file was updated to include the following settings:

Finally, sending information to Rollbar can be as easy as this example from the RollbarEvents:

The following configuration items were set up in the Heroku instance for use by Rollbar:

Connecting to Slack

In order to connect to Slack, use the Settings menu from the Rollbar application (launched from Heroku). Once the Rollbar project is selected, navigate to the Integrations | Notifications option. Simply single-click the Slack icon in the list of Available Channels.

After selecting my existing access token, I selected the #application-errors channel and left all other defaults in place.

Pushing the Send Test Notification button will send a test message to Slack. Navigating to Slack and the #application-errors channel show the following test message:

Our Example – A Simple RESTful Application

Now let’s see all three products in action. We’ll create a simple RESTful application (integrated with all of these products), execute a few actions to trigger messages (deploy a new release, make config changes, make a request), and see how these integrations look in practice. For the example, we’ll use a Heroku Dyno containing a simple RESTful API using Spring Boot, called heroku-slack which can be found at the following URL:

The heroku-slack service returns the Artist object in all available URIs.

The object is quite simple and is displayed below:

Please review the heroku-slack repository for additional information on this RESTful service.

Interacting With Slack

Now that everything is set up and configured, we can demonstrate how the simple Spring Boot service running in Heroku can integrate with Slack.

Deploying a New Release

Giving feature team members the ability to see when the application is deployed to a Heroku Dyno has a number of benefits. With the Activity To Go add-on in place, the following message will appear in the #service-alerts Slack channel:

Heroku Dyno Configuration Changes

The Activity To Go add-on will also post a message in the #service-alerts Slack channel when system variables change in the Heroku instance:

Making a Simple Request

In this simple repository, using the GET /artists URI returns a list of hard-coded artists. Coralogix Logging is configured to publish the following Slack message in the #coralogix channel:

Generating a Bad Request

When a bad request is created—in this case by requesting an Artist for a position value which does not exist—both the Coralogix Logging and Rollbar add-on products provide information to Slack.

Trigging off the ERROR alert, Coralogix Logging posts the following message in the #coralogix channel in Slack:

Based upon the Java code updates and the GlobalControllerExceptionHandler, Rollbar posts the following message in the #application-errors channel in Slack:

The Rollbar product provides additional value in its ability to assign the error to a configured team member, directly from the Slack instance:

Please note that the error level can also be updated directly from Slack.

Summary Information

Both Coralogix Logging and Rollbar provide additional information from their user interfaces.

The Coralogix Logging alert summary provides a nice break-down of all the alerts that have been captured:

Coralogix Logging provides a high-level dashboard as well:

Rollbar provides an advanced dashboard which can even link directly to the source code:

The Items view provides a high-level summary of each error as well:


With a very low investment in both time and effort, an existing Heroku Dyno can be integrated with Slack. Feature team members and DevOps engineers can easily keep up-to-date with the application or service simply by logging into the specified Slack workspace.

In the end, the project in Heroku contains the following add-ons. As you can see, for this demonstration, none of the employed items will carry a monthly cost for use:

This article focused on three add-ons currently available in the Heroku catalog. Using a keyword search of “slack” provided a list of twenty options ready for use with the Slack program. Of course, more options likely exist via standard webhook connectivity.

Heroku was designed to help developers focus on meeting the business needs of their application. Integrating with Slack is another example of how feature teams can remain focused while keeping a pulse on their dynos running in Heroku. After all, many feature teams are likely already using Slack.

If you are interested in the source code for this article, please review the following repository on GitLab:

Have a really great day!

Source link Business Plan (Business-Class WordPress Hostin...
Strategy Business Plan (Business-Class WordPress Hostin… is where you go to use WordPress that is completely hosted for you. You don’t have to worry about anything but building your site. There is a free plan to get started with, and paid plans that offer more features. The Business plan is particularly interesting, and my guess is that most people don’t fully understand everything that it unlocks for you, so let’s dig into that.

You get straight up SFTP access to your site.

Here’s me using Transmit to pop right into one of my sites over SFTP.

What this means is that you can do local WordPress development like you normally would, then use real deployment tools to kick your work out to production (which is your site). That’s what I do with Buddy. (Here a screencast demonstrating the workflow.)

That means real control.

I can upload and use whatever plugins I want. I can upload and use whatever themes I want. The database too — I get literal direct MySQL access.

I can even manage what PHP version the site uses. That’s not something I’d normally even need to do, but that’s just how much access there is.

A big jump in storage.

200 GB. You’ll probably never get anywhere near that limit, unless you are uploading video, and if you are, now you’ve got the space to do it.

Backups you’ll probably actually use.

You don’t have to worry about anything nasty happening on, like your server being hacked and losing all your data or anything. So in that sense, is handling your backups for you. But with the Business plan, you’ll see a backup log right in your dashboard:

That’s a backup of your theme, data, assets… everything. You can download it anytime you like.

The clutch feature? You can restore things to any point in time with the click of a button.

Powered by a global CDN

Not every site on is upgraded to the global CDN. Yours will be if it’s on the Business plan. That means speed, and speed is important for every reason, including SEO. And speaking of SEO tools, those are unlocked for you on the Business plan as well.

Some of the best themes unlock at the Premium/Business plan level.

You can buy them one-off, but you don’t have to if you’re on the Business plan because it opens the door for more playing around. This Aquene theme is pretty stylish with a high-end design:

It’s only $300/year.

(Or $33/month billed monthly.)

So it’s not ultra-budget hosting, but the price tag is a lot less if you consider all the things we covered here and how much they cost if you were to cobble something together yourself. And we didn’t even talk about support, which is baked right into the plan.

Hosting, backups, monitoring, performance, security, plugins, themes, and support — toss in a free year or domain registration, and that’s a lot of website for $300.

They have less expensive plans as well. But the Business plan is the level where serious control, speed, and security kick in.

Coupon code CSSTRICKS gets you 15% off the $300/year Business Plan. Valid until the end of February 2021.

Source link

Two Issues Styling the Details Element and How to Solve Them

Two Issues Styling the Details Element and How to Solve Them

In the not-too-distant past, even basic accordion-like interactions required JavaScript event listeners or some CSS… trickery. And, depending on the solution used, editing the underlying HTML could get complicated.

Now, the <details> and <summary> elements (which combine to form what’s called a “disclosure widget”) have made creation and maintenance of these components relatively trivial.

At my job, we use them for things like frequently asked questions.

Pretty standard question/answer format

There are a couple of issues to consider

Because expand-and-collapse interactivity is already baked into the <details> and <summary> HTML tags, you can now make disclosure widgets without any JavaScript or CSS. But you still might want some. Left unstyled, <details> disclosure widgets present us with two issues.

Issue 1: The <summary> cursor

Though the <summary> section invites interaction, the element’s default cursor is a text selection icon rather than the pointing finger you may expect:

We get the text cursor but might prefer the pointer to indicate interaction instead.

Issue 2: Nested block elements in <summary>

Nesting a block-level element (e.g. a heading) inside a <summary> element pushes that content down below the arrow marker, rather than keeping it inline:

Block-level elements won’t share space with the summary marker.

The CSS Reset fix

To remedy these issues, we can add the following two styles to the reset section of our stylesheets:

details summary { 
  cursor: pointer;

details summary > * {
  display: inline;

Read on for more on each issue and its respective solution.

Changing the <summary> cursor value

When users hover over an element on a page, we always want them to see a cursor “that reflects the expected user interaction on that element.”

We touched briefly on the fact that, although <summary> elements are interactive (like a link or form button), its default cursor is not the pointing finger we typically see for such elements. Instead, we get the text cursor, which we usually expect when entering or selecting text on a page.

To fix this, switch the cursor’s value to pointer:

details summary { 
  cursor: pointer;

Some notable sites already include this property when they style <details> elements. The MDN Web Docs page on the element itself does exactly that. GitHub also uses disclosure widgets for certain items, like the actions to watch, star and fork a repo.

GitHub uses cursor: pointer on the <summary> element of its disclosure widget menus. 

I’m guessing the default cursor: text value was chosen to indicate that the summary text can (along with the rest of a disclosure widget’s content) be selected by the user. But, in most cases, I feel it’s more important to indicate that the <summary> element is interactive.

Summary text is still selectable, even after we’ve changed the cursor value from text to pointer. Note that changing the cursor only affects appearance, and not its functionality.

Displaying nested <summary> contents inline

Inside each <summary> section of the FAQ entries I shared earlier, I usually enclose the question in an appropriate heading tag (depending on the page outline):

    <h3>Will my child's 504 Plan be implemented?</h3>
  <p>Yes. Similar to the Spring, case managers will reach out to students.</p>

Nesting a heading inside <summary> can be helpful for a few reasons:

  • Consistent visual styling. I like my FAQ questions to look like other headings on my pages.
  • Using headings keeps the page structure valid for users of Internet Explorer and pre-Chromium versions of Edge, which don’t support <details> elements. (In these browsers, such content is always visible, rather than interactive.)
  • Proper headings can help users of assistive technologies navigate within pages. (That said, headings within <summary> elements pose a unique case, as explained in detail below. Some screen readers interpret these headings as what they are, but others don’t.)

Headings vs. buttons

Keep in mind that the <summary> element is a bit of an odd duck. It operates like a button in many ways. In fact, it even has implicit role=button ARIA mapping. But, very much unlike buttons, headings are allowed to be nested directly inside <summary> elements.

This poses us — and browser and assistive technology developers — with a contradiction:

  • Headings are permitted in <summary> elements to provide in-page navigational assistance.
  • Buttons strip the semantics out of anything (like headings) nested within them.

Unfortunately, assistive technologies are inconsistent in how they’ve handled this situation. Some screen-reading technologies, like NVDA and Apple’s VoiceOver, do acknowledge headings inside <summary> elements. JAWS, on the other hand, does not.

What this means for us is that, when we place a heading inside a <summary>, we can style the heading’s appearance. But we cannot guarantee our heading will actually be interpreted as a heading!

In other words, it probably doesn’t hurt to put a heading there. It just may not always help.

Inline all the things

When using a heading tag (or another block element) directly inside our <summary>, we’ll probably want to change its display style to inline. Otherwise, we’ll get some undesired wrapping, like the expand/collapse arrow icon displayed above the heading, instead of beside it.

We can use the following CSS to apply a display value of inline to every heading — and to any other element nested directly inside the <summary>:

details summary > * { 
  display: inline;

A couple notes on this technique. First, I recommend using inline, and not inline-block, as the line wrapping issue still occurs with inline-block when the heading text extends beyond one line.

Second, rather than changing the display value of the nested elements, you might be tempted to replace the <summary> element’s default display: list-item value with display: flex. At least I was! However, if we do this, the arrow marker will disappear. Whoops!

Bonus tip: Excluding Internet Explorer from your styles

I mentioned earlier that Internet Explorer and pre-Chromium (a.k.a. EdgeHTML) versions of Edge don’t support <details> elements. So, unless we’re using polyfills for these browsers, we may want to make sure our custom disclosure widget styles aren’t applied for them. Otherwise, we end up with a situation where all our inline styling garbles the element.

Inline <summary> headings could have odd or undesirable effects in Internet Explorer and EdgeHTML.

Plus, the <summary> element is no longer interactive when this happens, meaning the cursor’s default text style is more appropriate than pointer.

If we decide that we want our reset styles to target only the appropriate browsers, we can add a feature query that prevents IE and EdgeHTML from ever having our styles applied. Here’s how we do that using @supports to detect a feature only those browsers support:

@supports not (-ms-ime-align: auto) {

  details summary { 
    cursor: pointer;

  details summary > * { 
    display: inline;

  /* Plus any other <details>/<summary> styles you want IE to ignore.

IE actually doesn’t support feature queries at all, so it will ignore everything in the above block, which is fine! EdgeHTML does support feature queries, but it too will not apply anything within the block, as it is the only browser engine that supports -ms-ime-align.

The main caveat here is that there are also a few older versions of Chrome (namely 12-27) and Safari (macOS and iOS versions 6-8) that do support <details> but don’t support feature queries. Using a feature query means that these browsers, which account for about 0.06% of global usage (as of January 2021), will not apply our custom disclosure widget styles, either.

Using a @supports selector(details) block, instead of @supports not (-ms-ime-align: auto), would be an ideal solution. But selector queries have even less browser support than property-based feature queries.

Final thoughts

Once we’ve got our HTML structure set and our two CSS reset styles added, we can spruce up all our disclosure widgets however else we like. Even some simple border and background color styles can go a long way for aesthetics and usability. Just know that customizing the <summary> markers can get a little complicated!

Source link


Podcast logo for veteran mental health and wellbeing : graph…

Hi folks. I created this logo for a friend who has created a podcast dedicated to helping fellow vets dealing with mental health issues. He wanted a logo that could be identified by vets (hence the arrows which are indicative of battle plan maps), while also showing that it’s a podcast (the microphone). I created the video (using stock videos) and 3D logo. The music and voiceover were provided by the client. I invite any creative suggestions for the future.

r/graphic_design - Podcast logo for veteran mental health and wellbeing
r/graphic_design - Podcast logo for veteran mental health and wellbeing
r/graphic_design - Podcast logo for veteran mental health and wellbeing
r/graphic_design - Podcast logo for veteran mental health and wellbeing

Source link

r/graphic_design - How would you describe this style?

How would you describe this style? : graphic_design

Hi, I’ve been seeing a lot of this style lately. What would you call/describe it as? I just loveeeee how it looks and would like to know more about it. Thanks!

r/graphic_design - How would you describe this style?

r/graphic_design - How would you describe this style?

r/graphic_design - How would you describe this style?

Source link

r/webdev - help with a basic fill box for whatsapp to open a link .

help with a basic fill box for whatsapp to open a link . : w…

Hi ..
i just wanted to ask if someone can help me to make just a basic fill box like this :

r/webdev - help with a basic fill box for whatsapp to open a link .

and ” SEND ” button .

and its basically auto full the whatsapp link and replace the XXX to that number .

( pressing Send will open the link with the number )

the link will auto open the whatsapp app on my windows and start the chat with that number .

that’s it .

thank you <3

Source link

Productivity Life Hacks for Software Engineers (and All Know...

Productivity Life Hacks for Software Engineers (and All Know…

Everyone seems to be strapped for time these days and desperate to get more done in less time. I’m in the same boat.

Enter “life hacks”: simple tricks to make your life easier. Or, questionable bits of productivity advice from strangers on the internet with hit-or-miss results.

As gimmicky as productivity life hacks can be, they really can help when the advice is grounded in science. Understanding the psychology of your mind at work allows you to tap into your hidden potential. The trick is not to work more – instead, it’s to work more meaningfully.

Below are five ideas to get more out of your work day. So grab your shovels, because it’s time to dig in.

1. Work Less, but in Deeply Focused Blocks of Time

Study after study has confirmed this simple truth: If you want to get more done, working longer hours is not the solution. Instead, we need to learn to work more deeply. Cal Newport highlights this concept in his aptly titled book, Deep Work. In it, he argues that the ability to think deeply is becoming increasingly difficult to develop and also increasingly valuable.

An example of deep work could be thinking through how to architect a new software feature. Contrast this with shallow work like checking email, which often does not require a lot of mental effort or concentration.

When you are performing deep work, you enter a “flow” state, to use the term coined by Mihaly Csikszentmihalyi in his 1990 book, Flow. When someone experiences flow, they will often report being entirely present. Their sense of time is altered. Concentration deepens. There is a perfect balance between their skill level and the difficulty of the current challenge. When we are experiencing flow, we are happy and we are productive.

So, what are the obstacles stopping us from entering flow state every day? For starters, Newport states that you can only handle about one to four hours of deep concentration in a day before you’re drained. So we can’t be experiencing flow all day. But we can and should be able to experience flow often!

Part of the problem lies in our work schedules. If you’re like most knowledge workers, your day is riddled with meetings, many of which probably could have been an email. Meetings themselves aren’t inherently bad, but when they’re scheduled throughout the day, leaving only 30-60 minute blocks of time in between, productivity plummets. It takes time to get into the zone, and 30 minutes simply isn’t enough time to accomplish anything meaningful.

Dilbert – Scott Adams

Paul Graham’s famous essay, Maker’s Schedule, Manager’s Schedule, outlines the problem beautifully: Managers operate in one-hour blocks, but makers operate in half-day blocks. Meetings don’t disrupt managers’ schedules, but a meeting scheduled in the middle of a maker’s day can blow their whole afternoon.

The solution? Block off time in your schedule for deep work. This is your time to focus and to get work done. Treat it like an actual meeting, and don’t let people schedule over it. When you do need to attend meetings, try to schedule them for the beginning or end of your day so as to not create interruptions. You might even consider creating “office hours” for when people can stop by to ask you for help.

And if you initially struggle with working on only one thing for a given period of time, try a Pomodoro timer. The Pomodoro Technique helps you chunk work into intervals (typically 25 minutes long) followed by short breaks. Its purpose is to time-box your tasks while encouraging you to focus on only one thing at a time without distractions. You can be low-tech and use a physical kitchen timer for your sessions. Or, try one of the many free Pomodoro timer apps available online. Here’s one I built and hosted on Heroku.

2. Take Care of Your Body

This shouldn’t come as a surprise to anyone, but if you want to be productive at work and have energy for your day, you need to take care of your body. [I write, as I take another sip of my Mountain Dew…]

It’s all too easy to stay up late binge-watching your favorite TV show, then wake up and eat junk food throughout the day, all while sitting hunched over in your chair as you strain your eyes staring at your monitor. I struggle with many of these problems myself. So, let’s look at some of the benefits of maintaining a healthy lifestyle when it comes to work productivity.

Why do we need sleep, anyway? Why shouldn’t you routinely stay up late into the night coding? After all, time spent sleeping is time not spent getting work done. But, it turns out that sleep is crucial in retaining what you learn. It’s during slow-wave sleep (SWS) and rapid-eye-movement (REM) sleep that the information you’ve learned is consolidated and stored in long-term memory. We sleep in cycles, so a short amount of sleep or a restless night of sleep means less time spent in these phases. To that effect, it is counterproductive to consistently spend late nights working and studying without giving your brain adequate time to process and save all this new information. Lack of sleep can also lead to irritability, the inability to focus, and lower productivity, which hurts your work performance as well as your relationships with your coworkers.

Exercise is also important, not just for your body, but for your mind. show that exercise is linked to reduced stress, higher work performance, and increased creativity. Conversely, sitting for long periods of time is correlated with lower work output and poorer mental health. So next time you’re feeling an afternoon slump, rather than reach for the caffeine, try taking a short walk.

3. Take Breaks

Working non-stop or long hours doesn’t actually make you more productive. In fact, breaks are an essential part of any knowledge worker’s day. When you take a break from a difficult problem, your brain enters a diffuse mode of thinking during which it solves problems in the background. This is why it’s so common to have a sudden stroke of insight after a game of ping-pong with a colleague or while showering in the morning. So if you’re feeling stuck on a problem, try standing up and walking around for five minutes before coming back to your desk. You may be surprised to find new ideas flowing through your mind to help get you moving in the right direction.

Reddit r/ProgrammerHumor post

Breaks also allow you to casually interact with your co-workers. Google and other like-minded companies have intentionally designed their offices to facilitate these kinds of encounters by placing micro-kitchens filled with snacks throughout their offices. Each micro-kitchen contains different treats, which means that you may need to visit a different floor to find your favorite items. This leads engineers to bump into sales reps, or marketing heads to run into customer support technicians. These chance encounters with people outside your normal bubble can lead to fascinating breakthroughs and creative ideas.

4. Remove Distractions From Your Environment

Have you ever tried to focus on a difficult task in a loud environment filled with distractions? Imagine trying to solve a bug in the middle of a rock concert. Not an ideal work environment, right? And yet, we can often unintentionally create workplace environments for ourselves that are filled with distractions. Do you have email notifications turned on? How about Slack notifications? Does your phone or smartwatch ding or buzz every time you get a text? How many tabs are currently open in your browser? Is your desk cluttered with papers? All of these things create small interruptions that can derail your productivity.

In Adam Alter’s book Irresistible, he notes that “by one estimate, it takes up to twenty-five minutes to become re-immersed in an interrupted task. If you open just twenty-five emails a day, evenly spaced across the day, you’ll spend literally no time in the zone of maximum productivity. The solution is to disable new email notifications and to check your email account infrequently” (Irresistible, pages 109-110).

Dilbert – Scott Adams

This highlights an incredibly important point: There is a cost to each interruption, and it’s much greater than the time the interruption itself takes. A quick 30-second interruption can cause you to lose your train of thought, setting you several minutes back. So consider temporarily disabling Slack messages while you’re in the zone or silencing your phone during your most productive hours. These simple practices will allow you to maintain your flow state for much longer periods of time. And if your coworkers can’t take a hint that when your headphones are on you’re trying to focus, feel free to send them this:

Why you shouldn’t interrupt a programmer

5. Take Time to “Sharpen the Saw”

Finally, take time to “sharpen the saw.” This term, coined by Stephen R. Covey, is the last habit in his book The 7 Habits of Highly Effective People. To quote Dr. Covey: “We must never become too busy sawing to take time to sharpen the saw.”

It’s easy to fall into the trap of only completing task work during work hours. After all, you’re on the clock, and your employer is paying you to be there, so you should be “working,” right? However, that type of thinking is short-sighted. It’s like trying to cut down a large tree with a saw for hours while never taking time to sharpen the saw. The time you spend sharpening the saw is time not spent cutting down the tree. But with a sharper saw, the more effective your cuts will be. You’ll actually be able to cut the tree down in less time than it would have taken to cut the tree down had you not stopped to sharpen the saw. This life hack applies to lumberjacks and programmers alike!

The danger of choosing not to take time for learning

Good employers recognize this truth, and they actively encourage employees to spend a few hours each week doing some intentional learning. Don’t feel guilty about taking time to read an article or watch a video tutorial during work hours. When you do these things as part of your deliberate skill-sharpening practice, you’ll become a far more effective engineer than you would be if you solely focused on task work 100% of the time.

So if you feel like you struggle with writing unit tests, go watch a Pluralsight course for two hours on unit testing with Jest (or whatever testing framework is relevant to your programming language).

If you are trying to learn React, go read the docs – the React docs are actually really good!

Don’t just slog through things. Be deliberate in what you are trying to learn.


Being more productive isn’t about working more – it’s about maximizing your results in the time you do have. So if you find your work productivity is lower than you’d like it to be, give these life hacks a shot – after only a few weeks, you may be impressed by how much more productive you’ve become. And remember, as the old adage goes: work smarter, not harder.

Source link