Over 16 reasons why Jira and Confluence suck

Jack Tomaszewski
Jul 28 · 24 min read

For years I have been both an end-user and a developer of many web applications, with many of those being Software as a Service.

Many times I have used tools like Asana or Trello to manage project tasks.

Recently I have been asked to use Jira. I had joined a new project of an existing organization. They’ve been using Jira for years.

Looks so nice at first glance.

And damn, mate. That has been an adventure.

Hanging out with Jira

First week was like going back into the 90s. Everything was opening so slowly. The UI was bloated so much. It asked me so many times with senseless “Are you sure?” confirmations. I felt like being back in Windows ‘95 times. (Although Windows was way better.)

Second week I was constantly like “hey guys, can we switch to Asana?” ;) Me and my teammate went even as far as to create an alternative Asana board. We had started creating our own tasks in there instead of Jira. Unfortunately, switching over was out of the question. We had to use the existing tool to which the whole organization has adhered to.

During the third week and the following few months, I realized that I had no other choice. I had to get used to it. As they say, “If you can’t change something, live with it.” That meant getting used to a tool that encouraged everything, but the effective project management and agile software development.

The only thing Jira encourages you to is to spend as little time on it as possible. Many of my teammates prefer to keep their TODO list in a physical notebook. They just find Jira too ineffective and time consuming. (Strangely, when I had collaborated with others on Asana or Trello, nobody was doing that. They found it intuitive enough to make notes in the app instead.)

Do you find this better than Jira? / Photo by Glenn Carstens-Peters on Unsplash

Some would say: “You hadn’t learned how to use Jira yet”. “Jira is going through important updates now”. I call bullshit! I’ve been using it for 9 months already, and I still find it as terrible as when I was starting out with it. (Asana and ClickUp probably introduced 10 new features in the meantime.)

I was so surprised that such a popular and important for the whole organisation tool is so terrible. Jira should be a web app that “lets you easily manage your project”. Yet, it fails tremendously at it.

Some of my friends respond to me when I am explaining my Jira horror stories to them: “Ok, I understand you, it could be better a bit, but other tools are nowhere near good as Jira is in reporting or integration with other tools.”

What kind of explanation is that? Asana lacks one feature on reporting, so what? Have you considered what downsides to your projects brings Jira? With such User Experience it has, it makes more bad than good to your organization. It’s a matter of time until the other tools will have the features you need without the cost of unusability. Leaving your organisation on Jira will be a huge disadvantage to both your projects or any people considering to work for you.

Let me give you a few examples to illustrate my point.


Jira UX

For the purpose of this article I signed up for a free trial of “Jira Software + Documentation” package. As my user scenario, let’s imagine that I had just created a new company, and now I created a project in Jira called “Indri Landing”, which will be used as a project management centre for preparing the launch of my company’s landing page.

After creating the project, I decided to create my first task (that is: issue).

Kanban board — first view you see after creating a project.

1. Issue Type — why does it exist?

First thing you learn while creating an issue in Jira, is that each issue is not a just an issue. New issue by default might be a Story, Epic, Bug Item, or a Task (and a sub-task, but more about it in a second).

Why does such split exist? The difference between them is explained in both theory (“they serve different purpose”) and practice (“Story has different workflow than a Bug”).

In short however they are all the same thing. A task to do/fix something.

So in practice, every time you create an Issue, you have to think on what kind should it be. Should it be an epic, a story or a task? Or maybe all of them? (Like, I should first create “Initial Release” epic, then follow it with a “Bootstrap the project” story, and then, in it create tasks like “Create source code repository”?)

… uhm. I’ll just create “Create landing page” task for now, and then compose it of other tasks.

2. How to create a new issue?

After creating my first issue, I wanted immediately to create another one. However, because now that I have an existing issue, the big “Create an issue” placeholder has disappeared. So I started to look for an “Add Issue” button.

You have 500 ms to find the “Add Issue” button. Start.

…Where is it?

I clicked on the three dots button, but the only thing I saw was this.

I can create new boards, but not issues.

Then I clicked “Add Item” link in the sidebar on the left, just to see this:

I can create shortcuts and pages, but not issues.

… oh, there it is! On the far left in the blue sidebar which visually doesn’t belong to the project view at all. Interesting decision from the UI designers.

“Add issue” button found — on the far left of the screen as a tiny “plus” icon.

