Rendered Text BlogThoughts on programming and business, company news.https://renderedtext.com/2020-01-22T00:00:00+00:00Rendered TextThe Semaphore Guides to CI/CDhttp://renderedtext.com/blog/2020/01/22/the-semaphore-guides-to-cicd/2020-01-22T00:00:00+00:002020-01-22T00:00:00+00:00Marko Anastasov<p>When you’re in a field for a long time, you start to believe that what you’re
doing is common knowledge. <p>When you’re in a field for a long time, you start to believe that what you’re
doing is common knowledge. </p>
<p>As <a href="http://renderedtext.com/blog/2009/02/18/getting-fixture-data-quickly-from-the-database-with-console-and-to-yaml/">the first ever blog post
here</a>
shows, Rendered Text has been doing test-driven development for ten years now.
We were also doing <strong>continuous delivery</strong>, deploying to production multiple
times per day. We knew that we were ahead of the curve; the Ruby on Rails
community was by far the most progressive. Surely by now this would be
commonplace?</p>
<p>Not so fast.</p>
<p>Here’s the thing: over 50% of all software developers today have learned to
<em>program</em> less than 10 years ago, as <a href="https://insights.stackoverflow.com/survey/2019#experience">reported by
StackOverflow</a>.
Over 40% have less than 5 years of professional experience. The number of
newcomers is larger than the number of seasoned professionals. The task of
preserving the craft across the industry is not trivial.</p>
<p>There are more people who are yet to learn a software development process
such as continuous delivery, than those who have mastered it.</p>
<p>This is what led us to take some time in 2019 to write concise, modern guides
to continuous integration and delivery (CI/CD). They reflect our own, as well
as the experience of serving thousands of customers of <a href="https://semaphoreci.com">a hosted CI/CD
service</a>.</p>
<p><em><a href="https://semaphoreci.com/continuous-integration">Continuous Integration (CI)
Explained</a></em>: Shows how the
process works, the reasons it exists, technical prerequisites, benefits
and best practices.</p>
<p><em><a href="https://semaphoreci.com/cicd">CI/CD Explained</a></em>: Describes the full-circle
process for effectively delivering software from code to production. Covers
the principles, example workflows, relation to DevOps, and provides a roadmap
for adoption.</p>
<p><em><a href="https://semaphoreci.com/blog/cicd-pipeline">CI/CD Pipelines: A Gentle
Introduction</a></em> is all about the
practical aspect of delivering bug-free code at high velocity. Automation is
not enough, and this article goes in-depth of what a productive code pipeline
looks like.</p>
<p>The best way to stay up to date on Semaphore’s CI/CD articles is by <a href="https://twitter.com/semaphoreci">following
@semaphoreci on Twitter</a> or <a href="https://semaphoreci.com/newsletter">subscribing to
the weekly newsletter</a>.</p>
The First Customer Service Meetup in Novi Sadhttp://renderedtext.com/blog/2018/11/01/first-customer-service-meetup-in-novi-sad/2018-11-01T00:00:00+00:002018-11-01T00:00:00+00:00Ivana Urošević<p>As our customer success team grew, we recognized the need to meet people from
the same field to share experience and knowledge, get to know each other
better and, most importantly, create a community. Meetups are a great format for
pulling a community together, so in September we organized our first customer
service meetup in Novi Sad.</p>
<p><img class="full-size-image" alt="First Customer Service Meetup in Novi Sad" src="http://renderedtext.com/assets/images/blog/2018-10-31/customer-service-meetup-1.png" /></p>
<p><p>As our customer success team grew, we recognized the need to meet people from
the same field to share experience and knowledge, get to know each other
better and, most importantly, create a community. Meetups are a great format for
pulling a community together, so in September we organized our first customer
service meetup in Novi Sad.</p>
<p><img class="full-size-image" alt="First Customer Service Meetup in Novi Sad" src="http://renderedtext.com/assets/images/blog/2018-10-31/customer-service-meetup-1.png" /></p>
<p></p>
<p>The meetup was in the form of a panel discussion with three
speakers - Petar Atanasovski from <a href="https://mvpworkshop.co/">MVP Workshop</a>, Miloš Jević from <a href="https://activecollab.com/">ActiveCollab</a> and
<a href="https://semaphoreci.com/">our very own</a> Filip Brdarić. The whole conversation was moderated by our colleague
Sonja Samardžić, and the meetup was coordinated by Ivana Urošević.</p>
<p>During an one-hour discussion, the speakers talked about the importance of being
customer service-oriented, the most interesting situations
they’ve encountered, their teams' goals, and the future of customer service.</p>
<p><img class="full-size-image" alt="First Customer Service Meetup in Novi Sad Talk" src="http://renderedtext.com/assets/images/blog/2018-10-31/customer-service-meetup-2.png" /></p>
<p>After the panel discussion, visitors had many questions for the speakers. They wanted
to know how customer service teams can
measure how much they contribute to company revenue. We also
talked about the most important thing to look for in candidates at job interviews.
All three speakers agreed that the key thing for
someone to be successful at customer service is having <em>empathy</em>.</p>
<p>Filip said that empathy, along with the desire and willingness to help users are
the most important characteristics his team looks for in a candidate. Petar
added that technical knowledge and English fluency are also crucial for their
team. Miloš agreed, and added that English fluency is the first thing they test
when selecting candidates.</p>
<p><img class="full-size-image" alt="First Customer Service Meetup in Novi Sad Questions" src="http://renderedtext.com/assets/images/blog/2018-10-31/customer-service-meetup-3.png" /></p>
<p>At the very end, everyone was mingling, enjoying snacks and drinks, sharing their
ideas for future meetups, and getting to know each other, which means that our
mission was accomplished. :)</p>
<p><img class="full-size-image" alt="First Customer Service Meetup in Novi Sad Mingling" src="http://renderedtext.com/assets/images/blog/2018-10-31/customer-service-meetup-4.png" /></p>
<p>We’re looking forward to building the Customer Service community and meeting fellow
customer service enthusiasts again very soon!</p>
<p>If you’d like to keep up with the news about future Customer Service
meetups, <a href="https://www.meetup.com/Customer-Service-Meetup-Novi-Sad/">join our Customer Service Meetup group</a>, and follow <a href="https://twitter.com/renderedtext">@RenderedText</a> on Twitter.</p>
Launching Customer Service Meetup in Novi Sadhttp://renderedtext.com/blog/2018/09/12/launching-customer-service-meetup-in-novi-sad/2018-09-12T00:00:00+00:002018-09-12T00:00:00+00:00Marko Anastasov<p>On September 26, we’ll gather people interested in Customer Support and
Customer Success, exchange ideas, tips and tricks, share the good and the bad.
You will have a unique chance to listen to CS experts and learn from their
stories. <p>On September 26, we’ll gather people interested in Customer Support and
Customer Success, exchange ideas, tips and tricks, share the good and the bad.
You will have a unique chance to listen to CS experts and learn from their
stories. </p>
<p>To RSVP and stay in the loop, <a
href="https://www.meetup.com/Customer-Service-Meetup-Novi-Sad/">join the
meetup group</a>.</p>
Semaphore 2.0: Unleashing the full power of CI/CDhttp://renderedtext.com/blog/2018/07/31/semaphore-2-unleashing-the-full-power-of-ci-cd/2018-07-31T00:00:00+00:002018-07-31T00:00:00+00:00Marko Anastasov<p><a href="https://semaphoreci.com/blog/2018/07/25/semaphore-2-0.html">Last week we launched Semaphore
2.0</a>, our new
cloud-based continuous integration and delivery (CI/CD) product. Featuring
fully customizable pipelines and a whole new look, it represents the next step
in our mission to enable all developers to build great products at high
velocity. <p><a href="https://semaphoreci.com/blog/2018/07/25/semaphore-2-0.html">Last week we launched Semaphore
2.0</a>, our new
cloud-based continuous integration and delivery (CI/CD) product. Featuring
fully customizable pipelines and a whole new look, it represents the next step
in our mission to enable all developers to build great products at high
velocity. </p>
<p>Every year or so, hardware companies have the opportunity to design a new
device from scratch. In SaaS, continuous deployment allows us to deliver updates
to customers several times per day. So the default approach is to add new things
to the existing base. Reduction is so difficult for technological and social
reasons that it’s rarely done.</p>
<p>Six years after introducing Semaphore, we thought that we’d come up with a far
better product if we took everything we’ve learned along the way and designed
a new one without restrictions. If you ship code, we think you’re going to love it.</p>
<p><a href="https://semaphoreci.com/v2-is-coming">You can apply for an early invite today</a>.</p>
Photo: team retreat at Balatonhttp://renderedtext.com/blog/2018/07/02/photo-team-retreat-at-balaton/2018-07-02T00:00:00+00:002018-07-02T00:00:00+00:00Marko Anastasov<p>At the end of May the Rendered Text / Semaphore team went to a three-day retreat
at lake Balaton in Hungary. <p>At the end of May the Rendered Text / Semaphore team went to a three-day retreat
at lake Balaton in Hungary. </p>
<p><img class="full-size-image" alt="Rendered Text / Semaphore team in 2018" src="http://renderedtext.com/assets/images/team-photo-2018.jpg" /></p>
<p>In the past 18 months we’ve become an increasingly distributed and
international company. In that context, team retreats become an essential part
of operation. You can certainly perform the work and communicate with your
immediate coworkers remotely without any issues. But only through face to face
time we can create a deeper connection.</p>
<p>Balaton is a beautiful place. We visited at a point when the weather was just
right to spend all time outside, do yoga on the water on a paddle board, or
jump into the (huge) lake. And the tourist season hadn’t started yet, so
everything felt very relaxed and cozy. Good times.</p>
Who we're hiring, June 2018 editionhttp://renderedtext.com/blog/2018/06/05/who-were-hiring-june-2018-edition/2018-06-05T00:00:00+00:002018-06-05T00:00:00+00:00Marko Anastasov<p>It’s an exciting time to join Rendered Text as we’re in a transition on
multiple levels: <p>It’s an exciting time to join Rendered Text as we’re in a transition on
multiple levels: </p>
<ul>
<li>From office-based to a fully remote work environment. Right now a third of
us are working remotely from 7 countries.</li>
<li>From people usually wearing many hats to specialized teams with dedicated and autonomous leadership.</li>
<li>From scaling up a proven product to building new things.</li>
</ul>
<p>This is who we’re hiring at the moment to work on <a href="https://semaphoreci.com">Semaphore</a>:</p>
<ul>
<li><a href="https://renderedtext.workable.com/j/D09366E8FE">Customer Success Representative</a>: build strong relationships with our
customers and contribute to product improvements and revenue growth.</li>
<li><a href="https://renderedtext.workable.com/j/93F33B2421">Head of Marketing</a>: lead
strategy and execution, scale up the team, and take our marketing to
the next level.</li>
<li><a href="https://renderedtext.workable.com/j/4DC1575C00">Head of People
Operations</a>: ensure that
Rendered Text is always an environment in which smart, ambitious people can do
their best work and grow professionally.</li>
<li><a href="https://renderedtext.workable.com/j/8B3FA327E2">Technical Support
Engineer</a>: provide first-class
service and tech support to our customers (that is, awesome DevOps engineers
and developers across the world).</li>
</ul>
<p>All positions are remote, and because of time overlap we’re considering
candidates based in Europe.</p>
<p>If you see yourself in any of these roles, please get in touch. If you know
someone who’d be interested, send them the job page.</p>
<p>We also announce on Twitter —
<a href="https://twitter.com/renderedtext">@renderedtext</a> or
<a href="https://twitter.com/semaphoreci">@semaphoreci</a> — when we have a new job
opening, so make sure to follow us over there for real-time updates.</p>
Public speaking tip: one slide per minutehttp://renderedtext.com/blog/2018/05/30/public-speaking-tip-one-slide-per-minute/2018-05-30T00:00:00+00:002018-05-30T00:00:00+00:00Marko Anastasov<p><a href="https://twitter.com/bmarkons">Marko</a> spoke at the <a href="https://balkanruby.com">BalkanRuby
conference</a> last week about his experience working on
<a href="https://rubybench.org">Ruby Bench</a>. In an internal post on our message board: <p><a href="https://twitter.com/bmarkons">Marko</a> spoke at the <a href="https://balkanruby.com">BalkanRuby
conference</a> last week about his experience working on
<a href="https://rubybench.org">Ruby Bench</a>. In an internal post on our message board: </p>
<blockquote>
<p>At first, while preparing my slides for the talk, I wanted to go out there
with up to 7 slides for a 30-minute talk. I knew that I have enough to speak
about the project round and round. Darko advised me not to show up without a
minimum of 20 slides, because I would awkwardly finish my talk in less time
than allocated by organizers. Which is, yeah, awkward. [That] saved my ass. I
wasn’t actually aware how different it is when you speak to one person,
comparing to talking in front of an audience of unknown people 🙈. I had 20
slides prepared with a lot of points. These were really helpful to guide me
throughout the talk. You must have a lot of them.</p>
</blockquote>
Elixir meetup in Novi Sad on June 7, 2018http://renderedtext.com/blog/2018/05/29/elixir-meetup-novi-sad-june-7-2018/2018-05-29T00:00:00+00:002018-05-29T00:00:00+00:00Marko Anastasov<p>For all those who are using or interested in the <a href="https://elixir-lang.org/">Elixir programming
language</a>, we’re organizing the second Elixir meetup
in Novi Sad. The event is scheduled for June 7, 2018 at 18h in Startit
Centar, and is open for talks in any format. <p>For all those who are using or interested in the <a href="https://elixir-lang.org/">Elixir programming
language</a>, we’re organizing the second Elixir meetup
in Novi Sad. The event is scheduled for June 7, 2018 at 18h in Startit
Centar, and is open for talks in any format. </p>
<p><a href="https://www.meetup.com/meetup-group-GmJHDXhm/events/250834928/">View more information and RSVP on Meetup</a>.</p>
Rails Testing Handbookhttp://renderedtext.com/blog/2018/05/28/rails-testing-handbook/2018-05-28T00:00:00+00:002018-05-28T00:00:00+00:00Marko Anastasov<div class="jumbo-image-spacer">
<div class="jumbo-image-spacer">
<a href="https://semaphoreci.com/ebooks/rails-testing-handbook?utm_source=renderedtext&utm_medium=blog&utm_campaign=rails-testing-handbook">
<figure class="jumbo-image">
<img class="full-size-image" alt="Rails Testing Handbook" src="http://renderedtext.com/assets/images/blog/2018-05-28/rails-testing-handbook-cover.png" />
</figure>
</a>
</div>
</div>
<p class="description text-center">
A new ebook on building test-driven Rails apps with RSpec and Cucumber.
</p>
<p>At Rendered Text, we have a long history with Ruby on Rails. Checking the
<a href="/blog/archive">blog archive</a> reminds me that we published first posts about
working with Rails way back in 2009. <div class="jumbo-image-spacer">
<div class="jumbo-image-spacer">
<a href="https://semaphoreci.com/ebooks/rails-testing-handbook?utm_source=renderedtext&utm_medium=blog&utm_campaign=rails-testing-handbook">
<figure class="jumbo-image">
<img class="full-size-image" alt="Rails Testing Handbook" src="http://renderedtext.com/assets/images/blog/2018-05-28/rails-testing-handbook-cover.png" />
</figure>
</a>
</div>
</div>
<p class="description text-center">
A new ebook on building test-driven Rails apps with RSpec and Cucumber.
</p>
<p>At Rendered Text, we have a long history with Ruby on Rails. Checking the
<a href="/blog/archive">blog archive</a> reminds me that we published first posts about
working with Rails way back in 2009. </p>
<p>Many years and thousands of lines of code later, I’m proud to announce that
we’ve published our first ebook. It’s called
<a href="https://semaphoreci.com/ebooks/rails-testing-handbook?utm_source=renderedtext&utm_medium=blog&utm_campaign=rails-testing-handbook">Rails Testing Handbook</a> and it distills the essence of building Rails apps with
tests, doing continuous integration and collaborating via pull requests.
It’s the workflow which has served us well over the years, most notably in
creating and scaling <a href="https://semaphoreci.com">Semaphore</a> without losing our minds.</p>
<p>Early reader feedback has been overwhelmingly positive. Some lead developers
have shared that they got a few new tricks from it. Newcomers said that the
book has helped them finally understand behavior-driven development (BDD).</p>
<p>So if you’re working with Rails, I encourage you to <a href="https://semaphoreci.com/ebooks/rails-testing-handbook?utm_source=renderedtext&utm_medium=blog&utm_campaign=rails-testing-handbook">download the book</a> — it’s free! — check it out, share it with your friends and
send us any feedback you may have. Enjoy!</p>
Semaphore Winter '16 Hackathonhttp://renderedtext.com/blog/2017/01/24/semaphore-winter-hackathon/2017-01-24T00:00:00+00:002017-01-24T00:00:00+00:00Dunja Radulov<p>The end of each year is a time to make plans for the following year and get
inspired to work on new and exciting things in the year ahead. In December, we
decided to organize a <a href="https://semaphoreci.com">Semaphore</a> hackathon
for the entire company to celebrate the end of 2016 by getting creative.</p>
<p>People pitched their ideas and others voted with their feet by joining
the projects they were most interested in. We split into multidisciplinary
teams that had three days to capture new ideas and have fun making them
a reality. Keep reading to find out what are the projects we came up with,
what we learned working on them, and what are some of the outcomes of our
first internal hackathon. <p>The end of each year is a time to make plans for the following year and get
inspired to work on new and exciting things in the year ahead. In December, we
decided to organize a <a href="https://semaphoreci.com">Semaphore</a> hackathon
for the entire company to celebrate the end of 2016 by getting creative.</p>
<p>People pitched their ideas and others voted with their feet by joining
the projects they were most interested in. We split into multidisciplinary
teams that had three days to capture new ideas and have fun making them
a reality. Keep reading to find out what are the projects we came up with,
what we learned working on them, and what are some of the outcomes of our
first internal hackathon. </p>
<p><img class="full-size-image" alt="Semaphore 2016 hackathon at Rendered Text" src="http://renderedtext.com/assets/images/blog/2017-01-24/semaphore-winter-2016-hackathon.png" /></p>
<h2>Improving the Semaphore SSH session</h2>
<p><em>Team members:</em> Ervin, Igor, Marko, Milan, Milica and Sneha</p>
<p>The Semaphore SSH session proved to be a popular asset for debugging builds and
deployments. From the start, there were things we wanted to improve, but
the team was short on time, and these changes weren’t very high on our list of
priorities, so our team decided to work on some improvements during the
hackathon.</p>
<p>The most obvious thing we wanted to improve was the lack of contextual
information, e.g. the build which is currently checked out in the session and
time until completion. We decided to add a few extra touches which would provide
this information right off the bat. Another pain point we wanted to address is
copy-pasting the build commands into the SSH environment. The utility
addressing this shortcoming is soon to be released.</p>
<p><img class="full-size-image" alt="Improved SSH session on Semaphore" src="http://renderedtext.com/assets/images/blog/2017-01-24/semaphore-ssh-session.png" /></p>
<p>We played around with a few other ideas which didn’t see the daylight, but the
hackathon was a great team effort and bonding experience for everyone in the
team.</p>
<h2>Finding trends in support request messages</h2>
<p><em>Team members:</em> Milana, Marija, Filip, Nemanja and Jovan</p>
<p>Our team was interested in finding trends in support request messages sent by
our users. For this purpose, we collected a set of our messages from Intercom,
and applied various machine learning techniques to it.</p>
<p>We spent our hackathon time playing around with the messages, clustering them
based on topic using different algorithms and trying out sentiment analysis on
them. We mostly relied on Python and its rich machine learning libraries as our
tools.</p>
<p>After three days, we ended up with a prototype which tracks the rate of
occurrence of current topics and visualizes this with Kibana.
The hackathon provided us with a wonderful opportunity to step outside of our
everyday tasks and tools and develop ideas that otherwise might not have been
considered worth our time. Combining this with a mini-vacation-like
atmosphere, the entire event proved to be refreshing, fun, and a great prelude
to the upcoming holiday season.</p>
<h2>Making the TV great again</h2>
<p><em>Team members:</em> Marko, Nemanja, Nikola, Stefan and Misel</p>
<p>Our team looked around the office and asked ourselves, what is there that we can improve
and make great again? As it often turns out, you don’t need to look far. There
was a spare TV sitting turned off in the office lobby, so we decided to make it
show a dashboard that would be fun and useful for everyone.</p>
<p>The Semaphore TV now shows things like a photo from the place our latest
customer hails from, recent tweets to <a href="https://twitter.com/semaphoreci">@semaphoreci</a>,
and a world map of recently active users. Best of all, it plays a different
music theme every time we get a new customer.</p>
<p>On the tech side, we played with serverless architecture and implemented the
dashboard and all supporting endpoints as microservices running on AWS Lambda.
Recent support for running Express.js apps on Lambda has been very useful.
Overall, it was a really fun experience!</p>
<h2>Improving employee experience</h2>
<p><em>Team members:</em> Katarina, Milica, Filip and Marija</p>
<p>Our team had many ideas simming in their heads on what would help improve our
employee experience, so we decided to work on two different projects.</p>
<p>We wanted to explore different employee engagement tools for a
while now, so the hackathon presented the right opportunity to do so.
For the first project, we created a new Slack channel named ‘Humans and Bots’,
and picked three tools seemed most promising. We decided to test
drive Leo from the Office Vibe, Polly chat bot and Captain Feedback. Each tool
has different merits. We found the Polly to be the most engaging one.
Polly is currently a free tool, and it’s easy to use straight from the start.
It has predefined questions on ‘Team Happiness’, and you can choose the
frequency of questions asked, as well as set your answers to be completely
anonymous if you wish so.</p>
<p>The second project was to create a simple static site for our internal use with
interesting links for the team and a Google form questionnaire on team
happiness. This was a fun project to do, and it included some coding. The content
included were useful slideshares, interesting books to read, and links to events
to attend. All in all, the hackathon was a great learning experience and
a nice opportunity for teamwork.</p>
<h2>The path to TDD enlightenment</h2>
<p><em>Team members:</em> Nemanja, Tamara, Milica and Dunja</p>
<p>Since we had a multidisciplinary team including a developer, a designer and two
marketers/editors/writers, we decided to use our combined skills to create an
interactive experience (i.e. a game) that plays with the pitfalls of software
development and the true path of TDD.</p>
<p><img class="full-size-image" alt="The Path to TDD enlightenment game" src="http://renderedtext.com/assets/images/blog/2017-01-24/tdd-game.png" /></p>
<p>The game puts the player in the shoes of a developer chosen to lead a team
cleaning up a tricky project, an app left behind by a developer that’s rumoured to have
gone insane. The code is complex, unreadable and ridden with bugs, and the
deadline is tight, so the player needs to use TDD and common sense in order to
manage the chaos without spilling too many tears. Working on the game helped us
remember and better understand why testing and TDD matter, and allowed us to
get creative and have fun together as a team.</p>
<p>All in all, the hackathon was a fun experience during which we played with some
new ideas, bonded as a team, and got energized for a creative and fun year ahead
of us.</p>