Quantcast
Channel: Andela
Viewing all 615 articles
Browse latest View live

[PRESS]: Andela launches The Power of “X” campaign as it scales engineering teams across the continent

$
0
0

May. 22 2019/– Andela, the company building distributed engineering teams with Africa’s top software engineers, is recruiting mid and senior level developers in 2019, as part of a new Power of ‘X’ campaign, as it looks to scale its operations and meet growing demand. This comes as more companies seek to enhance their technology teams via distributed workforces.

Since its launch in 2014, Andela has received over 140,000+ applications to its Technical Leadership Program and has trained 1,000+ software engineers, who have worked with global companies including Safaricom, Invision, Viacom, and Skillshare. Andela now accepts applications from experienced software engineers who are proficient in Ruby, Javascript (React, Node, ES6+, Angular), Python (Django or Flask) and Native Mobile Technologies for iOS or Android. The move to recruit more senior technologists is an expansion of the company’s business model.

Andela engineers work on global challenges, within global engineering teams, yet play an important role in their local ecosystems. The 1,000+ Andela Software Engineers are central to Africa’s growing tech community, and are leaders or members of forLoop Africa, Teencode, Startup Grind, Progate, Facebook Developer Circles, to mention a few. Andela is a gateway for experienced and talented engineers to become part of Africa’s most expansive network of technologists.

“Collaboration is a key factor for thriving in the African software industry. At Andela, we challenge our software engineers to experiment as well as build new complex technologies whilst working with the best of the best. We also encourage engineers to work on diverse and complex projects and to interact with teams across the globe. This brings its own learning opportunities, thus making it easier for our software engineers to take the leap to a higher skill level and progress in their careers.” says Janet Maingi, Country Director, Andela Kenya.

Also, Omowale David-Ashiru, Country Director, Andela Nigeria said, “We are excited to be part of the first generation of limitless software engineers in Africa who will play a significant role in transforming the future of technology, which we hope will be central to Africa’s economic development. At Andela, we expect our Software Engineers to gain the skills, experiences, and networks that will enable them to become innovators and tech leaders in Africa and we are excited to now open up our recruitment funnel to diversify and enhance our talent pool”.

The Power of “X” campaign was announced officially in Lagos and Nairobi on 21st May 2019. Titled, “An inclusive future for the next generation”, and attended by key industry stakeholders, leading technologists and media, both events concluded with a fireside chat which addressed how to nurture the next generation of technology innovators who will drive change on the continent.

In 2018, The Wall Street Journal named Andela as one of the twenty-five technology companies to watch, and the year prior, Fast Company ranked Andela as the most innovative company in Africa.

Apply here for Senior Software Engineering roles at Andela.

Click here to watch The Power of “campaign video

For additional queries or for interview requests with Andela or its Exponent X campaign, contact comms@andela.com

The post [PRESS]: Andela launches The Power of “X” campaign as it scales engineering teams across the continent appeared first on Andela.


How to brand yourself as a Software Engineer to increase your influence on social media

$
0
0

It’s 2019, and I’m sure almost everyone knows how valuable social media has become, given the fact that you can connect with billions of people worldwide with a smartphone from the comfort of your house. The icing on the cake is that Social media has become a critical marketing tool for top companies and brands worldwide. Research shows that people spend more time on social media than television, giving rise to a lot of career opportunities like content creation, media management, digital marketing and, quite recently, Social media influencing. It is pretty common practice for big brands to approach renowned influencers to plug their messages into their content for a fee.

Software Engineers who truly believe in their ability to change the world through technology can leverage the power of social media and positively influence the technology ecosystem in Africa and the world at large. There are a lot of opportunities for Software Engineers on social media ranging from developer advocacy, influencer marketing, remote job opportunities to all-expense paid speaking engagements around the world. In the words of  Tim Sanders, your network is your net worth. This means that you can positively influence the technology ecosystem, build your personal brand, increase your network and still make some money off social media. The challenge is how to build a personal brand and increase your network on any social media platform.

Let’s dive into how a Software Engineer or any professional can build a personal brand and increase their network on social media in 2019.

1. Blogging: Blogging entails writing about your experiences, opinions on areas of interests, events and passions. There are a ton of things a technology leader can write about: new technologies, career experiences, life lessons etc. Medium is a great place to start blogging and creating content because of the wide network of people that daily consume and create digital content there. Also, because it is free to create an account. It is pertinent, though, to have a personal website, because blogging on platforms you don’t own is like building a house on a land you don’t own. You can leverage platforms with a wide network of people like FreeCodeCamp to publish your technical articles and direct readers to your personal website. The goal is to attract enough traffic to your website and increase your SEO (search engine optimisation) ranking, so a lot of people can find your content easily.

2. Vlogging: Vlogging entails creating video contents about your experiences, opinions on areas of interests, events and passions. The leading vlog platform is Youtube. Instagram live feed and facebook live feed are also somewhere up there as useful platforms. A vlog is more engaging than a blog because videos tend to garner more attention. It’s also not difficult to set up  vlog. All you need to do is to find or create a niche, buy a camera, create a youtube channel or an Instagram account and start making and posting awesome video contents. The good news is that you can combine vlogging and blogging on your personal website. Asides increasing your network, youtube pays you when you hit a certain milestone in viewership.

3. Twitter: This is the social media of choice for technology leaders but sadly a lot of Techies still don’t know how to take advantage of the platform to build a brand and increase their network. Your influence on Twitter is directly proportional to the quantity and quality of your followers. Your content will go as far as the followers you have. The importance of increasing your Twitter followers cannot be overemphasised. Increasing Twitter followership is an uphill task and needs a lot of dedication and commitment. This year I gained 400 followers in 4 months — more than I’ve ever had since 2011 when I joined Twitter (I woke up late).

These are some ways to increase your Twitter followership:

1. Consistently create quality content: Find or create a niche then consistently create quality content and build your brand around the niche. Branding efforts will only yield results when you have a regular posting schedule. There are tools that will help automate your posting as long as you have content. Tools like Buffer and Hootsuite help schedule your posts ahead of time. These tools also help in analyzing data from the content engagements so you can create better content and drive more engagements. You can also create a document to store quality content as soon as you get the inspiration.

2. Follow and engage people with a large network and influence: The easiest way to gain followers on Twitter is to engage on posts of other people with a large network. When someone with vast network tweets, the tweet will definitely gain a lot of popularity. You can take advantage of the persons popularity and intuitively contribute to the tweet and you might win over some of the person’s followers and also get the person’s attention.

3 Discover your target audience and initiate a Follow for Follow: Folks on Twitter will easily follow you when they know you will follow back. All you need do is to post an intuitive content and watch the reactions on the tweet. Follow everyone who likes or retweets your tweet. They will definitely follow back because they can relate to your content and your brand. Routinely weed your account by unfollowing those that refused to follow back and make sure that your followers are always more than your following it is a source of esteem. After some time your followership will begin to increase exponentially and you won’t need the follow for follow strategy again.

4 Be part of a developer/professional community: This gives you access to a wide network of people with common interests. I’ll assume that these communities have digital events with Twitter hashtags. Tweet about these events and include the official hashtags so other people at that event can see your tweet and connect with you. Whenever you have an opportunity to give a talk at such events make sure that you intuitively direct a lot of people to your Social media handles and website.

5. Promote your content and brand via social media ads: Social media branding comes with a lot of financial costs. Facebook, Twitter, Youtube and Instagram paid ads helps take your content further and attract a lot of traffic. There are advert packages on each platform you can choose with package best fits your ad campaign and subscribe. Social media ads will expose your content to a large network of people and also provide insights on content engagement that can also help you increase the SEO ranking for your contents and website.

6. LinkedIn: LinkedIn is a crucial tool for recruitment and professional networking. It’s 2019, and I’m sure a lot of people know this, but a lot of people don’t know how to fully leverage the platform. Constantly update your profile with a recent and professional photo, recent career information like your current job position, description, achievements, education, skills and interests. Connect with a lot of professionals with common interests. Recruiters search for potential recruits by filtering industries/sectors and job positions make sure that you have updated the industry/sector and Job position sector of your profile.