3. Task can have sub-tasks, but a task can’t be a sub-task of a task

I’ve been working with Jira for 9 months now and still I can’t stop laughing while reading the above subtitle. An issue on Jira can be a task or a sub-task of a task. However, existing task can’t be a sub-task of a task. You’d need to “convert” existing task to a sub-task in order to make it such.

My scenario: I had created second task called “Prepare Graphic Design”, and now I wanted to make it as a sub-task of “Create landing page” task.

I have created two tasks, but now I realized that one of them is actually a part of the another.

So I went into “Create landing page” and tried to add a sub-task.

Unfortunately, after typing the other task name in, it just created a new sub-task:

By the way. What’s this “This board has been updated” alert about?

Mhm, not something I desired. Let’s remove it. However I couldn’t find any remove button next to the sub-task element on the sub-tasks list. (Why? I don’t know yet.) So I clicked on the sub-task in order to proceed to its’ view and maybe find the remove button there.

Looking for the “Remove issue” button. Attempt no 1.

… I must be blind. No delete button anywhere, even after clicking on the main three dots button. Maybe the other three dots button includes that?

Looking for the “Remove issue” button. Attempt no 2.

Nope. Maybe if I go to the parent’s task view and click the three dots button that is located next to the “Sub-tasks” section title, I’ll be able to delete the subtask from there?

Nope! I was expecting here something in lines of “Select and delete”, but the only thing that could be anyhow related to it was the “Bulk edit” link. So I clicked that.

… which caused a redirect to some totally different page called “Bulk Operation”! Which was loading for about 6 seconds. While all I wanted was just to delete a subtask that I had just created. (Mhm, I hope it will remember my last view once I finish this “Bulk Operation”.)

“You do not have permission to delete the selected 1 issues.”

A bit weird. I am the only person in this project, I had created both it and the issue, but now I can’t remove them? Why is that? I started googling.

TL;DR: Deleting issues is prohibited because it would make restoring them impossible.

Oh, so it’s a feature, not a bug. OK, I get it - it might be a good safety practice not to let the users delete any of the issues. (Even the ones they had just created a second ago?! ;>).

… Come on. Is it the best that a big company like Atlassian can think of?

Why they have never thought of placing an “Archive” button? Almost every web-based tool nowadays has a way to archive files, photos, articles. (It’s same as “delete” but with “undo” feature included.)

Anyways, I won’t be changing these permissions now, I don’t have time for that. Maybe I can mark the subtask as “Skipped” or something?

Nope. I can only move it forwards. Thus, as a temporary workaround, I renamed the issue title to “ARCHIVED” and marked as done for now.

4. Making a task subtask of a task

Anyways, let’s go back to the “Create landing page” issue. I wanted to make an existing task a subtask of it.

By spotting a “Link” button in the UI I noticed I can link issues to each other. It looks cool, I admit, however it seems to be something else than the task-subtask relation:

There are many options in the link dropdown, like “blocks” “clones” “duplicates”, but there is no option like “subtask of”.

Why do subtasks exist at all then, if tasks can be linked to each other on their own anyways? I mean, a subtask is usually blocking the parent task too, isn’t it?

Since I can’t link an existing task to another task with a task-subtask relation, maybe I can convert existing task to a “subtask” type? Let’s google.

There is a possibility to convert task into subtasks one by one and also by group as well.

OK. But where is that functionality to convert a task? Maybe I missed out on it somewhere?

Searching again in the three dots dropdown.

I found “Convert to Subtask” link after clicking one of the three-dots buttons. After clicking it (and waiting ~5-10s for a full page reload), following view has been shown.

Looks like I was about to reformat my OS. Why does it look like so complex? (All I wanted was to make a task a subtask.)
The multi-step form also shows this. Even though I had already shown my intention explicitly by clicking a “Convert to subtask” link. This select here doesn’t list any other options anyways. What’s the sense of showing it?

After selecting the issue and clicking “Next”, it moved me to the next step:

Step that is not required, gives no information, and has no possible actions other than “Next”. Why bother showing it at all?

Having clicking another senseless “Next”, it moved me forward again:

Three times I had already confirmed that I want to convert the task into a subtask. What does JIRA do? Asks you again! (Ordering a taxi would be easier.)

After final click on the “Finish”, (and another full page redirect and ~8s of awaiting), finally I managed to convert the task into a subtask:

Yes! Task seems to be a subtask now. (However I don’t even see the parent task title, just an ID…)

BTW. Have you noticed that alert in the top?

It tells me that I’m on a new issue view. That’s generally a cool way to inform users about new features. However I’m a new user. I don’t really know what’s new and old.

Besides, can you see it — it has no close button?! (Clicking all the links and hitting refresh also doesn’t hide it — yes, I checked.) Jeez… Let’s move forward, maybe this annoying alert will disappear soon. (It won’t. I’ve been seeing it for 9 months already.)


5. Splitting tasks into separate releases

Having learned that converting an existing task to a subtask is non-trivial, I created next subtasks directly from the task view. I also created some other tasks, like “Ask for feedback”, “Check SEO”, that should be done after the initial release of my website is done.

Now, I’d like to somehow group those other issues into a future release or something, so they don’t distract me while working on the initial release tasks.

I found this button “Release” in the Kanban board view and noticed that it allows me to create releases:

Did you know… release needs a date? What if we don’t know when a release will be done? Don’t ask me.

I decided to create two new releases: “1.0” and “2.0”. Unfortunately, after creating the first release, I couldn’t create the second one anymore:

“Release” button is now disabled.

Before resorting out to google, I noticed that there is a “Releases” link in the sidebar. I clicked on it only to have Jira greeting me with such view:

Releases view that shows nothing, even though I had just created a release.

This resulted in me having three questions on my mind now:

  1. “Can’t find that version” — what? what version? I haven’t even start looking for any specific version yet.
  2. Is release the same thing as version? (Why don’t you guys stick to one naming?)
  3. Where is the version/release I had created?

After changing the search filters from “Unreleased” to “Released”, I learned that release has in fact been created but it has been marked as “Released”. Even though I had set the date of it to be in the future. Why?

No idea. To fix it I “unreleased” it. After that, from the same Releases view, I created a new version called “2.0”:

While creating a release in this view, you don’t have to set its’ dates. So are they required or not?

Now that I have my planned releases created, I decided to go back into the Kanban board and assign my existing issues to their corresponding releases.

Looking for “Release” in the issue’s sidebar. Found just “Fix Versions”. I guess that’s it?

(Why do I have to guess all the time?)

Release (that is: Fix Version) assigned. Uff.

While going into the issue view, and assigning it to a specific Fix Version for about 4th time, I noticed it’s quite a tedious task. I’d like to automate it a bit. Can I select many issues and bulk edit them all at once?

I went back to Kanban board because I was expecting that some kind of bulk actions were reachable from there. (Un)Surprisingly, they weren’t.

Looking for Bulk Edit on Kanban board. Without success.

Where can it be? Let’s google [again].

Bulk actions are accessible only from a “search view”. Whatever that is.

… So how do I perform the “search”? (I thought Kanban board is a search view already, as it has the search filters.)

I clicked the search button in the sidebar,

to open this:

Unfortunately, no bulk actions here yet.

I clicked “Advanced search for issues”. A full page reload and 10 seconds later,

Advanced search view has appeared. Showing total 0 issues that were matching my search (even though I hadn’t search for anything yet), and a big field with some long, weird, programmatic query language.

🤦 ‍Why would you put as a default search view a view that shows nothing?

To change the situation I had to click “All issues”. Finally it showed something:

But where are the bulk actions? Maybe in that “More” button next to filters?

Nope. Maybe they’ll appear after clicking “Advanced” button, the one located next to the search input?

Nope. It just changed the input look. Maybe in the three dots button in top right corner then?

Yes! I got it! But… I don’t want to change all 16 issues… I only want to change some of them. How do I do it? …

I changed the search filters to scope the issues down a bit, so the view would show only the main issues, and decided to Bulk change all 4 of them.

Luckily, (after 5s and another full page reload), Jira listed all those issues again, but this time with checkboxes, so I could select only some of the issues that I initially wanted to edit. (Couldn’t we do the “select” thing on the previous view though?)

Another list of issues, this time finally with checkboxes.

P.S. If you’d like to preview those issues here before selecting them, guess what — you can’t. (If you click on the issue link, it’ll redirect you to it, dropping this view.) If Kanban view has ability to preview issues in a modal, why this one doesn’t have it? 🤔

