Summer with Outreachy

It’s almost the end of my internship. Three months seem like a couple of weeks and I remember how I submitted my application like it was yesterday.

I did a lot of things for the first time this summer. I started to work remotely in IT and was successful with tasks and time management. I learned how to use restructured text for documentation and how to run Sphinx docs. I also met wonderful mentors Toni and Robby who supported me all the time and guided through the internship. I also learned to seek help and advice when I wasn’t able to do something myself.

One of the most important things for me was that this internship made me more self-confident. I read many reviews about Outreachy before applying and they highlighted different things: new skills, new connections, a new experience for a CV and so on. I don’t remember anyone writing that the internship made them more confident but it’s exactly what happened to me. I’m not (so) afraid anymore to apply for remote positions because I already have remote experience and skills to perform work successfully. I’m also more confident in my English knowledge because I was writing docs in English not being a native speaker and they didn’t have many mistakes.

This was a great summer and I want to thank my mentors Robby and Tony, LibreHealth community and Outreachy organizers for making it so special. I’d like to continue working on LibreHealth project and helping to improve it: maybe not by writing documentation but by doing other tasks and gaining more skills.

I didn’t regret my choice a moment and I wish all future applicants good luck!

Switching Careers is a Challenge

Switching careers was one of the toughest decisions in my life. I got a medical education and became an eye-doctor,  but it turned out that it’s almost impossible to support your family working in Healthcare in Ukraine. I had to look for other options and tech career seemed the most obvious since you get many opportunities, can work flexible hours and learn new things all the time. I was lucky that IT was my second passion after medicine and I liked what I was to learn.

However, there are things people don’t talk about much. Those who switched careers successfully will mostly tell you  that they worked hard and finally got enough skills to find a new job. Full stop. Hard work and dozens of job applications without any answer were things I was prepared to but it wasn’t all. 

When you are trying to switch career, you face the following:

  • Doubt. Are you smart enough to learn so many new things and be a competitor to those who got tech education and have professional experience?
  • Depression. There will definitely be moments when you’re stuck, can’t understand something and are about to decide that it’s not the right thing to learn and it’s better to give up.
  • Disapproval. Many people who learn that you are about to give up your current job and do something completely different will try to discourage you and warn that you might fail. They usually think that they’re doing good for you but it only makes things harder.

I want to share my recipes that helped me along this journey.

How to Fight Doubt?

The first thing is to always remember that you already have a job and skills to earn your living. If something goes wrong, you can return to where you started. So it’s most likely that you aren’t losing anything but you’re getting a chance to have a new better job. If you are working in a fast-changing environment, you might indeed need to catch up if you decide to return to your previous career but since you have experience in it, it won’t be that hard.

What to Do with Depression?

Keep a list of things that motivate you and cheer you up. When you feel down, you might simply forget about these things so having a written list of them on your table is a good idea. It’s totally OK to feel down from time to time when you’re doing something difficult. Never blame yourself for that or for being not efficient enough. Such thoughts can only make the situation worse.

Find a friend or two who support you and talk to them if you feel you need support. If you don’t have such friends, join a chat or a Slack group on the technology that you’re learning. There are many people ready to encourage you and help with advice.

Don’t let Disapproval Make you feel Guilty.

The way people communicate their judgment largely depends on the culture. You’re lucky if you come from a country where it’s impolite to tell others what to do with their lives but it wasn’t the case for me. Family members always worry about your future and they might make you feel unsure or guilty of your choice even without wanting it. Sometimes even people who are not your close friends can make comments on your career switch, telling you that was the worst decision ever. 

Calm down. Breathe. Prepare in advance a short and polite answer. It might be something like “Thanks for your care but I really don’t want to discuss my decision”. Be ready to have such conversations multiple times. That’s how people are, be patient with them.

I want to wish good luck to everyone switching careers. I hope that you’ll succeed and that my advice will help you.

LibreHealth Toolkit Documentation: First Steps