7. Github: Github has become a single source of truth when it comes to determining a software engineer’s experience, exposure and skills. Constantly contribute to open-source projects and update your GitHub profile with your side projects. Always make sure that the ReadMe file for your projects is very descriptive containing information like the project’s tech stack and other details about the project. Also, Make sure that all your commits and contributions to private repos are showing — it helps to display your activities, even if the repo is not accessible to the public.

I hope I was able to provide helpful information to help you leverage the power of social media to build an inestimable brand that will increase your network, job opportunities and help you positively influence the technology ecosystem in Africa and the world at large.

The post How to brand yourself as a Software Engineer to increase your influence on social media appeared first on Andela.

How Boundless Mind Avoided Costly Hiring Mistakes

Debunking Developer Myths

How Starcity Scales Distributed Engineering Team

This Week in Startups feat. Andela CEO Jeremy Johnson

How Headspace Built Internal Tools and Optimized Customer Experience with Andela

How to work in a high-performance team

$
0
0

Before we talk about how to work in a high-performance team, it is important to define what it means. Well, one could say it is a team whose performance is high, but that’s quite vague. Clearly put, a high-performance team is a kind of team whose expectations are high, delivery time is short, quality of results is high and the quantity of output is seemingly unrealistically huge to most.

For many engineers who work in high-performance teams, it is not uncommon to feel a bit overwhelmed sometimes. If you’ve ever felt like this, chances are your team is a high-performance team.  Throughout this article, I’ll be expounding on three key aspects that you need to concentrate on as you go about your work on such a team, so as to build the capacity needed to thrive on the team.

Growth Culture

Growth is one aspect that is unavoidable on a high-performance team. I occasionally ask Andela engineers why they joined the company and, among other reasons, one thing that always stands out is the fact that most of them wanted a challenge. For the less experienced, the challenge was in starting a new career in software development, while for the more experienced ones, the challenge was in delivering work and adding value that is competitive on a global market (simply put, competing with Silicon Valley).

That kind of challenge-seeking environment is a growth culture (or call it a mindset) that you need to cultivate throughout your time on high-performance teams. Whether you’re managing the team or you’re the rookie on the team, if you’re going to succeed, you need to cultivate a growth culture by thinking about how to add value to yourself, first and foremost, and then to your team. The reason we say we want to feel challenged is that we realise that it is only through doing complicated things that we get better and improve our skill set (technical and soft skills).

Yes, you can be challenged by a soft skill. You could be struggling with communication, or it could even be integrating with the new team that’s giving you a hard time, and it feels like a challenge. The one thing that’ll carry you from your comfort zone – which could be that you’re more introverted, prefer to stay in your own corner and work things out on your own – will be a growth mindset. Ask yourself questions like “would it help me to improve my communication?” or “What do people who communicate better achieve from it?”. Questions of that kind instantly trigger a growth mindset that’ll make you hungry to raise your communication game.

Communication

Yes, we’ve talked a bit about communication to exemplify the significance of a growth mindset, but now we’ll dive deep into communication and why it is key to your success on a high-performance team.

First things first, mere communication may not be entirely important. You read that right. First I said communication is important and now I’m saying it probably isn’t. I’ll explain what I mean.

Communication is simply the art of sending and receiving messages between two or more people. It can, however, be broken down into two components; effective and ineffective communication.

Ineffective communication is the kind where the person that’s sending a particular message doesn’t really bother with confirming that the recipient understands the message they sent. It is the kind where we just say things and don’t care to make sure that what we said made the intended meaning. That kind of communication is, in every sense of the word, pointless.

Effective communication, however, is the kind where the person that’s sending the message makes sure that the recipient of this communication has got the right meaning from the message. They make sure that they’re concise, clear and courteous with their communication. This is the kind of communication that you need to cultivate on a high-performance team. Why?

When you say something like “Barnabas, how could you write the code between lines 102 and 107? It isn’t good,” the very first thing Barnabas is going to understand from this is that he isn’t good enough and probably can’t be  —  this, in itself, is already a misunderstanding that doesn’t breed a growth culture. Secondly, he will feel like his competence is being attacked, and will feel reluctant to communicate with you. When this happens, the team is going to spiral into the low-productivity kind

As opposed to the latter approach, the more effective way of communicating this would be something like “Hey Barnabas, the code you wrote between lines 102 and 107 isn’t as optimal as it should be. My kind suggestion is that you refactor it by removing the second for loop and utilising itertools to carry out these iterations which would make your code more optimal. What do you think?” Now, this message isn’t exactly positive but you realise that Barnabas won’t be reluctant to engage with you and share his thinking about the subject in question. He will be induced to think about optimising this piece of code and as such, his growth mindset is being nurtured. Also, when he reaches out to give you his opinion, you will get the chance to ensure that he understood what you wanted him to understand. Also, words like “kind”, “please” and many more are polite and quickly enable someone to pay attention to this message since they feel welcome to the message.

I attended an Atlassian User Group meetup where this topic was being discussed and a speaker at the event shared that when he works on a team with a plethora of dialects, he always ensures that the rest of the team is in sync by declaring initially that he might pronounce some words wrong due to his local dialect, but the rest of team should feel comfortable to interrupt him whenever something isn’t clear and in his words, “…I will also kindly ask the same of you”. In doing so, he is setting up a comfortable environment for people to ensure that they effectively communicate their message.

In summary, effective communication cares about the listener or reader of the message as much as the message being sent.

The 7C’s of Communication will definitely come in handy.

Advocacy

Advocacy is something that many developers don’t like to do. For some, they feel like it is an attack on their egos, while for others, it is simply very difficult to say good things about themselves — probably because they suffer from imposter syndrome. I used to think my work was supposed to speak for itself and if any advocacy was necessary, then that meant that what I’d done wasn’t good enough. But what does it really mean to advocate for yourself?

Advocacy is the act of pushing for a certain idea that you believe in or a recommendation for something you think is right. It could be your work, a way to improve certain workflows on your team or it could be another person’s work.

Sometimes, on a high-performance team, it is easy to fall prey to groupthink — where everyone gets in sync to the point that they are almost impervious to new ideas and decisions are no longer critically evaluated. New ideas and innovations tend to get stunted or come too few and far in-between.  A high-performance team should quickly react to change without compromising the quality and quantity of their work. How does that change come about? Change is effected after someone has advocated for it. How do they advocate for it?

I’ll answer that question with a small story. One time on my apprenticeship team, one member realised that our stand ups weren’t being recorded. He realised that we’d need text records of this information to enable us keep track of progress, but there were none at the time. He then suggested that we have a Slack stand up bot where we’d record our individual stand ups in addition to the Zoom call.

In doing this, he was advocating for a change in a system that had been used by many developers before him, and it was taken up. Now, we have a record of these stand ups and still do the Zoom call, because we realised that it helped us create rapport with each other. Advocacy is what helped us improve our performance despite the fact that we were already a high-performance team before this change.

Even in a high-performance team, improvements can always be made, and they can get implemented if you advocate for what you think is right. Your workflow could be something you think needs to be changed, for example. Perhaps you think that instead of tasking your Technical Team Lead to write a story on Pivotal Tracker (or Trello), each team member could create the story and make it faster for everyone to continue working, as opposed to waiting on one person to create more than 15 stories on the Pivotal Tracker. You could even write some code which someone on the team thinks needs to be changed but your work will not always be in a position to speak for itself (like I initially thought), so you’ll need to explain why you don’t think their suggestion would be efficient, but also be ready to listen to their viewpoint and ensure you reach and agree on the best solution at the end of such a discussion.

I’ll leave you with a short quote about advocacy:

“To say nothing is saying something. You must denounce things you are against or one might believe that you support things you really do not.”  ― Germany Kent.

The post How to work in a high-performance team appeared first on Andela.


How Percolate Bypassed the Competition with Andela

$
0
0

Percolate is the leading content marketing platform for the enterprise. Built by marketers for marketers and founded to help brands grow in a world transformed by social and mobile technology, Percolate offers solutions to introduce visibility into the marketing process, improve coordination of work, and effectively build marketing campaigns and content.

Stiff Competition and No Pipeline

With main offices in New York, San Francisco, and Denver, Percolate faces a hyper-competitive hiring scene for software developers. Not only would the company have several open positions for front-end and back-end roles, but they also came up against the need to backfill when a developer, or sometimes a whole team, would leave for different positions.

Kimberly Peterson, Percolate Director of Engineering, recalls some of their hiring frustrations. “We had problems with pipeline, just finding good people. And there’s so much competition. By the time we contact a good candidate, they’re already interviewing with five or six other companies. They may already have offers on the table. And then you get into a money game.”

Without the same resources as the nearby tech giants, Percolate engineers felt the hiring crunch in their day-to-day work, growing more desperate for help on their teams.

Preserving Team Culture and Commitment

After trying offshore arrangements for their mobile development, Percolate wanted more team integration for their primary application. “We did not want to have our engineers writing up specifications, then ship those off and have asynchronous communication with other engineers who don’t get to know each other well. We really wanted to find people who felt like they were part of the team.”

On top of all that, Kimberly remained committed to company morale, culture, and job performance. “We didn’t want to send a message that we’ve given up on hiring, or have engineers terrified that we were going to outsource everything. Then you have people who aren’t on board with helping the project succeed. We really wanted to avoid that.”

Kimberly and her VP of Engineering talked about a pilot with Andela, and the integration component sounded like a good fit culturally for Percolate. “Once we talked about Andela, there was never a clear plan to pursue any other kind of offshoring.”

A New Project is the Perfect Time to Onboard

In September, Percolate hired their first two Andelans, Eric Gichuri and Angie Mutava. They joined a high functioning, diverse team, some of whom were already working remotely. The team focused on brand new features, which allowed for smooth introductions and onboarding without requiring too much in-depth context.

Eric and Angie gelled quickly with their four teammates on their first trip to New York. “They felt part of a close-knit team,” Kimberly recalls. “That trip clinched the fact that we could expand some other teams, and we brought on four more developers at the end of last year.”

Team Augmentation, Not Outsourcing

Andela engineers’ drive and initiative have been stand-out, giving Percolate ease of mind with their dependability and willingness to go above and beyond for the company and its customers.

When a team lead took a 2-week vacation, Eric took charge of the back-end team. “Some issues came up and Eric was right there on Slack. He was on pager duty rotation and said, I’m going to take care of this.” Another engineer on the API team handled an off-hours customer issue, getting online at 5:00 a.m. to figure out the problem.

Another Andela engineer, who started out on back-end work, used his full-stack experience to transition to front-end work. “It was great to see that kind of flexibility,” Kimberly says. “They’ve got a sense of ownership in the product they’re building. This is the difference between outsourcing a project and having a team augmentation experience.”

Andela Best Practices Work for All Distributed Employees

An added benefit has been adopting Andela best practices to improve the experience for all Percolate remote employees. “Andela has taught us a lot about a distributed workforce. We make sure if one person is on Zoom, we’re all on Zoom. We also instituted a policy of putting decisions on the Slack channel, making decisions on Zoom so people aren’t left out. It was Andela that spurred those changes.”

Currently, six Andelans work across three Percolate teams: two on the application team, two on the analytics team, and two on the platform team, building out API capability for integrations. To learn more about the partnership between Andela and Percolate, view the case study here.

Want to hire your own team of Andela engineers? Let us help!

The post How Percolate Bypassed the Competition with Andela appeared first on Andela.

#150DaysofALC4: Share Your Journey

$
0
0

Learning how to code is a marathon, in the sense that it is a test of endurance and persistence. Like all high-performance activities, the prize gets more visibility than the journey. But there’d be no prize without the journey.

ALC 4.0, in partnership with Andela, Google and PluralSight has kicked off, and for 33,000 selected learners, their marathon has begun. Over the next 5 months, the learners will go through a structured program to advance their skills in  Mobile web development, Android development and Google Cloud technologies on Pluralsight.

Today, we’re launching the #150DaysOfALC4 campaign to help shed light on the learners’ journeys to the completion of ALC 4.0. We believe that the journey is important, and want to offer the learners a cohesive platform to share their individual stories along the way. We want learners to be able to search the hashtag on Twitter, Facebook, and Instagram, and connect with stories from other learners undergoing the program in other places.

Share Your ALC Story

We encourage everyone currently enrolled in ALC 4.0 to follow the official ALC handles on all platforms – on Twitter, Facebook, and Instagram, and share their stories using the #150DaysOfALC4 hashtag. Did you successfully initiate your first pull request? Share using the hashtag. It is our hope that learners will inspire other learners by sharing their milestones and possibly collaborate along the way.

Every story is important, and through the dedicated ALC accounts, we intend to help learners share their individual stories and help them establish peer-to-peer support and inspiration.

The post #150DaysofALC4: Share Your Journey appeared first on Andela.

Al Gore Talks Impact Investing and Funding Sustainable Solutions at Andela HQ

$
0
0
Al Gore takes question from Gordon Balaaka in Andela Uganda.

Last month, Andela had the pleasure of welcoming Mr. Al Gore to its New York City office for a distributed friendly fireside chat with Andela CEO and Co-Founder Jeremy Johnson. Afterwards, Mr. Gore took questions from employees across our offices in New York, Lagos, Kampala and Nairobi. 

In addition to being the former Vice President of The United States, a Nobel Peace Prize Winner and sustainability leader, Mr. Gore is also the Co-founder and Chairman of Generation Investment Management aka the firm that led our most recent Series D round.

Mr. Gore’s Andela visit just so happened to be the same day Generation announced its $1 billion dollar fund focused on promoting sustainable solutions — no big deal. The fund backs startups across the environmental and healthcare industries, as well as the future of work. When vetting potential portfolio companies, Generation is not simply looking at revenue; rather, companies must also provide data around their impact, and how they make the world a better place. “How can we reduce what we don’t measure?” Mr. Gore tells Andela.

“How can we reduce what we don’t measure?” Mr. Gore tells Andela.

Al Gore talks about impact investing with Andela CEO Jeremy Johnson.

Generation recognized Andela as a company providing a sustainable model to solve the global tech talent shortage, while also cultivating a new generation of African technologists. “When you have a well-focused approach like Andela, that is the best way to achieve success,” says Mr. Gore, “When we dug deeper and understood Andela’s mission, we found a sweet spot. Your mission is also driving financial performance.”

“There was a clear sense of shared values.” says Jeremy Johnson. “We will not achieve our mission if we can not execute effectively and Generation reinforces the need to prove impact with data.”

How can the private sector ensure they are making both a profit and a difference? Mr. Gore urges companies to link their financial growth with sustainable solutions to the world’s pressing issues. We agree on that winning formula! 

To stay up to date with Andela, follow us on Twitter, Facebook and LinkedIn @Andela. 

Hiring developers? Let us help!

Andela welcomes Al Gore to NYC office.

The post Al Gore Talks Impact Investing and Funding Sustainable Solutions at Andela HQ appeared first on Andela.

Configuring Vim and TMux to boost your productivity.

$
0
0

Why Vim and TMux?

Vim is a modal, highly customizable and lightweight text/code editor that comes preinstalled on most *nix machines. As the word modal suggests, it supports various modes of execution allowing one to achieve text manipulation objectives using powerful and finely-tuned built-in commands and user-defined macros.

Vim’s modality being its most powerful feature also make it incredibly difficult to master. That said, the rewards of mastering it quickly outweigh the initial cost of learning it.

Here are a few reasons that make Vim outstanding among other editors:

1. Performance — Vim’s core is implemented in C which makes it blazingly fast and lightweight. Unlike most of the existing code editors which are Electron-based like VSCode (which is essentially a browser instance) or running on JVM like IntelliJ, it is optimized through the use of low-level machine specific code.

2. Highly Customizable — the ability to configure your editor down to a keystroke is an immensely valuable feature. Through the use of a high-level scripting language (VimScript), one can compose built-in commands to create macros that tweak the different modes on Vim to one’s suiting.

3. Distraction-free — as a developer, I value having a distraction-free zone to concentrate on a task I am working on. Noise, however, does not relate to the environment only. In most editors, you continually have to reach out to your trackpad to open a new file or click on a button to trigger some action. With this, you can easily drift away from the task at hand. Vim, on the other hand, supports the use of the keyboard only to achieve everything imaginable on an editor.

TMux is a terminal multiplexer(therefore the name TMux) that allows you to run multiple terminal sessions simultaneously on the same window. It is also highly configurable to support keybindings that can spawn new windows and to quickly navigate between them.

Together, both Vim and TMux marry harmoniously to form a Swiss army knife for all your code editing needs.

Learning Curve Awareness

Before we get to how to installing and configuring both Vim and TMux it is important to be aware that mastering these two would require both time and effort. Although comical, the Vi (now known as Vim) learning curve indicated below is a good depiction of what to expect.

source unknown

I would, therefore, advise you do not rush through this write-up and instead regard it as a reference for close to one week.

Installing and Configuring Vim

If you are running a *nix machine(Unix, GNU/Linux, and its derivatives or MacOS) you would most likely have Vim preinstalled. It is possible, however, to have Vim’s predecessor Vi installed and so you would still need to install it.

To be sure that we have Vim installed, kindly run the following command on a MacOS terminal (for GNU/Linux based machines kindly check how to install Vim using your specific package manager):

$ brew install vim

Having installed it, we can now fire it up by running the following command:

$ vim

This should land you on the following window:

The first view on an unconfigured Vim

Although the cursor can be seen, Vim doesn’t allow you to immediately type anything on the document as by default it will land you in a command mode. For now, you can quit the app by typing :q<Enter> .

As Vim requires that you learn a few basic commands before proceeding to actually customize it, I would suggest you run Vim’s interactive tutor which can be accessed through:

$ vimtutor

This will have a text-based simplified Vim mode that will contain a step-by-step guide through some basic commands:

Running Vim tutor

Going through the tutor, in my opinion, is the one stage that demands a lot of discipline and determination and one in which most people are likely to give up.

Although the tutor suggests you use 25–30 minutes to go through it, I would advise you have the 30 minutes sessions for 3 days to make sure you master most of the commands. Over time you will realize that these actions become intuitive and instead of having to think about what to type next, you find yourself navigating through the tutor rather easily.

The default Vim without extra configuration is really powerful for text editing. However, a few pain points may be realized such as not having a project’s files treecode completion, integration with Version Controlfuzzy file search and syntax highlighting for certain languages. This is where plugins come to the rescue to unravel the full power of Vim.

To get you started, you would have to install a plugins manager. For this, I would recommend using VimPlug, which can be installed as directed here.

Having installed VimPlug, you can now install some basic plugins by creating a ~/.vimrc file running the following command:

$ touch ~/.vimrc

Within the file, ensure you have the following content (I would advise you use a code editor you are familiar with like VSCode):

syntax on
set number
set nocompatible
set encoding=utf-8
filetype plugin indent on
call plug#begin('~/.vim/plugged')
" ---> this is where you add your plugins <---
call plug#end()

Save it and on your terminal run Vim again through:

$ vim

Now to add plugins, simply edit the ~/.vimrc file (using a code editor of your choice) and paste their configuration in the section indicated with ("---> this is where you add you plugins <---)above and restart Vim.

You would then type:PlugInstall while on Vim’s command mode to install the plugins. The following are the most essential plugins I believe you will need:

  1. Project’s files explorer — NerdTree is currently what I use as my files explorer. To install it, add the following to ~/.vimrc :
"{{ Configuring NerdTree
Plug 'scrooloose/nerdtree'
   
  " ---> to hide unwanted files <---
  let NERDTreeIgnore = [ '__pycache__', '\.pyc$', '\.o$', '\.swp',  '*\.swp',  'node_modules/' ]
" ---> show hidden files <---
  let NERDTreeShowHidden=1
" ---> autostart nerd-tree when you start vim <---
  autocmd vimenter * NERDTree
  autocmd StdinReadPre * let s:std_in=1
  autocmd VimEnter * if argc() == 0 && !exists("s:stdn_in") | NERDTree | endif
" ---> toggling nerd-tree using Ctrl-N <---
  map <C-n> :NERDTreeToggle<CR>
"}}

2. Code completion — to enable code completion for Vim, install YouCompleteMe plugin.

"{{ Configuring YouCompleteMe
Plug 'valloric/youcompleteme', { 'do': './install.py' }
  
  " ---> youcompleteme configuration <---
  let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py'
  
  " ---> compatibility with another plugin (ultisnips) <---
  let g:ycm_key_list_select_completion = [ '<C-n>', '<Down>' ] 
  let g:ycm_key_list_previous_completion = [ '<C-p>', '<Up>' ]
  let g:SuperTabDefaultCompletionType = '<C-n>'
" ---> disable preview window <---
  set completeopt-=preview
" ---> navigating to the definition of a a symbol <---
map <leader>g  :YcmCompleter GoToDefinitionElseDeclaration<CR>
"}}

3. Fuzzy Finder — to support fuzzy file searching, you would have to add CtrlP plugin as follows.

"{{ Configuring CtrlP
Plug 'ctrlpvim/ctrlp.vim'
"}}

4. Snippets — code snippets allow you to quickly write some boilerplate code that is often repetitive. To add code snippets support, you will have to add UltiSnips.

"{{ Configuring UltiSnips
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
  let g:UltiSnipsExpandTrigger = "<tab>"
  let g:UltiSnipsJumpForwardTrigger = "<tab>"
  let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"
"}}

5. Version Control — to add an integration to git add the following plugins:

"{{ Git integration
" ---> git commands within vim <---
Plug 'tpope/vim-fugitive'
" ---> git changes on the gutter <---
Plug 'airblade/vim-gitgutter'
" ---> nerdtree git changes <---
Plug 'Xuyuanp/nerdtree-git-plugin'
"}}

6. Color scheme configuration — Vim comes with quite a number of preinstalled color-schemes. There is the one I personally use though and I highly recommend it. To add it use:

"{{ Color-scheme
Plug 'morhetz/gruvbox'
  set background=dark
  colorscheme gruvbox
  let g:gruvbox_contrast_dark='default'
"}}

7. Autoclosing tags brackets and braces — typing out pairs of tags and braces can be rather painful. To fix this, use:

"{{ Autopairs
" ---> closing XML tags <---
Plug 'alvan/vim-closetag'
" ---> files on which to activate tags auto-closing <---
  let g:closetag_filenames = '*.html,*.xhtml,*.xml,*.vue,*.phtml,*.js,*.jsx,*.coffee,*.erb'
" ---> closing braces and brackets <---
Plug 'jiangmiao/auto-pairs'
"}}

8. TMux integration — as we are going to be integrating Vim with TMux this plugin will be required on Vim’s side:

"{{ TMux - Vim integration
Plug 'christoomey/vim-tmux-navigator'
"}}

This completes the main configurations required on Vim to be up and running. In case of any pain points, a quick search will usually land you a solution in the form of a plugin or a script you would have to add to your configuration.

Installing and Configuring TMux

TMux also comes preinstalled on most of the *nix machines. To ensure that it is installed(or to install it), run:

$ brew install tmux

Now to integrate this with Vim, first, install the TMux plugins manager as directed here and then create a file ~/.tmux.conf file by running:

$ touch ~/.tmux.conf

Now, using a code editor of your choice add the following to the ~/.tmux.conf file:

# better prefix key
set -g prefix C-a
bind C-a send-prefix
# better splitting
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# less colourful status
set -g status-bg colour240
set -g status-fg white
# 256 colors support
set -g default-terminal "screen-256color"
# sane scrolling
set -g mouse on
# list of plugins
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'christoomey/vim-tmux-navigator'
# TMUX plugin manager (keep at the bottom of tmux.conf)
run -b '~/.tmux/plugins/tpm/tpm'

Restart your terminal and this time, run:

$ tmux

Now, to split your window simply press Ctrl-A (referred to as the prefix key) followed by either | for a vertical split or - for a horizontal split. This way you can have as many terminal sessions as you want.

The Vim-TMux integration allows you to quickly navigate between the two by pressing Ctrl together with the HJKL keybindings used by default in Vim. This also works between any TMux sessions.

Conclusion

In conclusion, it might take quite a lot to get your Vim-TMux configuration working but the reward of having a code editor you have configured yourself next to your favorite terminal shell is totally worth it.

Lastly, I hope this has been helpful and in case you would prefer to use my configurations instead, you can easily access them here.

The post Configuring Vim and TMux to boost your productivity. appeared first on Andela.

Ghana’s Tech Ecosystem And The Rise of Developer Communities

$
0
0

The developer ecosystem in Africa is in bloom; by the day, developer communities in the continent are growing in number, in skill, and in diversity. And there’s no denying that a good number of upcoming tech experts and influencers in Sub-Saharan Africa have grown from the thriving developer communities (some even starting these communities), where they convene, both online and offline, to share, to learn, and to mentor.

Ghana continues to be a front-runner in Africa as the continent’s tech ecosystem scales exponentially; what with the 119% mobile phone penetration (Jumia Report, 2018), which can arguably translate to equivalently putting a computer in a good number of people’s hands in Ghana.  And, with Accra being a hub of tech and entrepreneurship in Africa, I was interested in finding out what the contribution of tech communities and its enablers has been.  So I set out to Accra in March 2019 to convene the 1st ever Roundtable with Tech Influencers and Leaders in the Ghana tech ecosystem, with 3 goals in mind:

1. To better understand the tech communities in Ghana and their role in nurturing technical talent to be more competitive (in employability or otherwise). Do tech communities contribute to bridging the skill gap observed post-university ahead of employment? Is there any value-add that can move a graduate who joins a tech community to be super competitive in the market either on a freelance front or employability? What’s missing in this equation that tech communities come in to fill?

2. To engage the sponsors or enablers of these tech communities, who in most cases provide resources (finances, space, et al) to support the convening of the tech communities, is there any benefit for them?

3. To have in-depth conversations with the conveners of the tech communities, commonly known as community leads. It might not seem so from the outside, but the reality is most of the conveners of developer communities fully volunteer their time and effort (aka expecting no pay) to bring together the communities periodically to fill in a talent gap they’ve observed amongst the tech talent. Which then begs the question; what are the upsides (as well as downsides) for them?

Here are the top insights from the roundtable (very heated, engaging, informative, and eye-opening for all in the room as well):

  • Tech communities

Ghanaian tech communities might not be as many or as large as in other Sub-Saharan Africa countries, but one thing is that they do a good job, not only in convening meetups and tech events but also ensuring maximum cross-collaboration amongst themselves for maximum skill transfer.  They also have a notable community focused on women in tech who are passionate about technology.

Here’s a list of some of the notable tech communities in Accra:

1. Developers in Vogue (focused on Women in Tech in Ghana) – what really stood out in this chapter is how active they are in the community with amazing success stories of ladies who’ve gotten globally competitive work opportunities.

2. Women Techmakers Accra – WTM is Google ‘s program that focuses on providing visibility, community, and resources to Women in Technology. The Accra chapter has over 400 members and upcoming/past meetups can be found on Meetup.com.

3. Facebook Developer Circles Accra – with over 1200 members, Facebook DevC in Accra brings together developers in the region for tech-related meetups and challenges supported by Facebook.

4. Forloop Ghana – this is an independent network of developers and tech enthusiasts across Ghana, a community that gives a platform to showcase great products built by Ghanaian developers as well as mentorship and learning opportunities led by seasoned engineers in Ghana. It’s maiden event happened in Nov 2017.

5. GDG Accra –  this community, with over 1900 members, brings together developers who are in Google technologies.

6. DevCongress – DevCongress is a developers’ movement aimed at becoming the most vibrant across the software developers space in Ghana and Africa. The objectives are anchored around; growing software engineers, providing resources, contributing to open source, and bridging the talent and challenges in Ghana for local solutions.

  • Sponsors and enablers

The first thing that rings whenever they hear of a sponsor is something that has financial ties. Well, as much as finances are a key part of sustaining tech communities, this isn’t the only resource that is needed to keep such communities afloat. From the roundtable, it was clear that there are other important  factors that tend to be overlooked, but which make a huge difference whenever present; like;

1. Space to convene meetups (e.g. in tech hubs such as Impact Hub, iSpace)

2. Updated resources to run impactful meetups (e.g. )

3. Availability of experts and leaders to share their experiences in the craft, and so on and so forth.

4. Learning institutions, such as MEST, NIIT, Ghana THINK Foundation, GIMPA School of Technology, etc, who support and invest in techies and tech entrepreneurs

Sponsors and enablers within the tech communities, therefore, need to think beyond monetary support into other forms of resources that can boost the quality and growth of such communities.

  • Conveners of tech communities

The tech community leads in Ghana, aka conveners, might be deemed as silent all-stars. They might not make all the noise online, on social, etc, but I realized that they are highly respected within the tech ecosystem (respect here being a result of combined factors including them being really good at what they do technically or otherwise, them going an extra mile to ensure their communities are up and running regardless of availability of sponsors, them championing stellar tech talent whenever they spot it, etc).

As a result, the meetups or events they convene are well attended, and this translates to strong, growing communities.

From the roundtable, and my observation from being a community convener a few years back,  there’s a number of things that could be great to consider (for all the 3 groups above) as we look at growing the communities and ecosystem at large:

  • There needs to be a value add whenever a tech community convenes for a meetup. This can range from beginner/introductory workshops, theoretical or walk-throughs – always a bonus to include hands-on sessions, where participants can try out the skill being passed on.
  • Sponsors/enablers within the tech ecosystem need to be open with the talent gap/skill gap they have observed when looking for talent to engage with on projects, for employment, to refer for other opportunities, et al.
  • Always a bonus if communities convening meetups/tech events can align their focus to the gaps identified above; PS: this does not mean we become salesy and call for meetups to preach a brand, no. It calls for the conveners to be meticulous in ensuring there is a tangible end goal that takes attendees a level up from where they were before attending
  • Increasingly document and showcase the skill and expertise within the tech ecosystem in Ghana. It can be anything from success stories, projects undertaken, experiences working with a tool/product/platform, to upcoming tech events, etc. This is the way to ensure that top tech talent pool in Ghana is visible on a global platform. Some Ghana editorials and news outlets can be utilized for this, including; TechNovaGH, Gharage.com, AFD Tech Talk, Citi TV, etc.

++++

I firmly believe there is a constant need for entities looking for talent within the tech ecosystem to give back to that ecosystem in ways that ensure the talent therein continues to be nurtured. And for tech communities within the ecosystem to continue convening meetups that level up the community in one way or another towards making them world-class. We need to ensure this lifecycle is not only complete but also continuous. 

The post Ghana’s Tech Ecosystem And The Rise of Developer Communities appeared first on Andela.

Statement from Christina Sass, Andela Co-Founder and President

$
0
0

After five and a half life-changing years, I will be stepping down from my full-time role as President of Andela, and transitioning into a supporting role as the Chair of the Andela Advisory Council and the Andela Alumni Group effective July 15, 2019.

Building Andela has been the hardest, and best thing, I’ve ever done in my life. For this reason, I approach this transition with a mixture of joy and sadness. I feel immense joy when I reflect on all that Andela has accomplished since 2014, and when I think of the bright future that lies ahead for the company and the team. Of course, I am also sad because I have found my time at Andela the most uplifting, meaningful, fun, and profound experience of my life. 

In the early years of Andela, the majority of my life was spent getting our country offices up and running. Today, Andela offices in Lagos, Nairobi, Kampala and Kigali are absolutely thriving and have strong local leadership to nurture and expand our country teams. This experience has inspired me to think about the influence I can have in the world more broadly. It is because of this inspiration and because of how strong Andela is today, that I feel compelled to move out of the day-to-day and to champion the company in a different way moving forward.

I am excited to continue to Chair Andela’s Advisory Council, an extraordinary group of leaders whose expertise has helped to shape Andela. It has also been thrilling to see former Andelans make their mark on the world and I delighted to become their Alumna in Chief.

As I embark on my next professional pursuit, I leave inspired to consider all the many ways that Andelans, like myself, can continue to influence our world. I will be spending the next few months exploring entrepreneurial ideas. I remain passionate about connecting talented young people with meaningful work and empowering women and will explore opportunities that can meaningfully impact those issues.

It has been an extraordinary honor to work alongside such a group of committed, passionate, and fiercely capable people. I am grateful to all Andelans who have surrounded me the last several years.  I also want to thank my Andela co-founders, Brice, E, Ian, Nad, and especially Jeremy for their partnership, inspiration, and support on this EPIC journey.

TIA,

Christina

The post Statement from Christina Sass, Andela Co-Founder and President appeared first on Andela.

Attune Finds Both Technical and Cultural Fit With Andela


How Percolate Bypassed the Competition and Augmented Teams with Andela

Measuring and Optimizing Web Performance

$
0
0

This post is meant to sensitize us on the importance of the performance of our web apps. If you are like me, when you started in software development, your initial concern was getting your code to run and for the application to go live. Later, you start to grapple with delivering the best user experience to users. This then leads you to start thinking of performance.

In this article, I attempt to share how to measure the performance of our application using an open-source tool known as Lighthouse. There are other tools in the market but this one is easily accessible as it ships with the Chrome browser. I will also share some practices that can help you improve the performance of your app. I will also attempt to explain some technical concepts that will be useful to us as developers.

What exactly is web performance?

The honest truth is that web performance is both subjective and objective. As a user, it is subjective. From a user’s point of view, web performance is about how fast a user perceives the site to be. That is, the user’s perception of whether the time it takes between the time s/he requests the content and the time until s/he feels the content requested is available and usable feels slow or fast.

Objectively, it is the measurable time, in milliseconds, it takes for the web page or web application to be downloaded, painted in the user’s web browser, and become responsive and interactive. That is, the objective time of when a request for content is made until the requested content is displayed on the user’s browser.

What is web performance optimization?

Web performance optimization is simply all the steps you will take as a developer to increase the subjective and objective web performance.

Why are we discussing performance and optimization?

It is important to discuss performance and optimization because of how fast or slow our app impacts our end users. And as developers, we are solving problems for our users. If we are not able to satisfy our users, we will lose money and product would suffer.

It is also important to factor in performance during development because our app will be used under different network conditions and on different devices with different capabilities.

Take a look at this 2017 study showing how long it took different mobile phones to parse 1MB of Javascript:

The cost of parsing 1MB of Javascript by various mobile devices.

This data shows us that there is a 2–5x difference in time to parse/compile code between the fastest phones on the market and average phones. This implies that while you develop with fast 4G on your MacBook or DellInspiro, your user might use your app on a 3G network with a device with a slow GPU. How do you accommodate that? That’s why you need to factor in performance while developing your apps.

How do we measure performance?

In order to develop with performance in mind, we need to be able to measure performance. How do we do that?

We can use tools such LightHouse, GTMetrix.comWebPageTestPageSpeedInsights. In this article, I will be using Lighthouse.

Measuring Performance

To show you how lighthouse works, I will demo it with a personal project. This app is live here: https://sammie-fast-food-fast-react.herokuapp.com/

Follow the following steps:

1. Launch a new Chrome tab in Incognito mode (Control+Shift+N). This is so that your chrome extensions (if you have any) do not interfere with the audits.

2. Type https://sammie-fast-food-fast-react.herokuapp.com/ (or any app whose performance you want to measure) into the address bar and open up the Chrome developer tools using either of these commands: Command+Option+I (Mac) or Control+Shift+I (Windows, Linux).

3. You can open the developer tools section to the right as shown in the image below for convenience.

4. Switch over to the Audits tab. The Audits tab uses LightHouse. So with this, we will measure the performance of the app. Lighthouse will also provide insights on how we can improve performance.

Image showing the audits tab in Chrome Dev Tools

For this audit, you can configure Lighthouse however you wish. In this instance, we want to audit the site for performance on a mobile device. We also want to simulate a slow 4G network and 4x CPU slowdown( That is, your current device performance slowed down by a factor of 4).

To run the audit, click on the Run audits button.

Below is the result of running the audits:

The result of the audit on https://sammie-fast-food-fast-react.herokuapp.com

This audit scores the performance of the app at 57%. However, there are important metrics that Lighthouse exposes to us.

Important metrics of web performance

These metrics shown above are used to specifically measure how performant our app is. You can click on the learn more link on each to read more on each metric(I would not want to do that in this article so this doesn’t get too long).

By using the Audits Tab, we can know how performant our app is.


So how do we optimize the performance?

We can optimize the performance of our app at load time or runtime. In this article, I will be looking at load time.

As a developer, what I can do now to improve performance?

Write mobile-first CSS

  • This will give the browsers of smaller devices less work to do as the browser only needs to the calculations for their screen sizes.

Code Splitting.

  • Today, most web applications are built using frameworks/libraries such as React, Vue, Angular, etc. These libraries use tools such as Webpack or Browserify to bundle your application code. Bundling is simply the process of following imported files and merging them into a single file: a “bundle”. The idea of code splitting is to serve only the code needed for the routes or components or user actions that a user requests for per time(lazy loading) instead of serving all the application code at the same time. (eager loading).
  • How do you implement code splitting?/Code Splitting in details

Code splitting is done using dynamic imports using the dynamic import() syntax. Note that the import() syntax is an ECMAScript (JavaScript) proposal not currently part of the language standard. It is expected to be accepted in the near future.

Here is a simple example of the use of the dynamic imports syntax taken from the React documentation:

Before:

import {add} from ‘./math’console.log(add(2,2))

With import() syntax, this becomes:

import("./math").then(math => {
  console.log(math.add(2, 2));
});

Note that import() calls use promises internally. So, if you use import() with older browsers, remember to shim Promise using a polyfill such as es6-promise or promise-polyfill.

How then do you introduce code splitting into your app?

You can split the code for your app based on the routes. That is, you want to load the code for a route only when it is needed.

Below is a route based code splitting implementation from the React documentation using libraries like React Router with the React.lazyfunction.

import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import React, { Suspense, lazy } from 'react';

const Home = lazy(() => import('./routes/Home'));
const About = lazy(() => import('./routes/About'));

const App = () => (
  <Router>
    <Suspense fallback={<div>Loading...</div>}>
      <Switch>
        <Route exact path="/" component={Home}/>
        <Route path="/about" component={About}/>
      </Switch>
    </Suspense>
  </Router>
);

You can also implement something similar in Vue.js using the Vue-router. Below is an example of Vue-Router code implementing code splitting on the basis of the routes

{path: '/publications',name: 'AllPublications',component: () => import('@/pages/Publications/AllPublications'),meta: { isAuth: true  }},

So, what the above means, is that the code the publications page will only be loaded when the user navigates to the routes, ‘/publications’. Until the user navigates to this routes, the code for the publications page is not loaded unto the browser.

Something similar is done in Angular’s routing as well. Below is an example from the Angular documentation:

const routes: Routes = [
{
  path: ‘customers’,
loadChildren: () =>  import(‘./customers/customers.module’).then(mod => mod.CustomersModule)
},
{
 path: ‘orders’,
loadChildren: () => import(‘./orders/orders.module’).then(mod => mod.OrdersModule)
},
{
 path: ‘’,
 redirectTo: ‘’,
 pathMatch: ‘full’
}];

In summary, when you code split based on routes, you serve only the chunks your users need per route.

See more on code splitting/Lazy loading in React here.

See more on code splitting/Lazy loading in Vue here.

See more on code splitting/Lazy loading in Angular here.


That’s quite a lot to take in.

So, now that we have looked at some code, what factors do we know that can affect the performance of our apps.

  • Network Conditions
  • Device GPU of users.

Conclusion

The performance of our apps would always have a subjective feel to it. This is because it is an experience that no one metric can fully capture. There are multiple moments during the load experience that can affect whether a user perceives it as “fast” or “slow.”

In testing, we must pay attention to the little wins that cumulatively increase application speed and result in a better experience for the end-user.

The post Measuring and Optimizing Web Performance appeared first on Andela.

How To Create Your First Firebase Cloud Function Project

$
0
0

This is a tutorial on how you can create your first Firebase Cloud Function project.

Prerequisites:

1. Firebase project.

2. Very basic knowledge of Node.js

3. Knowledge of NoSQL database

What is Firebase Cloud Function?

Cloud Functions for Firebase lets you automatically run backend code in response to events triggered by Firebase features and HTTPS requests. Your code is stored in Google’s cloud and runs in a managed environment. There’s no need to manage and scale your own servers, for example, if we have a chatting mobile app that uses firebase to store the messages and we want to filter the messages before they are written to the database so as to make sure there are no bad words included in any message, before the cloud functions were made that was really hard to achieve and most probably we would need someone to write a backend code to do this check, but today, all we need to do is just write a simple cloud function that triggers whenever any message is added to our database and filter it out.

It is very powerful especially for mobile developers that have no knowledge on how to write web apps or backend, you can also integrate with third-party APIs like Slack and Github, but in this tutorial we will go through “Realtime Database triggers”, realtime database triggers are functions triggered when a database event happens, in this tutorial we will go through the onWrite(), which triggers a cloud function when data is added, updated or deleted from a specific node in the realtime database.

To get started with our cloud function we first have to install the Firebase CLI.

Installing the Firebase CLI:

The Firebase CLI is the method by which Firebase Cloud Functions are deployed and managed from the command-line of a terminal or command prompt window, the Firebase CLI is built on Node.js, therefore, the first step in installing the CLI is to set up the Node.js, we will now walk through the steps on how to install the CLI starting from installing node and npm.

1. Go to https://nodejs.org/en/ and click on the Installer that says “Recommended For Most Users”.

2. Launch the .msi downloaded file and go through the install process but make sure to select the npm package manager on the Custom Setup screen, not the default of Node.js runtime. This way we’ll install Node and NPM at the same time, To confirm we’ve installed everything correctly, open the “Command Prompt”,  To confirm Node is installed type node -v which will print the current version number. To confirm NPM is installed, type npm -v, which will print its current version number.

3. Install the Firebase Tools package, note that the Firebase CLI is installed as a part of the Firebase Tools package, install it using the following npm command within a terminal or command-prompt window: npm install -g firebase-tools, note that on some platforms such as macOS and Linux it may be necessary to execute the above command with superuser privileges: sudo npm install -g firebase-tools .

Now we can create a local cloud functions project but before we create the project we have to sign in to Firebase with the same account we use in our firebase project, to sign, type the following command: firebase login the command will prompt for permission to gather anonymous usage data before displaying a browser window within which to select the Google account associated with your Firebase development projects, go back to the CMD after you log in using the browser you will find a message stating that you have successfully logged in.

To logout at any point in the future, simply execute the following Firebase CLI command: firebase logout

Creating your first Firebase Cloud Function Project:

1. To create our firebase cloud function project locally we first have to navigate to the location that you want to keep your cloud functions projects then create a folder and name it with whatever you want to name it but I suggest that you name it with your project’s name.

2. We will use the Firebase CLI to create our project, on the CMD/Terminal, change the directory to the new project folder and run the following command to create the project: firebase init functions,you will find a message telling you “You’re about to initialize a Firebase project in this directory:”, “ Are you ready to proceed? (Y/n)”, then type “y”

3. The Firebase CLI will tell you the following message:
First, let’s associate this project directory with a Firebase project. You can create multiple project aliases by running firebase use –add, but for now, we’ll just set up a default project. Select a default Firebase project for this directory: (Use arrow keys)” then choose the project you want to apply the cloud functions on.

4. After you choose the desired project, it will ask you which language you want to use to write cloud functions, in this tutorial I will be using Typescript, then it will ask you if you want to install dependencies with NPM, choose “y”.

5. You are all set and ready to write your first cloud function now!

Writing your first Cloud Function:

In this tutorial, we will write a cloud function that will trigger whenever any User is added/updated and sends him a notification that greets him including his name.

Suppose we have a node called users and each node has name and token fields.

Note: the token is the value of the device token that is known as the registration token that is a unique token string that identifies each client app instance. The registration token is required for single device and device group messaging. Note that registration tokens must be kept secret.

Use any editor to write your code, I usually use Visual Studio Code.

Open the folder that you created for your cloud function project, you will find a folder named “functions”, open it then open the “src” folder then open index.js.

From here you could start writing your functions, when you open the index.js file you will find an import and a commented function.

First, we have to import firebase-admin as we will use it to send the notifications and access the database.

import * as admin from ‘firebase-admin’;

Then we have to add the Firebase Admin SDK to access the Firebase Realtime Database.

admin.initializeApp(functions.config().firebase);

After we initialize the app, we need to write our cloud function as the below syntax, we need to reference the users node and navigate to each user that is created or updated as below:

export const myFirstCloudFun= functions.database.ref(‘/users/{userId}’).onWrite(async (event, context) =>{

 

})

The next step is getting the user’s name and token so we can create the notification payload as below:

export const myFirstCloudFun= functions.database.ref(‘/users/{userId}’).onWrite(async (event, context) =>{

const user= event.after.val()

const name = user.name

const token = user.token

 

})

Next step is to create our payload so we can send the notification

export const myFirstCloudFun= functions.database.ref(‘/users/{userId}’).onWrite(async (event, context) =>{

const user= event.after.val()

const name = user.name

const token = user.token

const payload = {

           notification: {

             title: ‘Hi ‘+ name,

             body: ‘Welcome to our first cloud function App’ ,

             sound : “default”

           }

         };

})

Finally we will write the code that sends our notification as below then save your code:

Note: It is important to log the errors or the successful response so you can track your results, you can always find your logs in the firebase console under the cloud functions tab from the side menu.

export const myFirstCloudFun= functions.database.ref(‘/users/{userId}’).onWrite(async (event, context) =>{

const user= event.after.val()

const name = user.name

const token = user.token

const payload = {

           notification: {

             title: ‘Hi ‘+ name,

             body: ‘Welcome to our first cloud function App’ ,

             sound : “default”

           }

         };

return admin.messaging().sendToDevice(token, payload)

         .then(function(response){

             console.log(“Successfully message is sent:”, response);

         console.log(response.results[0].error);})

         .catch(function(error) {

           console.log(“Error while sending message:”, error);

       }

   )

})

Deploy the Cloud Function:

To Deploy our function we will again use the Firebase CLI

firebase deploy

Then you are all set!

 Note that if you face an issue while deploying with the firebase.json, just replace the script inside with the following:

{ “functions”: { “predeploy”: [ “npm –prefix ./functions/ run lint”, “npm –prefix ./functions/ run build” ] } }

Test The Cloud Function:

After our function is deployed successfully, now we need to do is test our function and make sure that it works as expected.

In this example we need to have two attributes for each user object which are the name and the token, to get the device token on Android:
Log.d(“FCMToken”, “token “+ FirebaseInstanceId.getInstance().getToken());

and on iOS:

InstanceID.instanceID().token()

Now, after we get the name and the token of the user, we need to create an object of these two attributes and write them to the firebase database, to do that we could use either the Firebase SDK or Firebase database REST API, you can find the link below on how to use firebase database REST API: https://firebase.google.com/docs/reference/rest/database

 after writing the user object to the firebase database, our database should look something like this:

Once we write our object to the database, our cloud function should be triggered and send the notification successfully, and here we go!

References:

  1. https://medium.com/@carlosazaustre/how-to-create-your-first-cloud-function-for-firebase-17711831a67c
  2. https://www.techotopia.com/index.php/Installing_the_Firebase_CLI
  3. https://firebase.google.com/docs/functions
  4. https://firebase.google.com/docs/functions/use-cases
  5. https://firebase.google.com/docs/functions/database-events
  6. https://firebase.google.com/docs/functions/firestore-events
  7. https://wsvincent.com/install-node-js-npm-windows/
  8. https://firebase.google.com/docs/cloud-messaging/concept-options

The post How To Create Your First Firebase Cloud Function Project appeared first on Andela.

The Convergence KE: On Building World-class Technology Teams

$
0
0

What’s the difference between a good engineer and a great engineer? Is there such a thing as a world-class engineer? If so, what cuts you out of the crowd to get the much-acclaimed status of a world-class engineer? As an engineering lead (director, chief architect, technical team lead, et al), what qualities do you look for when building an elite engineering team? How do you ensure diversity in skill, gender, and expertise when assembling such a team?

These and many more questions inspired the very 1st Convergence KE event by Andela; a tech ecosystem meetup for technologists and leaders in the tech community who come together to share their experience mix of successes, failures, wins, and lessons learned as they walked that journey. 

Over 100 attendees, mostly mid-level to senior technologists (engineers, designers, product leads) joined us at the iHUB (one of the leading Innovation Hubs and hackerspace for the technology community in the region) to listen in, share, and learn from a richly diverse panel made up of; Wambui Kinya – VP, Partner Engineering, Andela (moderator), Diana Wanjuhi – Lead Product Engineer, Africa’s Talking, Edwin Kaduki – Software Engineering Director, Mastercard Labs and Alexandre Augusto da Rocha – Co-founder & Chief Architect, CloudBolt.

I led a small team of brilliant minds at Andela to bring The Convergence KE to life, and below, I’d like to share some powerful soundbites by tech leaders who joined us on the panel. Let’s dive right in!

On good vs great engineers;

All panelists agreed that a great engineer often goes the extra mile; whether that extra mile means continuous learning, a keen attention to detail, being relentless, focusing on great solutions rather than job titles or ranks, and ultimately, the famous “what drives you”, or, if you like, what you want to achieve (fame or impact). 

On the wildly “world-class engineer” phrase;

This evoked mixed reactions amongst the panelists, with some agreeing that a world-class engineer is more lucrative as s/he can cut across geographical, cultural, demand boundaries to work on building solutions for problems across the different sectors. Some, however, were contrary to the idea of labeling engineers as being world-class because technology is on an endless changing cycle, with new versions, new platforms, new technologies being released every waking day, hence trickling down to the fact that engineers never reach “an ultimate” in the sense of amassing knowledge and experience in tech; there will always be a new challenge, a new platform to explore and learn.

What are your thoughts on that?

On qualities that tech team leads look for when hiring engineers;

There’s definitely a keen focus on your technical capability; past projects worked on, proficiency in a language or stack or platform, etc.

However, a lot of the qualities highlighted and underscored by the panelists stretched across a good number of soft skills; being able to communicate (across distributed teams, and different time zones, in good time, clearly and precisely to be understood), handling failure and bouncing back from it, active listening (within your team and customers/clients alike), being self-reliant (being able to pick up when the team is not readily available to step in).

This is one of the key reasons why our values, at Andela, are all anchored on 4 soft-skills that need to be consistently upheld by all Andelans; Excellence, Passion, Integrity, and Collaboration, if you like EPIC values.

Does this come as a surprise to you?

On Remote and Distributed Teams;

The panelists all echoed the fact that this is where the world is headed (especially with the current software engineering talent shortage in the world.) At Andela, we believe that brilliance is evenly distributed but opportunity is not; a mantra that strongly shows why we are a remote-first company, with most of our engineering teams being made up of engineers spread across Africa and across the globe where our partner companies are located.

It was also emphasized that a diverse mix of skill and experience is a key factor in the success of remote/distributed teams. 

Finally, this fired up panel shared a few pieces of advice to mid-level engineers, which I will wind up with:

1. Do not let titles or ranks be your only key driver, work towards being a GREAT engineer (whether you are a junior engineer or a senior engineer) and the rest will follow.

2. No failure, no learning. Simple. And this is because some of the toughest, yet pivotal failures are what have taught the best lessons, not just in life generally but also in this tech industry.

3. With the ever-increasing growth of tech-enabled businesses, one should mainly focus on their skills (both soft and technical), and the market will come looking for you.

4. Previously, experience was garnered through the industry but now, the main channel is through education (read: online resources) and mentorship programs, so strive to also be a part of these.

5. You have to see the bigger picture; you are not simply taking a feature into production, or simply working on documentation for a given platform, but rather, adding a functional piece to a bigger plan, which you need to identify with from the onset. This is also great advice to keep you going when things get tough!

Interestingly, the panelists had had other careers in mind when growing up, but even more encouraging was that none of them regrets pursuing a career in technology because not only is it challenging and exciting for them every day, it also gives them a bigger platform to shape the lives of millions out there who are using solutions they have worked on and/or contributed to.

An epic discussion no less! 

——————————————–

A huge thanks to the Nairobi tech community for showing up and being a great interactive audience, and to all the Andelans who worked tirelessly to bring the event to life!

Let’s meet at the next Convergence edition!

The post The Convergence KE: On Building World-class Technology Teams appeared first on Andela.

The Power of Creating: Fabrice Nkaka’s Developer Journey

$
0
0

Fabrice Nkaka was 10 years old when he first fell in love with computers. His earliest fascination? Microsoft Paint – Fabrice thought it was, in his own words, “…some kind of magic.” His mother had a borrowed computer on which she worked on writing memoirs at the time, and it was on that computer that Fabrice developed an affinity to build things. Well, he logged in a good amount of Solitaire play time too. Today, he is a software engineer at Andela and is among the pioneering set of software engineers hired at Andela Kigali, our first pan African hub.

I had a conversation with him to talk about his journey to building a career in software.

How did you learn to code?

I learned to code during my time in high school. I did a concentration in computer science and I proceeded further to study Information Technology at university. Because I already started to learn in high school, it was quite easy to get better at it while in university. It might be relevant to mention that the academic program isn’t really designed to teach you how to code, as many of my classmates can’t exactly code – even though they may have a working knowledge of Computer Science. I reached out to and learned from mentors and seniors around me (Calving Mugabo, Issa Kaduri, and Placide Mukwende), and ensure that I got some real-time market experience in between semesters. (I worked for two local companies at the time – as an IT Support Engineer for one and as a Graphic & Static Website Designer for the other.)

What is your favourite thing about being a software developer?

It has to be the feeling you get from being able to create or to be part of a team that can create something that can change, transform, and improve the lives of many people for the better.

What is your tech stack?

React Js, Express Js & Node Js and Vue Js.

What are the products you’ve built or are collaborating on that you’re most proud of?

I worked on a mobile application that tracks the nearest forex bureau with the fairest exchange rates.

********************************

Fabrice is on Twitter as @fabnkakaIV, and is open to mentoring newbie software engineers.

The post The Power of Creating: Fabrice Nkaka’s Developer Journey appeared first on Andela.

Viewing all 615 articles
Browse latest View live