After having selected 3 of those 4 issues, clicking 4 times on a “Next” button (and waiting for a full page render between each of those clicks), finally I was given this final view:

Operation complete. Congratulations! (They could have put some fireworks in here.)

6. Browsing issues only from a given release

Having my issues split amongst two separate releases, now I could focus only on the issues from the 1.0 release… At least that’s what I hoped for. I went back into the Kanban view.

First question on my mind: How can I filter issues to see only the ones from 1.0 release?

… looking for the filter button …

  1. If I had clicked the “Release” button in the top-right corner, that would have only shown me a dropdown that allows to add/move “Done” issues into an existing release.
    (P.S. It’s not easy to tell it from the UI what exactly it does. You have to learn it by yourself by making a release and observing what it exactly does, or by learning the docs. The modal doesn’t clearly explain its’ function.)

2. If I had clicked the “three-dots” button in the top right corner, I wouldn’t have seen there any filters neither. Instead, I would spot two other links, that maybe could help me: “Board settings” and “Create board”.

… Board Settings? What’s that? Let’s try that.

“Board Settings” view

It seemed like it could be something that I was looking for. Maybe the Kanban board is programmed in such a way that it always shows all the Board issues, and if you want to filter them, you have to edit the board or create a new one? (I had to have such complex thoughts in my head just to filter the issues on the issues view.)

… but that’d be super weird. How many applications do you know in which you have to “create” a view, in order to filter it? (If you want to filter emails on Gmail, do you have to create a new Gmail board? Nope.)

Nevertheless, I decided to create a new board specifically for the 1.0 release. After clicking “Create board” button, Jira greeted me with the following modal:

Scrum or Kanban? That is the question.