My primary task for this summer Outreachy internship is helping to optimize and update the documentation for the LibreHealth toolkit and create a static website using Sphinx documentation generator.
I had very little experience writing documentation and never used something like Wiki pages or Sphinx. All my READMEs were regular files laid out with Markdown. When I started reading about Sphinx, I discovered two things:

  1. There is no «official» Markdown specification, Markdown rules and rendering can differ depending on a platform.
  2. Sphinx uses reST (restructured text), which is a lot like Markdown but has a clear specification and additional features.

I always want to try out things myself so I found a tutorial on the Sphinx website. It outlines how to create simple documentation with Content tree and links to sub-documents and instructions on how to build and run it locally. The tutorial is well-structured and you don’t need to have specific knowledge to go through it.
Another thing that I needed to do, was installing an IDE that supports Java. I have no experience with this programming language but based on previous revision on the project documentation and my experience working in JetBrains’ IDEs, I chose IntelliJ Community Edition. Community edition doesn’t have all features and integration options of the professional edition but it can be used for free and is enough as I was not going to write much (if any) code.
I’m relatively new to Linux and when it comes to installing programs that cannot be installed with apt-get install, I get stuck. I read a manual on installing IntelliJ on Ubuntu from an archive but on the last step I found out that I don’t have a file they were asking to move. There’s a lifehack for those who are like me: you can use Ubuntu Software Center and look for the needed program. It worked for me and in just two mouse clicks I got a running IDE with a familiar layout (all JetBrains’s IDEs that I’ve seen have a similar layout, settings, and tools).
It’s a little weird to see the code in a language you don’t know. When I just started to learn to code, everything looked bizarre and I didn’t understand a thing. Now when I try to read a Java code, I notice familiar patterns like loops or functions and classes but they have different syntax and it’s not always clear what happens in the code.
People often told me that it is much easier to understand or learn your second, third or fourth programming language and it’s totally true! When you understand and can see generic patterns, you can try writing things you can write in JavaScript using, for example, Go. I’m not saying that this is the best idea because different programming languages require you to use different approaches and in most cases, you shouldn’t write in JSy Go.
So learning a little about the tools I will be using and setting up work environment on my machine were the first steps of my summer internship. I’d use the same steps for any new project:

  • Learn the main tools.
  • Set up work environment.

You will both have a possibility to run a project locally (if it can be done) and become familiar with the tools others are using.

You can see the documentation website that I’m working on here:

LibreHealth Toolkit

It was difficult and easy at the same time to chose an open-source project I want to contribute to. I received medical education and wanted to continue working in this area but now as an IT specialist. So when I thought that LibreHealth Toolkit was in the Outreachy list of projects for application, I read more about what they were doing and decided that it would be a perfect match for me.
LibreHealth has its website with the section dedicated to the Toolkit. LibreHealth projects aim at improving and simplifying medical record systems in healthcare facilities and creating traceable medical records that are easy to use. It is open-source so everyone interested in the project can contribute. I think that it is great to be among people who create something you use at work, to be able to discuss how features are implemented and propose something new. I especially liked one of the taglines of LibreHealth that states “LibreHealth is driven by real needs of patients and last-mile clinicians who want to improve health and health service delivery”. I understood that I want to be a part of it.
I live in Ukraine and the medical system here is far from perfect. Many hospitals lack equipment, especially those in smaller towns and villages. Such record systems as developed by the LibreHealth team could make processes easier but it’s long till it can be implemented here. However, I hope that at least some hospitals in my country could also use modern record systems instead of old-fashioned piles of paper journals.
So what exactly is LibreHealth Toolkit?
It is an API (set of calls that allow users to interact with your code) for a set of healthcare record systems. The project is developed by the community interested in using and enhancing it. You can build applications based on the toolkit that will function according to your needs. The idea of the project is that it is universal and can be used in any kind of medical facility: from large clinics to small hospitals in remote locations. One of the advantages is that Toolkit can run on the most popular operating systems and platforms. It means that you don’t have to switch for example from Windows to Linux or OSX and can continue using the platform you are used. What I find one of the most attractive things is that Toolkit supports many popular languages so people who are not native English speakers can use it in their language.
LibreHealth project is hosted on GitLab. You can submit an issue or start a discussion if you want to take part in its development. There is also an option to donate money to the project available on the main website.
To sum up, there are several things I liked most about working with the LibreHealth community:

  • it is open to new people and friendly
  • you get encouragement for every effort
  • you feel that you are doing something valuable for society.

Gophercon EU Experience

This May I visited Gophercon EU, a big conference about Go. It was held in the south of Tenerife. There were many things that I experienced for the first time! For example, it was my first time on an island and it was my first time to talk to Mat Ryer, Bill Kennedy and other gophers who write books and articles about Go and make it so popular and understandable. It was also the first time I took a coding workshop.

I was able to take part in this conference because I got a scholarship from GoBridge. I filled in the application form long ago and then forgot about it because I knew that the chance of being selected is very small. How happy I was when I got the email saying that my application was approved! It was about 1 a.m. when I read it and I woke up my mom to tell her great news and the two of us couldn’t sleep for the next couple of hours because we were so excited and happy. I’m smiling now when I’m writing these lines and remembering that night.

Then there were weeks of preparations for the trip and anticipation. I’ve read about speakers I didn’t know (I already knew some of them from previous conferences) and decided what talks I want to hear. Choosing talks beforehand is one of the key steps in preparing for the conference. Many conferences have more than one track and even if there is only one track, it’s extremely hard to stay focused the whole day and keep absorbing new information so you have to chose what is the most interesting. It may be difficult if there are many topics relevant to what you are currently doing at work so it’s nice to have time to think it over and not to leave decisions for the last 5 minutes before a talk.

On the first day of Gophercon, I took part in a workshop “Daily Go” by Miki Tebeka. There was a lot of practice and Miki showed us best practices of code structuring, debugging, performance testing and even some basics of CI/CD. He also shared useful links and I saved them to read later. I think that I’ll use in my daily work a lot of what he showed during this workshop.

There were many great talks on the second day. I especially liked two of them: “Finding Dependable Go Packages” by Julie Qiu and “How I Write HTTP Web Services after 8 Years” by Matt Ryer. I hope the organizers will post videos so that my colleagues who missed the conference could also see these talks. I also had a chance to talk to speakers during breaks. It’s one of the things you should visit conferences for. When you watch recordings, you cannot dive into this atmosphere and profit from real-time communication.

The third day of the conference was Community Day. It was less formal and many people gave talks on important Go-related topics. I made notes so that I can explore in-depth aspects that can be handy for my tasks.

All three days were very different and each of them brought me lots of valuable information. I’m very glad that I had a chance to visit Gophercon EU 2019, learn, network and meet new friends.

Being Stuck Is OK

I’ve heard many times from different people that they had abandoned some task or project because it had been too difficult. This can be a good excuse when the problem is really over-complicated but often what one needs is a piece of friendly advice and encouragement.

I need to point out that when I’m talking about being stuck, I mean that a person has tried to solve the problem by searching for an answer on the Internet, and debugging or decomposing the task (dividing it into smaller doable tasks). First, you should try to find the solution yourself and only then search for help.

So why people don’t ask for help and seem to abandon what they are doing?

I could think of several reasons:

— they don’t know who has relevant knowledge

— they are afraid of being laughed at or rejected

— they don’t know how to describe the problem concisely

— they were told that asking for help is something bad

For me, the most frequent were the first two. When I was learning to code, I asked questions several times in community chats but I often received unfriendly feedback, so I preferred to do as much myself as possible and not to show others that I didn’t understand something.

And I think that it’s totally wrong!

There are many good professionals ready to help. They may be part of another community or chat so it is worth trying again. For example, if someone told you something harsh in a Facebook group, you can ask your question in the relative Slack channel. Of course, you shouldn’t bother people with questions you can easily google yourself (“How to make a string uppercase in JavaScript?” is probably a bad question to ask).

When looking for people with relevant knowledge, you can consider the following channels:

— Slack (for many software communities it is the primary way of exchanging information and networking)

— Telegram (it has both channels and chats and you can find different lists of them by googling something like “telegram chat [name of a programming language, CRM and so on]”

— Gitter and community chats like Rocket chat (you will usually find links to them on GitHub/GitLab repositories under README or Contributing)

— Facebook (it’s not only a network of friends but it also has groups for professionals)

— Twitter (by posting your question on Twitter and adding hashtags you can get many replies from active community members)

These are just some of the resources where you can look for a person who could help. Don’t hesitate to ask even if the problem is very specific: there may be people who have already struggled with the same thing and found a workaround.

Outreachy is totally unique in the aspect of getting help. You have a mentor (or mentors) for your project, which means that there is definitely a person who can (and is willing) to help. It means a lot for me as I understand that whatever difficulties I can have, my mentors will try to figure out the solution with me and I won’t be left alone. It gives me confidence (which is an awesome feeling by the way).

When I had a problem with Python and destroyed Ubuntu on my machine, Robby and Toni were there to help me with re-installing necessary packages and encouraging. They never told me that my questions were stupid or that something was obvious.

I always try to answer questions in community chats when I have time and know the answer even if they seem trivial for me. I suggest that a person has already tried to google or do something to figure out the solution and that didn’t help. Sometimes all you need is to put information from official docs into simple English!

Open Source Is about Being Accepted

When people ask me why I spend time on working on an open source project, the first thing that comes to my mind is the feeling of being accepted and doing something meaningful.

I can’t tell you that I have had the worst experience being a career-switcher woman without an engineering degree in IT, but I often feel hostility and I have an imposter syndrome. I’m not sure if this is a cultural phenomenon or such things happen everywhere but I didn’t receive much (if any) encouragement from my colleagues and managers in the IT company where I used to work. I was depressed and wanted to leave my job (which I finally did).

I understood that I lacked experience to work independently as a freelancer. I started to look for an open source project where I could improve my skills. I found Outreachy and the application period for the summer had just started. I found a project connected with healthcare, because medicine is my primary degree, and started contributing.

The first thing that I noticed when I started to contribute was that people treated me differently than at the company where I used to work. They thanked me for every effort even when it was fixing a typo in the docs and encouraged to continue.

I also got help and encouragement when I made mistakes. Once I enabled mirroring the main project repository to my forked repository, made a commit and a pull request, and got a message from the mentor a couple of hours later that my commit was empty. Now I know that enabling automatic mirroring can wipe off all your changes and I won’t use it without a reason. I switched it off and pushed my changes from a local repo to the remote again and re-submitted PR. I got positive feedback and my changes were merged. It was great that no one scolded me or told that I’m doing something stupid. Instead, I learned a new thing and made a contribution.

I think that it’s usually fine to make mistakes when you are learning (unless you are deleting a production database with your client’s financial information without making a backup) and it’s great when others understand it and help to improve.

I find work environment in the office to be more demanding and pushing you towards business goals while open-source communities are more product-and people-oriented. Most of the work is done by volunteers and everyone understands that time and skills should be recompensed so as nothing is paid, they are recompensed with gratitude and acknowledgment. This approach totally suits me.

It was a great (and deserved) chance that I was accepted to the Outreachy internship with LibreHealth. I don’t have to go to the office because there is a scholarship that is enough for living. I can increase my skills and prepare to work on my own if I won’t have much desire to go to office. I’m at the beginning of this wonderful three-months long program and I’m looking forward to new skills, networking and contributions to the great project.

My advice for anyone who is thinking whether to try contributing is:

Don’t be afraid and go on!