<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Anna Tsolakou</title>
    <description>The latest articles on Forem by Anna Tsolakou (@tsolakoua).</description>
    <link>https://forem.com/tsolakoua</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F322628%2F90b4a7ab-6df6-4315-9d5f-2a149d4f8d36.jpeg</url>
      <title>Forem: Anna Tsolakou</title>
      <link>https://forem.com/tsolakoua</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tsolakoua"/>
    <language>en</language>
    <item>
      <title>How DevRel makes your API irresistible</title>
      <dc:creator>Anna Tsolakou</dc:creator>
      <pubDate>Wed, 16 Mar 2022 08:37:14 +0000</pubDate>
      <link>https://forem.com/tsolakoua/how-devrel-makes-your-api-irresistible-56cf</link>
      <guid>https://forem.com/tsolakoua/how-devrel-makes-your-api-irresistible-56cf</guid>
      <description>&lt;p&gt;Providing a quality API to your customers is the minimum you can offer to them. Developer tools, good documentation, and developer communities around your product are highly requested by developers and that’s where Developer Relations (DevRel) can help. Having an effective DevRel program in place helps your company meet the expectations of developers and grow into a successful business.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What is Developer Relations?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Developer Relations can cover a lot of things, but I like to think that DevRel has two main responsibilities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understand developers&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;DevRel needs to understand who your users are, how they feel about your API, what they want to build, and what they need from your company to be successful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be the connection between your company and developers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Internally, DevRel raises the developer’s voice in order to evolve your product roadmap and externally represents your company in the developer community.&lt;/p&gt;

&lt;p&gt;Developers have diverse needs and expectations, so your DevRel team needs members with different skills, backgrounds, and interests. It's useful to have some members more into public speaking and others that prefer coding or technical writing. For DevRel, diversity is definitely a strength.&lt;/p&gt;

&lt;p&gt;At &lt;a href="https://developers.amadeus.com/"&gt;Amadeus for Developers&lt;/a&gt;, our Developer Relations team focuses on these main areas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Developer experience&lt;/strong&gt; - ensuring that developers can integrate the APIs easily and efficiently into their applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer community&lt;/strong&gt; - building a developer community to drive awareness and adoption of the APIs, and making sure that the community is active and engaged.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product feedback&lt;/strong&gt; - ensuring that developer feedback makes its way to the API product team so we can build an attractive product roadmap.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below, we'll explore the role of DevRel in each of these areas and I'll share some helpful tips I’ve learned along the way.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Developer Experience&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The developers who use your APIs expect a reduced technical complexity. Below there are a few things we do in order to help developers integrate the APIs in their applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SDKs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is nothing developers appreciate more than tools that reduce complexity. This is especially true if you work in a complex industry, have junior developers in your user base, or if your users will combine your APIs with others such as payments, analytics, or maps APIs in their application (which is probably the case).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/amadeus4dev?q=library&amp;amp;type=all&amp;amp;language=&amp;amp;sort="&gt;SDKs&lt;/a&gt; make it easy for developers to build with your APIs in their own environment, and usually offer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple authorization process&lt;/li&gt;
&lt;li&gt;Access to all your APIs in their own environment&lt;/li&gt;
&lt;li&gt;Error handling to help with debugging&lt;/li&gt;
&lt;li&gt;Code samples that developers can easily use in their applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Docs &amp;amp; Guides&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First and foremost, DevRel needs to ensure that your API documentation is clear and consistent, especially if your APIs are developed by different teams that could potentially use different terminology.&lt;/p&gt;

&lt;p&gt;But good documentation is only the starting point. Your users' expertise and industry knowledge can vary greatly, so you should also create educational content like &lt;a href="https://developers.amadeus.com/blog/category/tutorials?page=1&amp;amp;count=5"&gt;guides&lt;/a&gt; or &lt;a href="https://www.youtube.com/channel/UCwI48vMwtiE-hra2RAtk1PQ"&gt;video tutorials&lt;/a&gt; to bring users up to speed on the concepts around your product or walk them through complex processes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Demo Apps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Demo applications give developers a taste of what your APIs can do and can help promote new or underperforming APIs in the process. In particular, demo apps are useful to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give potential customers an interactive way to explore your APIs and functionalities&lt;/li&gt;
&lt;li&gt;Inspire current customers with new use cases&lt;/li&gt;
&lt;li&gt;Give students and hackathon attendees an easy starting point for their projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What's more, building &lt;a href="https://github.com/orgs/amadeus4dev/repositories?language=&amp;amp;q=demo&amp;amp;sort=&amp;amp;type=all"&gt;demo apps&lt;/a&gt; is easy and straightforward. The only thing you need is a few interesting use cases and the time required to build.&lt;/p&gt;