What if I like to work in Sprints but I also like to use a Kanban view? Does it really exclude itself? :( After a deep thought, I decided I usually prefer to be flexible with sprints and deadlines. I went with Kanban.

What Board would you like to create, sir?

At first thought, I wanted to pick “Board from an existing Saved Filter”, as I wanted to show issues from my project that are a bit filtered. However, what is that “Saved Filter” thing? Sounds a bit too complex as for a simple filter. So I picked “from an existing project” (because indeed I wanted to create a board for an existing project).

Last step of creating the board
Board created. Looks the same as my initial one.

Oh damn, I had created the same board as I had before. 😞

They didn’t predict that I want to show issues from an existing project AND filter them at the same time. (Who’s at fault in here? Me or Jira UI designers?)

Let’s go back into the Board settings. Maybe I can set the filters for this board since I have it created already.

Board Settings -> General -> “Filter” section

Not sure if I understand all of it, but maybe it’s the “Filter Query” thing? Let’s edit it.

I got redirected to already familiar advanced search view:

“Filter for 1.0” Advanced search view

Being familiar with the filters already, I quickly managed to add a “Fix Version” filter.

Filtering issues to the ones that belong to 1.0 Fix Version

Just after that, a “Save” button appeared next to the filters title. I clicked on it and surprisingly, Jira redirected me back to where I was before editing the project… Oh no, wait, it didn’t. 😐

Instead it just showed a flash message that the filter has been saved. (Has it been set as the filter of the board though? 🤔)

To go back to where I was (Kanban view for the 1.0 board) and to confirm if the thing I wanted to do was actually done, I had to:

  1. Click on the “Back to main menu” link in the blue sidebar on the left.

2. Click “Projects” to see this (after another full page reload!):

Do I want to show a project or a dashboard or Issues? Kanban board is all of that, lol. How do I get back? Can somebody help me?!

3. … Click “Indri Landing”.

After another full-page reload, finally I managed to see what I originally wanted — a Kanban board that is filtered down only to the issues from a given release. I feel so proud that I managed to do it. 😁

7. Creating an issue in a filtered board

Now that I have a board focused only on 1.0 release, let’s get to work — move some subtasks to “In progress” and start working on them.

… but where are my subtasks?! 😮

In a global project board I saw both tasks and their subtasks, but now I see only the main task.

… Seems like the newly created board has different settings than my previous default board?

After looking into the Board Settings and googling for almost 5 minutes (1, 2, 3, 4), it seemed like it’s impossible. Nice, Jira! You ruined my Kanban board for me now completely.

… Having googled for another 5 minutes… OK, got it. It seems like even though I moved the tasks to a given release, the subtasks that belonged to them, have stayed in “no release”, and that’s why they don’t appear.

So not only I had to move the tasks, but also their subtasks to the 1.0 release. (It’s a pity that Jira didn’t suggest me changing tasks’ subtasks as well at that operation.) Let’s do that:

Go to advanced search -> find the subtasks -> bulk operation -> edit all issues -> assign to fix version 1.0 -> yes I confirm -> waiting for the operation… -> … -> yes I acknowledge -> go back to projects -> go back to Indri -> go back to 1.0 board

Yes! Now I got it:

(They should pay me for doing this Jira work.)


8. Creating tasks in a filtered board

While being on 1.0 board I realised that I need to a few more things for the 1.0 launch. So I decided to create a task:

Creating the issue ended up with “Issue is not currently visible” alert. WHY?! Mhm. Maybe there was that “Fix version” field that hasn’t been prefilled (even though I’m on the version view), and that’s why it isn’t appearing?

… going back to advanced search view … finding the issue .. yeah, it doesn’t have the Fix Version. (Even though I created it on a Fix Version-only board.)

Why doesn’t Jira allow you to create issues specifically for the current board, and why it forces you to always prefill all the fields, no matter what your current issues view shows you? Don’t ask me.


Other issues in short

We could go on and on, but this post is already taking too long. I’ll give you a few last examples of terrible UX, but this time in a shorter form. Those examples will be from my daily work.

9. Creating an issue takes forever

In our organization there are multiple projects and teams collaborating on one Jira workspace. Thus, whenever we create an issue, we are obligated to fill in:

  • Fix Version (version in which we plan to fix it)
  • Component (team that will fix it)
  • Epic (the ”feature”, in which this thing will be delivered)

Unfortunately, Jira doesn’t help us filling those fields at all:

  • it never remembers the last value, nor lets me define the default value, nor lets me define a “template” or anything, (so I could quickly create a task with just one click,)
  • some of the above fields that I’m required to fill in are actually hidden in the very far bottom of the “Create issue” modal. Although I can hide some of them, I can’t change the order in which they appear.

Outcome:

  • While Jira should be the centre for all of our project tasks, very often it isn’t. Creating a task takes at least a good minute. Because I need to focus so much on filling all the mandatory fields properly, it requires me to switch my context every time I do it. Very often we end up avoiding Jira totally, just to “save our time”, resulting in tasks and knowledge being lost in the vain of endless Slack chats, instead of the project management centre.
  • Issues often get lost in the vain. When somebody forgets to fill at least one of those fields, there’s high chance that our board’s filter query will not catch the issue, and nobody will ever see it.
  • People resort to using alternative Jira clients, probably because the native one sucks so much. Even myself, I’m now using a CLI client to create and browse Jira issues. I had to spend a couple of hours to customize it, so it would fill all my needs. Luckily, now creating a task is just a matter of 2 ENTER clicks and typing the issue title, just as it should have been from the beginning. (The tool is so terrible that I had to resort to configuring a CLI client. Can you believe it? For example, do you use CLI to chat on your Slack? Of course not. Somehow for Jira it sounds reasonable.)

10. Split into “New” and “old” issue view

Some of the features that are accessible from the “Old issue view”, are not accessible from the “New issue view”, and vice-versa. They had released a “New issue view” that lacks important features from the old view. At the same time it introduced new features that can’t be accessed by the customers still using the old view.

For example:

  • you can’t browse work time logs from the new issue view, but you can do that in the old issue view,
  • you can’t edit issue’s time estimate from the old issue view, but you can do that in the new issue view.

Result: I have to constantly switch between the new and old issue view. (Of course, it is not that easy. If you want to switch, you have to go to your account settings and reload all your currently opened issue views.)

11. Moving issue to a different status is cumbersome

When I switch an Issue from one status to another, i.e. from “In Progress” to “Fixed”, often I am obligated to fill in some additional fields, like “Resolve type”. There are many different values, like “Done” “Blocked”, “Skipped”. You know what we click? In 99% cases, that’s “Done”. Is it selected as the default value? Of course not — it always requires you to do that one additional click. (Mouse click — because keyboard navigation often doesn’t work.)

12. Multiple views that illustrate the same thing, always differently

Just look at that.

7 different Issue listing views, each looking completely different, often with different UI of pagination and filters.

Honestly, every time I open up a view in Jira, I have no idea in what way will it look like.

13. Email Notifications spam

Jira notifies you about any issue updates via email. This is excellent. However, when doing dashboard apps like Jira, you will quickly notice that the amount and frequency of these “X has been updated” emails is a bit too big. So you do a simple solution: send notifications in bulk. (Don’t notify for~5 min or so, and then send all of them at once in one email.).

Atlassian haven’t though about it yet. (Or their system is too bloated to go through such a change.) Thus, you end up having hundreds of email notifications. (Unless you turn them off completely. Beware though, this might make your workmates angry, if they notice that you don’t respond to their updates.)

What is worse, if you use Jira integrations, it’s very probable that they will cause Jira to send even more emails. For example, we use Aha! integration. Whenever I create a Jira issue, Aha! integration links it with something on Aha!. Which causes an additional email: “Aha! Integration changed issue XXX. Fields changes: Aha Integration Link from nothing to YYYY.”. Thanks mate, very good to know…

14. Invisible In-app notifications

Instead of email notifications, some people resort to in-app notifications.

However, somebody made an idea that they are hidden somewhere in the bottom left corner of the screen. Thanks to this, I didn’t know they exist until somebody had told me about it about three months after I started out with Jira.

Even after that, I very rarely spot the “You’ve got new notifications” dot. The notifications icon is put in such a place on the screen that you really have to remind yourself about notifications in order to remember about them. (Shouldn’t it be the opposite though — that notifications should be ones that remind? 😉)

15. Performance!!!

Biggest PITA of Jira is its’ performance. Almost every click results in a full page reload, which requires about ~10 seconds for it to be loaded. Which means, if you want to quickly show a list of issues, read about 4 of them, and edit one of them, you have to wait for full page reload about 7 times. Simple operation like “see what are my issues and start working on one of them” often takes at least a minute or two, and makes you lose your focus on your job completely.

16. Confluence also sucks

Confluence advertises itself as “Team Collaboration Software”.

Confluence landing page telling a beautiful story about it.

TL;DR: it’s a nested directory of documents that can be read and edited online.

However, you know what you can do in Google Docs, Microsoft Word Online, Dropbox Paper, Hackpad, but you can’t do in Confluence? Read and edit at the same time!

If you want to edit, you have to go to a separate edit page (that requires a full page reload) and wait sometimes even up to 15 seconds for it to load.

Theoretically, there is a possibility to collaborate on a document in a few people at the same time. In practice however, any changes you make while editing won’t be seen in the “read mode” until you actually click “Save”. And when you do that, I bet that first you will see a giant and confusing alert “Are you sure you want to publish changes made by XXX?”. This is because if somebody had done some changes before you, but they haven’t published them, you must commit them as well when publishing your own changes. (The notification appears even if somebody had done just accidental whitespace changes.)

Damn! But I want to push only my changes! Sorry folk, you will not do that in Confluence.

You know what’s the biggest problem with keeping good documentation culture in your company? Having people being too lazy to create and update the docs, which makes them in result missing or outdated.

It is easy to complain on people. It is also rarely productive. What is more productive is to have tools that help them doing their job well. A good documentation tool should make reading and editing the docs as easy and seamless as possible.

Confluence fails at that.

Summary

I could ramble and ramble on this UI, but I think we’ve both had enough of it.

Have you known that there are companies who are hiring people specifically for “JIRA Administrator” position? Having used it now so much, I don’t feel surprised. This tool needs people of which only job is to handle the tool, so other people can do at least a part of their supposed real job, instead of having to play around with Jira.

Why such tool like Jira is so popular even though it is so terrible?

Why such a big and software-focused company like Atlassian neglects their main product so much? They risk a lot in such a way. If Jira is unusable and prevents doing the main thing it should do (manage the project), it’s a matter of time until competition (like Asana, ClickUp, or something else) will leverage that, build a tool that doesn’t suck, and take over their customers.

This is why I wrote this article.

To tell you: Avoid Jira if you can.

To tell Atlassian: Please, fix your product.

P.S. Are you looking for a UX/Software Consultant to help you find and fix issues in your web application? 🙂 See my portfolio and message me. I’m happy to help.

Jack Tomaszewski

Written by

Full-stack web developer (jtom.me) with over 15 years of experience. Currently looking for the next challenge. (Msg me, if you’re looking for a dev/tech lead.)

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade