Apr 28 2016
In this post I will introduce to you a recently released version of a well known library for consuming RESTful services — Retrofit2.
Even though it is mainly targeted at Android platform it works very well on the “server” Java. Its lightness and low garbage generation
overhead make it an interesting option if one does not like existing solutions (like Jersey Client,
or Spring’s RestTemplate). I will also
show how to configure it properly and fully utilize its great RxJava compatibility.
Mar 30 2016
Recently our team has been tasked to write a very fast cache service. The goal was pretty clear but possible to achieve in many ways.
Finally we decided to try something new and implement the service in Go.
We have described how we did it and what values come from that.
Mar 22 2016
In the beginning I would like to stress that this is not yet another article about Minimum Viable Product (MVP)
mechanics. For theory and examples of its use in practice, please refer to the great article by Andrzej Winnicki. What made me share my thoughts on MVP is what
I consider a prerequisite to start working with this method. Moreover, I also recognised this prerequisite as the
biggest obstacle which is stopping many enthusiasts from fully understanding it.
Mar 21 2016
Curiosity drives progress. There are already tens of presentations about Spotify on the Internet
but we wanted to see how the work looks like there with our own eyes. Here are some thoughts after
our visit to Spotify’s headquarters.
Mar 14 2016
This is a story about how professional approach to coding can save you a lot of troubles. It is a story about passion for coding and how
it makes our products great. It is a story about carrying out an IT project by one of Allegro scrum teams as a fine example supported by
a set of case studies. Read it to inspire yourself how some of the issues can be dealt with.
Mar 12 2016
Microservices
are now the mainstream approach for scalable systems architecture.
There is little controversy when we are talking about designing backend services.
Well-behaved backend microservice should cover one
BoundedContext
and communicate over the REST API.
Things get complicated when we need to
use microservices as building blocks for a frontend solution.
How to build a consistent website or a mobile app
using tens or sometimes hundreds of microservices?
Mar 2 2016
If you always search for ways to increase code quality and would like to encourage everyone in your
project to keep high test code coverage all the time, then Codecov may be another
step in your journey.
Feb 16 2016
Some books on IT topics become outdated right after they are published while others stand the test of time.
One of the latter is The Pragmatic Programmer. From Journeyman to Master by
Andrew Hunt and David Thomas.
Feb 8 2016
Moving Allegro’s services and infrastructure from its main Data Center (DC) was considered
a huge endeavour fraught with high risk from the very start. This particular Data Center, known as DC2, was situated in Poznań, Poland.
It was our first genuine Data Center and back in 2007, when we moved in there, it was the state—of—the—art DC in Poland.
For a couple of years our infrastructure was growing along with the company and the number of devices grew up to 2,000 filling 90
rack cabinets in 2014. DC was used by Allegro core sites such as allegro.pl, aukro.ua
and aukro.cz as well as other Naspers-owned Polish operations like: payu.pl,
olx.pl, ceneo.pl, otomoto.pl, otodom.pl.
To make the story simpler, Allegro synonym is used to name them all.
Jan 8 2016
Microservices architecture has been given a lot of attention in recent years.
You can find many articles defining what it is and explaining the difference
between microservices and monolithic applications. Unfortunately, the dark side
of the solution is rarely mentioned — such as its level of complexity and how difficult it is to
design it correctly.
Nevertheless, I would like to talk about my experience with microservices
architecture. I hope that this article will help you avoid the mistakes I made
and save time.
Dec 10 2015
Building a Minimum Viable Product (MVP) is a method of developing new products
by validating hypotheses using feedback from real users as soon as possible. This is supposed to reduce risk and to ensure a good
return on investment.
It is most often used together with Agile development methodologies.
But there’s no such thing as a free lunch and while it reduces some types of risk, MVP also introduces some risks of its own.
Nov 25 2015
In the team that develops Allegro Recommendation Platform we weren’t happy with our integration tests. Long setup and
assertions blocks resulted in a low signal—to—noise ratio and poor readability. These tests were also full of ad hoc
variables like 1, ABC, OK or NOK, which caused that it was hard to find a connection between input and output
data. Moreover, any change in an API caused changes in many tests.
Nov 16 2015
Whether you are forming a new agile team or mixing people in an already existing team you start somewhat afresh. In an existing team the balance and group
dynamics changes, in a new team people are experiencing each other for the first time and checking what the boundaries are. I don’t want to get into details
of what can possibly happen — it’s best if you dig into works of Bruce Tuckman and his four-stage model or Gustave Le Bon’s
“The Crowd”. The former indicated that the team goes through the stages of Forming - Storming -
Norming - Performing. I would like to concentrate on the very initial stage of “Forming” the team in the first weeks of it’s existence.
Nov 10 2015
At Allegro, you can sell items at a fixed price (buy now) or at auction.
Auctions are still a popular sales format, especially in categories such as antiques and art or clothing.
So far, buyers fighting for an item had to refresh the web page in the last seconds of the auction to verify that the offer had not been overbid.
This made bidding difficult and less fun. Last year real time bidding process for all mobile users was introduced.
In this article I want to show how to create a simple application that provides real-time bidding, based on Allegro auctions.
We will use WebSockets, SockJS
and the latest, third version of Vert.x.
We will create a frontend for fast bidding that communicates with a microservice written in Java 8 and based on Vert.x.
Oct 16 2015
I certainly do not recommend that you play poker or blackjack at work. However, there are situations where both you as an individual
and your company as a whole must gamble. And the stakes are often high.
Oct 5 2015
In this article I will show you that if you want to implement good logging into your application then you should have
a strong knowledge of logging API, spend some time considering what and when to log and last but not least: remember that
logging is a cost paid in your application’s responsiveness.
Sep 24 2015
Today, in an age of great popularity of test automation, we can observe a growing number of different frameworks which
allow us to write scripts and programs that simulate human actions performed on the website under test. The most popular
solution is Selenium WebDriver framework, which is compatible with the majority of common languages.
Broad compatibility is a big advantage of Selenium especially in cases when we have to write some tests integrated to
our application project, because no matter in which language we write the application, Selenium probably has an API for
that language too. But there are also situations, like writing a standalone test suite, when we can decide which
technology we’d most like to use. Taking into consideration this case, let me introduce to you a short
comparison of three JDK-based technologies:
Sep 16 2015
This is a story about a Team working in Scrum that wanted to turn to Kanban and ended up, deliberately, working in something resembling
Scrum-ban. Scrum-ban basics can be found in Wikipedia. We did not follow all of them.
Sep 8 2015
Switching from monolith to microservices requires a very solid technical ecosystem. One of the most crucial subsystems is
monitoring. But for monitoring to work, you need data to monitor. At Allegro, we decided to use
Graphite as metrics storage and to build our monitoring ecosystem around tools
that integrate with it.
Aug 27 2015
All over the Internet there are code snippets that show how to make a blur effect on Android. But if you want to
introduce blur as a part of your app design and use it as an effect to hide content under dialogs, drawer etc. there is
no ready solution for all UI components. That’s why I wrote the Fogger library.
Aug 24 2015
Consider you are an Android application developer. You created a mobile application for your website and you would like to enable your
users to browse content of your website using a mobile app. It’s easy if a website uses RESTful guidelines for creating URLs.
Problem comes when a website uses SEO friendly URLs. Handling such links is hard because regular expression mechanism in Android manifest is flawed.
Aug 20 2015
Development is an immanent part of every person’s life. Evolution-wise, whoever fails to develop, dies.
Aug 6 2015
Today we would like to share our experience with Apache Spark,
and how to deal with one of the most annoying aspects of the framework.
This article assumes basic knowledge of Apache Spark.
If you feel uncomfortable with the basics of Spark, we recommend you to participate in an excellent
online course
prepared by the creators of Spark.
Jul 27 2015
At Allegro we try to take advantage of all opportunities to learn something new and to share our knowledge with others.
So far, we’ve held a number of internal conferences and meetings, and you may have seen our employees talk at JUGs and
conferences such as Devoxx PL or Confitura.
Jul 9 2015
SOA (Service Oriented Architecture) as a modern approach to build distributed enterprise applications gives us many benefits,
including resiliency and fault-tolerance. On the other hand, there are many new kinds of SOA-specific faults,
like publishing, discovery, composition, binding or execution faults (as stated in
A Fault Taxonomy for Service-Oriented Architecture). Error handling is one of the most
important things to have services right designed and implemented
(see article Error Handling Considerations in SOA Analysis & Design).
In this article, I want to focus only on a small aspect of this broad subject: unexpected service behaviors which,
if not properly handled by the client, can lead to application inaccessibility.