&lt;p&gt;When you're done, publish the code as open-source - it not only helps developers find them, but it also simplifies onboarding by giving them a base off which they can build their own applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customer support&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DevRel knows your APIs, users, and industry, so they're well equipped to provide support on both technical and functional questions.&lt;/p&gt;

&lt;p&gt;Customer support is also a great way to get feedback and ideas for product improvements. You not only get insight into your customers' needs, struggles, and ideas, but it also helps you stay on top of new use cases and emerging trends.&lt;/p&gt;

&lt;p&gt;When providing support, remember that developers live in many online places - GitHub, Twitter, or Stack Overflow come to mind - so you should make a point to be available on these channels as well as through your support email.&lt;/p&gt;

&lt;p&gt;To keep support from getting out of hand, be also proactive. At Amadeus for Developers, we perform regular automated health checks on our APIs to ensure we identify bugs or issues before our users do.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Developer community&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The developer community has been one of our main priorities, especially how can we build a community and how can we really engage the community we've built, with the following actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organize hackathons&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you sponsor or even organize a hackathon, you'll bring hundreds of people together to code with your API. You'll also get to see how a variety of profiles - developers, designers, data scientists, etc. - engage with your product from start to finish. Not only is it a great chance to get feedback, but it's also an opportunity to interact with your users directly and start making connections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attend conferences &amp;amp; meetups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Conferences and meet-ups are great opportunities to share your product and expertise with the world and, of course, learn lots of new things along the way. They're also a good way to meet potential users or network with peers from other companies.&lt;/p&gt;

&lt;p&gt;Virtual events are an effective way to reach a wider global audience, but they're no substitute for physical events and the connection that come with meeting people face-to-face.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build an online community&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you find that your user interactions are spread out among different channels like email, Stack Overflow, GitHub, and Twitter, consider creating a dedicated online community space where your users can come together, network, or get support. We created our community on &lt;a href="https://discord.gg/cVrFBqx"&gt;Discord&lt;/a&gt;, but you can use whatever platform you prefer.&lt;/p&gt;

&lt;p&gt;Now, launching a community channel is easy. The real trick is to keep it lively and engaging. There are tactics you can use to keep your community active, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offering office hours where users can get live support&lt;/li&gt;
&lt;li&gt;Hosting networking sessions&lt;/li&gt;
&lt;li&gt;Creating discussions around topics related to technology or your industry&lt;/li&gt;
&lt;li&gt;Sharing articles or other resources your user might find interesting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't be afraid to experiment - you might be surprised by what works. We doubted that anyone would show up to our first live support hour, we launched it anyway and were surprised by the enthusiastic response of the community. We found users sharing their open-source projects, asking about contributing to our SDKs, or wondering if they could write articles for our blog. This gave us the encouragement we needed to continue building the community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embrace open-source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Finally, developers love using and contributing to open source. Releasing your demo apps and SDKs as open-source is a helpful way to build transparency and trust with the community.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Product feedback&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of our main challenges had been how to consolidate the feedback we had gathered and these are the main points that we found useful. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invest in a dedicated tool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We've found that having a dedicated tool for tracking feedback is much more efficient and scalable than storing it in long documents or scattered files. Our team uses Trello, but there are plenty of other tools that can work. Every time we get user feedback, we just add it to our board and tag it so it's organized, prioritized, and easy to share with our product teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't forget to follow up&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Follow-through is also important. Whenever you make a product improvement based on user feedback, it's a good idea to send the user an email thanking them for their feedback and letting them know the improvement has been made. This builds trust and keeps your user engagement high.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In this article, I've shared a few reasons your API needs a DevRel team and some simple tips to provide a good developer experience, build community, and effectively translate user feedback into product improvements.&lt;/p&gt;

&lt;p&gt;In the end, DevRel is all about helping your customers be successful. By providing the right tools, you'll significantly reduce onboarding times for your API, and your transparency and responsiveness will help you build a community of happy developers who love (and love to talk about) your API.&lt;/p&gt;

</description>
      <category>devrel</category>
    </item>
    <item>
      <title>The DevRel toolkit for API providers</title>
      <dc:creator>Anna Tsolakou</dc:creator>
      <pubDate>Tue, 30 Nov 2021 10:09:48 +0000</pubDate>
      <link>https://forem.com/tsolakoua/the-devrel-toolkit-for-api-providers-2aop</link>
      <guid>https://forem.com/tsolakoua/the-devrel-toolkit-for-api-providers-2aop</guid>
      <description>&lt;p&gt;When many people think of DevRel, they think of meetups around the world and tickets to the coolest conferences. Those are perks of the job, sure, but the day-to-day is much different. &lt;/p&gt;

&lt;p&gt;As developer advocate for &lt;a href="https://developers.amadeus.com/"&gt;Amadeus&lt;/a&gt;, I spend most of my time implementing developer tools, building tutorials, and communicating with our users to support them and gather their feedback. To do that effectively and efficiently, you need tools. &lt;/p&gt;

&lt;p&gt;From running API health checks to efficiently handling user feedback, having the proper tooling is key to improving developer experience and engage with your community. In this article, I’d like to share the tools we use on daily basis as Developer Advocates for an API product.&lt;/p&gt;

&lt;h3&gt;
  
  
  Postman
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.postman.com/"&gt;Postman&lt;/a&gt; is an API client that lets you create, share, test, and document APIs easily. We maintain a Postman collection of our APIs so developers can play with them without having to write any code. Developer experience benefits aside, Postman is also a huge time saver for day-to-day DevRel tasks. Looking into support queries, writing an API tutorial, or even mocking an API to prepare content ahead of launch are all easy using Postman.&lt;/p&gt;

&lt;h3&gt;
  
  
  Runescope
&lt;/h3&gt;

&lt;p&gt;It's very important to identify any bugs or issues with the APIs before your users do. &lt;a href="https://www.runscope.com/"&gt;Runescope&lt;/a&gt; is an API monitoring tool that continuously checks uptime, performance, correctness, and other factors that indicate the health of your API. Using Runescope helps reassure your DevRel that all your APIs are running correctly and - more importantly - notifies them immediately when an issue arises so they can start on a fix before your users are affected.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apigee
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/apigee"&gt;Apigee&lt;/a&gt; is an API gateway that Amadeus and many other companies use to let developers connect with their data and services. As all the traffic passes through Apigee, it's also a great tool to gain insights into your customers and how they're using your APIs. Which of your APIs are used the most? What days do you see the highest traffic? These meaningful insights that Apigee provides are key to helping your DevRel analyze and optimize the developer funnel.&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub
&lt;/h3&gt;

&lt;p&gt;Amadeus for Developers publishes as open-source all the SDKs, code samples, and demo apps on &lt;a href="https://github.com/amadeus4dev"&gt;GitHub&lt;/a&gt;. After all, we love using open-source tools so why not give back to the community? Publishing your code as open-source makes it easy and efficient for developers to integrate your APIs, and is a great way to get contributions and product feedback from the developer community.&lt;/p&gt;

&lt;h3&gt;
  
  
  Discord
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://discord.com/"&gt;Discord&lt;/a&gt; is a group-chat platform that helps people create and join communities. For DevRel teams, creating a Discord server is a great way to engage with your users, provide support, or host activities like workshops or networking. Amadeus for Developers created a &lt;a href="https://discord.gg/cVrFBqx"&gt;Discord server&lt;/a&gt; to provide our users - both current and potential - a meeting point to talk, share, and interact with the community.&lt;/p&gt;

&lt;h3&gt;
  
  
  Salesforce
&lt;/h3&gt;

&lt;p&gt;If you ask your marketing team about &lt;a href="https://salesforce.com/"&gt;Salesforce&lt;/a&gt;, they'll tell you it's the world's leading CRM platform. For DevRel, Salesforce's value is in managing support. Salesforce provides tools to help your DevRel team track and solve support tickets in an easy and productive way and it's built-in metrics also give you insight into your users' needs, pain points, and even market trends.&lt;/p&gt;

&lt;h3&gt;
  
  
  Trello
&lt;/h3&gt;

&lt;p&gt;Most people know &lt;a href="https://trello.com/en"&gt;Trello&lt;/a&gt; as a project management tool, but it can also be used for handling user feedback. Consolidating and sharing user feedback is one of the main pillars of DevRel, and your team needs to ensure that feedback is passed smoothly from users to product teams. At Amadeus for Developers, we've used Trello to built a complete feedback management framework, complete with rules to help consolidate and prioritize user feedback in a scalable way.&lt;/p&gt;

&lt;p&gt;And this is just the beginning. There are lots of tools on the market today to help you be a more effective developer advocate. Do you have a tool that's making your DevRel life easier? If so, share in the comments below.&lt;/p&gt;

</description>
      <category>devrel</category>
    </item>
    <item>
      <title>
Tech hiring process; tips &amp; highlights</title>
      <dc:creator>Anna Tsolakou</dc:creator>
      <pubDate>Fri, 24 Jan 2020 06:58:26 +0000</pubDate>
      <link>https://forem.com/tsolakoua/tech-hiring-process-tips-highlights-42mc</link>
      <guid>https://forem.com/tsolakoua/tech-hiring-process-tips-highlights-42mc</guid>
      <description>&lt;p&gt;This article provides highlights and tips on the hiring process, from personal experience as an interviewer and as an interviewee as well. I believe they could be useful for people who are searching for new challenges, especially in a tech environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_BMJkJ1y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2Agc5-txIEz_Rid9PXtAWYlA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_BMJkJ1y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2Agc5-txIEz_Rid9PXtAWYlA.jpeg" alt="hiring-meme"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The amount of opportunities in the market; a double-edged sword
&lt;/h2&gt;

&lt;p&gt;There are tons of companies out there that build great products, with strong culture and motivated teams. They provide flexible working hours, flexible holidays, remote work and perks, decent salaries and of course the chance to grow professionally.&lt;/p&gt;

&lt;p&gt;That amount of companies and the opportunities are a double-edged sword and someone who is looking for a job should make sure that the product, team and company culture are the ones that fits them. If that’s not the case, a strong philosophy opposite to yours, can make you have a really hard time at work, when you could be in another place, and in your place to be another person that would be happier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The purpose of interviewing and it’s two-sided face
&lt;/h2&gt;

&lt;p&gt;The purpose of the interviewing process is supposed to evaluate the experience, knowledge and communication skills of a candidate for a certain role. Nowadays, especially for technical roles, there are a lot of interviewing steps and challenges that need to be passed, as the companies, especially the smaller ones, are looking for amazing talent that could fit the role. The process might be harsh and energy consuming, but the positive side is that the candidates have a great chance to get to know the company and members beforehand pretty well. The interview should be considered two-sided and a candidate has the advantage to understand if that environment, and workflow is what they are looking for. For example, some engineering teams work with pair-programming on a daily basis, whereas others focus on other methodologies. Are you sure you would be happy working in a team that applies any methodology?&lt;/p&gt;

&lt;p&gt;Hiring the right person means matching between the company and the person. Candidates who are rejected tend to take the rejections personally. When a candidate is at an early career stage, it hurts their confidence and when a candidate is senior, they believe they would be perfect in every company. Like every human relationship, becoming a member of a company is a relationship between the company’s members and the candidate and when there are uncertainties, it’s very common for companies to move to a rejection, in order to avoid future issues and friction. It doesn’t mean that it’s the right decision, but this is very common in the startup environment. And if it’s the wrong decision, you always have the freedom to apply again in the future and be considered as a candidate once more and prove yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare your resume
&lt;/h2&gt;

&lt;p&gt;When it comes to job applications, it’s common to send a resume, answer to a few questions to evaluate the candidate’s interest in the company and a cover letter. I’d like to focus on a couple of things about the cover letter and resumes that even though are a common sense and written in many articles as well, I feel they are valuable.&lt;/p&gt;

&lt;p&gt;Interviewers are mainly interested in knowing the working experience of a candidate, that’s why it’s nice to see the details on the top of the resume, after the personal information. Resumes should be in sections and organised as much as possible, so every information can be found easily. Also, it’s very helpful when a candidate writes a very small sentence of what every company has worked for is doing and an inline link to the company’s website, so the candidate’s responsibilities can be understood better. And when writing responsibilities, it’s nice to add achievements for the company by your team, in a respectful and not showing-off way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The perfect cover letter
&lt;/h2&gt;

&lt;p&gt;Regarding the cover letters, there are cases that are optional and cases that are not-optional. In both cases, receiving a minimal and personal cover letter is always positive, as it gives the chance to learn more about the candidate. Things that should be avoided in the cover letter are things that can be easily found in the resume, as the cover letter is not a copy of the resume. Of course some information will be mentioned again, but the point of the cover letter is to reflect the relevant experience and interest in the role and company. The size doesn’t matter, but if it’s too dense, long and not to the point it might be discouraging to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As mentioned in the beginning, these highlights are based on personal experience and in the end, companies and candidates behave in various ways and have different realities, but what is common is that the perfect match between companies and candidates, brings creativity, motivation and a happy collaboration for both sides.&lt;/p&gt;

</description>
      <category>hiring</category>
      <category>career</category>
      <category>startup</category>
    </item>
    <item>
      <title>Deploy a Django app on Heroku from a GitHub repo</title>
      <dc:creator>Anna Tsolakou</dc:creator>
      <pubDate>Fri, 24 Jan 2020 06:47:10 +0000</pubDate>
      <link>https://forem.com/tsolakoua/deploy-a-django-app-on-heroku-from-a-github-repo-3fmi</link>
      <guid>https://forem.com/tsolakoua/deploy-a-django-app-on-heroku-from-a-github-repo-3fmi</guid>
      <description>&lt;p&gt;In this guide we are going to show you how to deploy a Django application on Heroku from a GitHub repository step by step.&lt;/p&gt;

&lt;p&gt;The points we are going to cover in this guide are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Take care of Static files&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure Debug mode using environmental variables&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure Allowed Hosts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a Heroku Dyno&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a new app on Heroku&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Connection to GitHub repository and deployment&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In order to deploy your project, we need to make a few changes in the code. For the ones who don’t have experience in deploying applications it might seem a bit complicated at first but trust me, the next times it’s going to be much smoother.&lt;/p&gt;

&lt;h2&gt;
  
  
  Static Files
&lt;/h2&gt;

&lt;p&gt;The hosted application has to collect and serve the static files (media, css etc.) in the browser. Make sure the &lt;em&gt;settings.py&lt;/em&gt; has the following lines of code.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also, Django does not support serving static files in production automatically so we install &lt;a href="http://whitenoise.evans.io/en/stable/index.html"&gt;WhiteNoise&lt;/a&gt;. Don’t forget to add it in the &lt;em&gt;requirements.txt&lt;/em&gt; file after the installation is done. Let’s run the commands in our terminal!&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install whitenoise
pip freeze &amp;gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;And let's add it in the MIDDLEWARE components in &lt;em&gt;settings.py&lt;/em&gt;,&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MIDDLEWARE = ['whitenoise.middleware.WhiteNoiseMiddleware']
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Debug mode
&lt;/h2&gt;

&lt;p&gt;When we run the application locally, the DEBUG mode is True, but when we run it in &lt;strong&gt;production&lt;/strong&gt; it should be &lt;strong&gt;False&lt;/strong&gt;. Imagine all the users being able to see the debug messages! But what if we want to use the same repo for both production and local development. How can we do that? How can the DEBUG mode take the right value depending the environment? For that case we take advantage of the environmental variables. Let’s see how we can use them.&lt;/p&gt;

&lt;p&gt;In the &lt;em&gt;settings.py&lt;/em&gt; file&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os
DEBUG = os.environ.get(‘DEBUG_VALUE’)
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In Heroku’s settings we can easily configure the environmental variables, where in our case we set the &lt;strong&gt;DEBUG_VALUE&lt;/strong&gt; to &lt;strong&gt;FALSE.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HbOETSk9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2880/1%2AXa2GsakS4Q_Ni7P7noE8cA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HbOETSk9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2880/1%2AXa2GsakS4Q_Ni7P7noE8cA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--h9-GExLP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3500/1%2A9Hc9gcRDMjFN7Irhd51LCA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--h9-GExLP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3500/1%2A9Hc9gcRDMjFN7Irhd51LCA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Accordingly, for our local machine we can use the wanted value for the debug mode in our operating system’s environmental variables file, like below:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export DEBUG_VALUE=”True”
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Allowed Hosts
&lt;/h2&gt;

&lt;p&gt;Now we are going to configure the Allowed Hosts in the &lt;em&gt;settings.py&lt;/em&gt; file. The first one is the Heroku domain and the second one is for running the application locally.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALLOWED_HOSTS = [‘smart-flight-search.herokuapp.com’, ‘0.0.0.0’]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Set up Dyno &amp;amp; Procfile
&lt;/h2&gt;

&lt;p&gt;In order to execute the application we need to configure a Heroku Dyno, which is mainly an instance of a server.&lt;/p&gt;

&lt;p&gt;Now let’s create a file called **Procfile **in the root directory of the project.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;web: gunicorn -w 2 --chdir amadeus_demo_api/  amadeus_demo_api.wsgi:application --reload --timeout 900
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you want to check locally the Procfile is configured properly, you can run the above command in your terminal. Just don’t forget to install &lt;a href="https://gunicorn.org/"&gt;gunicorn&lt;/a&gt; and add it in the requirements file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create the new application
&lt;/h2&gt;

&lt;p&gt;Now it’s time to move on with the actual deployment process on Heroku! After we login in Heroku web, we can click on &lt;strong&gt;create new app&lt;/strong&gt; and we choose a unique app name also the region.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mYmyQb-v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3140/1%2Ao9hMeX4kueSSD8JA7DLpvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mYmyQb-v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3140/1%2Ao9hMeX4kueSSD8JA7DLpvw.png" alt="create-heroku-app"&gt;&lt;/a&gt;&lt;em&gt;create-heroku-app&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect to GitHub
&lt;/h2&gt;

&lt;p&gt;When the app is created, we have to go to the &lt;strong&gt;Deploy tab&lt;/strong&gt; and choose &lt;strong&gt;GitHub&lt;/strong&gt; as a deployment method. Then we choose the repository with the project we want to host on Heroku.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TUwVpqsg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5168/1%2A24_unYV3LKImfK8n5jJ3zg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TUwVpqsg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5168/1%2A24_unYV3LKImfK8n5jJ3zg.png" alt="connect-repo"&gt;&lt;/a&gt;&lt;em&gt;connect-repo&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As we can see, we have the option to choose automatic deployment or manual one. That really depends on you, but you have to make sure your branch is always in the right state in case you chose the automatic option, as it’s going to be deployed every time you push to your branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F_PF2Djq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5024/1%2Ar-fp548lFIdjL5d_bVhaaQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F_PF2Djq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5024/1%2Ar-fp548lFIdjL5d_bVhaaQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we choose manual deployment we have to click on Deploy Branch and that’s it! Heroku displays the log of the deployment process until it’s done so we can see if it’s successfully executed or if there are errors.&lt;/p&gt;

&lt;p&gt;Sometimes the application has been deployed but when we go to the page we can see there are errors. This can happen for many reasons, for example problem with the dynos, the allowed hosts etc. In order to view the errors while our server is running the best way is to install Heroku on your terminal and check the logs with the following command:&lt;/p&gt;


&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;heroku logs — app APP_NAME&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Conclusion&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;In this guide we went through the steps we have to do in order to deploy a Django project from a GitHub repository on Heroku. We saw the changes we have to do in our code to make it work properly in production and then how we can deploy the application via the Heroku webpage.&lt;/p&gt;

</description>
      <category>django</category>
      <category>heroku</category>
      <category>github</category>
    </item>
  </channel>
</rss>
