DevOps Engineer (m/f) for the worlds favorite online scheduling tool in Berlin, Deutschland

Employer: Doodle

Location: Berlin, Deutschland

Visa Sponsore Paid Relocation

Salary: €50k - 60k

Who we are:

Doodle is the world’s favorite online scheduling tool with nearly 30 million monthly users around the globe. People use Doodle to plan everything from dinners with friends and family to business meetings. We are a fast-growing team of 40 passionate engineers, designers, product managers and salespeople spread out in Belgrade, Berlin, Tel Aviv and Zurich.

You’ll be joining our newly formed cross-functional Cross-team based in our Berlin office. We want to grow our user base by partnering with the largest chat platforms in the world. You and your team will bring the best possible Doodle experience into mobile chat applications like Facebook Messenger, Viber and others.

We are specifically looking for:

  • 3+ years of experience as a DevOps
  • Strong knowledge of Linux administration and scripting
  • Ideally knowledge/Interest in microservices architectures and container orchestration frameworks, such as Kubernetes or Mesos.
  • Familiarity with cloud computing infrastructure such as AWS, GCP or Azure
  • Experience with configuration management tools such as Ansible, Salt, Terraform or Puppet.
  • Able to solve problems individually and thoroughly: you like think end-to-end of the consequences and move across technologies to solve potential issues
  • A great team player that communicates proactively
  • Golang experience is a huge plus

Whom you’ll be working with:

We’re a fun bunch of people and we have an open, casual and inclusive atmosphere, where everyone encourages each other to share their opinions, interests and weird hobbies. You’ll be working with different people in the company, sometimes across offices.

In Berlin we’ve been working on the mobile apps for the last three years and have recently started to diversify into other areas. From our office you can see the TV Tower and it’s a pretty good place if you’re into S-Bahn spotting. Every couple of weeks after work we take over the office to play board games. Dogs are welcome and occasionally one of us brings theirs.

We are currently working with these technologies:

  • Backend: Java, Python, Node.js
  • Testing: JUnit, JMockit
  • Native: iOS/macOS, Android, Chrome extensions
  • Infrastructure: Docker, Kubernetes, Helm, Jenkins, AWS, Prometheus, Grafana
  • Data: MongoDB, PostgreSQL
  • Process: JIRA, Kanban, Scrum, CI/CD

(Don’t worry if you only know some of these, we’ve all had to learn them on the job and will help you getting up to speed, gently).

What we offer:

  • Top-spec hardware: you choose your setup
  • Flexible working hours, home office
  • Personal budget for educational courses and conferences
  • Make an impact for millions of users
  • A friendly, passionate and international working environment
  • Opportunity to travel to Belgrade, Tel Aviv and Zurich. This includes a once per year budget to do so, even if there is no direct business reason!

So, get in touch!

Doodle provides equal employment opportunities (EEO) to all employees and applicants for employment without regard to race, color, religion, sex, national origin, age, disability or genetics. We believe that a diverse team makes for better products and a better workplace. Our team comes from all over the world (representing 20 nationalities!) and from varied backgrounds. Our current team of 41 has 10 women. This is not enough, and we’d particularly love to hear from women and other groups underrepresented in the tech industry, but obviously we will consider all strong applicants!

Required Skills:

amazon-web-services java linux go kubernetes sysadmin

Similar Jobs

Whoops! There was an error.
ErrorException (E_WARNING)
file_put_contents(): Only 0 of 254 bytes written, possibly out of free disk space ErrorException thrown with message "file_put_contents(): Only 0 of 254 bytes written, possibly out of free disk space" Stacktrace: #7 ErrorException in /home/qdzpnghb/job2way-laravel/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122 #6 file_put_contents in /home/qdzpnghb/job2way-laravel/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122 #5 Illuminate\Filesystem\Filesystem:put in /home/qdzpnghb/job2way-laravel/vendor/laravel/framework/src/Illuminate/Session/FileSessionHandler.php:83 #4 Illuminate\Session\FileSessionHandler:write in /home/qdzpnghb/job2way-laravel/vendor/laravel/framework/src/Illuminate/Session/Store.php:128 #3 Illuminate\Session\Store:save in /home/qdzpnghb/job2way-laravel/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:87 #2 Illuminate\Session\Middleware\StartSession:terminate in /home/qdzpnghb/job2way-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:218 #1 Illuminate\Foundation\Http\Kernel:terminateMiddleware in /home/qdzpnghb/job2way-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:189 #0 Illuminate\Foundation\Http\Kernel:terminate in /home/qdzpnghb/job2way-laravel/public/index.php:60
7
ErrorException
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Filesystem
/
Filesystem.php
122
6
file_put_contents
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Filesystem
/
Filesystem.php
122
5
Illuminate
\
Filesystem
\
Filesystem
put
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Session
/
FileSessionHandler.php
83
4
Illuminate
\
Session
\
FileSessionHandler
write
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Session
/
Store.php
128
3
Illuminate
\
Session
\
Store
save
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Session
/
Middleware
/
StartSession.php
87
2
Illuminate
\
Session
\
Middleware
\
StartSession
terminate
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Foundation
/
Http
/
Kernel.php
218
1
Illuminate
\
Foundation
\
Http
\
Kernel
terminateMiddleware
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Foundation
/
Http
/
Kernel.php
189
0
Illuminate
\
Foundation
\
Http
\
Kernel
terminate
/
public
/
index.php
60
/
home
/
qdzpnghb
/
job2way-laravel
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Filesystem
/
Filesystem.php
     *
     * @param  string  $path
     * @return string
     */
    public function hash($path)
    {
        return md5_file($path);
    }
 
    /**
     * Write the contents of a file.
     *
     * @param  string  $path
     * @param  string  $contents
     * @param  bool  $lock
     * @return int
     */
    public function put($path, $contents, $lock = false)
    {
        return file_put_contents($path, $contents, $lock ? LOCK_EX : 0);
    }
 
    /**
     * Prepend to a file.
     *
     * @param  string  $path
     * @param  string  $data
     * @return int
     */
    public function prepend($path, $data)
    {
        if ($this->exists($path)) {
            return $this->put($path, $data.$this->get($path));
        }
 
        return $this->put($path, $data);
    }
 
    /**
     * Append to a file.
Arguments
  1. "file_put_contents(): Only 0 of 254 bytes written, possibly out of free disk space"
    
/
home
/
qdzpnghb
/
job2way-laravel
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Filesystem
/
Filesystem.php
     *
     * @param  string  $path
     * @return string
     */
    public function hash($path)
    {
        return md5_file($path);
    }
 
    /**
     * Write the contents of a file.
     *
     * @param  string  $path
     * @param  string  $contents
     * @param  bool  $lock
     * @return int
     */
    public function put($path, $contents, $lock = false)
    {
        return file_put_contents($path, $contents, $lock ? LOCK_EX : 0);
    }
 
    /**
     * Prepend to a file.
     *
     * @param  string  $path
     * @param  string  $data
     * @return int
     */
    public function prepend($path, $data)
    {
        if ($this->exists($path)) {
            return $this->put($path, $data.$this->get($path));
        }
 
        return $this->put($path, $data);
    }
 
    /**
     * Append to a file.
Arguments
  1. "/home/qdzpnghb/job2way-laravel/storage/framework/sessions/HcUmsF5xtCufkmBmSawflHP73dGjHk1sedh9HNef"
    
  2. "a:3:{s:6:"_token";s:40:"cNzLmJr6EZBnPK54ihGGOeI3Tigpqrr0kA8pK8Ce";s:9:"_previous";a:1:{s:3:"url";s:96:"http://job2way.com/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}"
    
  3. 2
    
/
home
/
qdzpnghb
/
job2way-laravel
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Session
/
FileSessionHandler.php
    /**
     * {@inheritdoc}
     */
    public function read($sessionId)
    {
        if ($this->files->exists($path = $this->path.'/'.$sessionId)) {
            if (filemtime($path) >= Carbon::now()->subMinutes($this->minutes)->getTimestamp()) {
                return $this->files->get($path, true);
            }
        }
 
        return '';
    }
 
    /**
     * {@inheritdoc}
     */
    public function write($sessionId, $data)
    {
        $this->files->put($this->path.'/'.$sessionId, $data, true);
 
        return true;
    }
 
    /**
     * {@inheritdoc}
     */
    public function destroy($sessionId)
    {
        $this->files->delete($this->path.'/'.$sessionId);
 
        return true;
    }
 
    /**
     * {@inheritdoc}
     */
    public function gc($lifetime)
    {
        $files = Finder::create()
Arguments
  1. "/home/qdzpnghb/job2way-laravel/storage/framework/sessions/HcUmsF5xtCufkmBmSawflHP73dGjHk1sedh9HNef"
    
  2. "a:3:{s:6:"_token";s:40:"cNzLmJr6EZBnPK54ihGGOeI3Tigpqrr0kA8pK8Ce";s:9:"_previous";a:1:{s:3:"url";s:96:"http://job2way.com/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}"
    
  3. true
    
/
home
/
qdzpnghb
/
job2way-laravel
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Session
/
Store.php
     *
     * @param  string  $data
     * @return string
     */
    protected function prepareForUnserialize($data)
    {
        return $data;
    }
 
    /**
     * Save the session data to storage.
     *
     * @return bool
     */
    public function save()
    {
        $this->ageFlashData();
 
        $this->handler->write($this->getId(), $this->prepareForStorage(
            serialize($this->attributes)
        ));
 
        $this->started = false;
    }
 
    /**
     * Prepare the serialized session data for storage.
     *
     * @param  string  $data
     * @return string
     */
    protected function prepareForStorage($data)
    {
        return $data;
    }
 
    /**
     * Age the flash data for the session.
     *
     * @return void
Arguments
  1. "HcUmsF5xtCufkmBmSawflHP73dGjHk1sedh9HNef"
    
  2. "a:3:{s:6:"_token";s:40:"cNzLmJr6EZBnPK54ihGGOeI3Tigpqrr0kA8pK8Ce";s:9:"_previous";a:1:{s:3:"url";s:96:"http://job2way.com/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so";}s:6:"_flash";a:2:{s:3:"old";a:0:{}s:3:"new";a:0:{}}}"
    
/
home
/
qdzpnghb
/
job2way-laravel
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Session
/
Middleware
/
StartSession.php
        if ($this->sessionConfigured()) {
            $this->storeCurrentUrl($request, $session);
 
            $this->addCookieToResponse($response, $session);
        }
 
        return $response;
    }
 
    /**
     * Perform any final actions for the request lifecycle.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Symfony\Component\HttpFoundation\Response  $response
     * @return void
     */
    public function terminate($request, $response)
    {
        if ($this->sessionHandled && $this->sessionConfigured() && ! $this->usingCookieSessions()) {
            $this->manager->driver()->save();
        }
    }
 
    /**
     * Start the session for the given request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Contracts\Session\Session
     */
    protected function startSession(Request $request)
    {
        return tap($this->getSession($request), function ($session) use ($request) {
            $session->setRequestOnHandler($request);
 
            $session->start();
        });
    }
 
    /**
     * Get the session implementation from the manager.
/
home
/
qdzpnghb
/
job2way-laravel
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Foundation
/
Http
/
Kernel.php
     * @return void
     */
    protected function terminateMiddleware($request, $response)
    {
        $middlewares = $this->app->shouldSkipMiddleware() ? [] : array_merge(
            $this->gatherRouteMiddleware($request),
            $this->middleware
        );
 
        foreach ($middlewares as $middleware) {
            if (! is_string($middleware)) {
                continue;
            }
 
            list($name) = $this->parseMiddleware($middleware);
 
            $instance = $this->app->make($name);
 
            if (method_exists($instance, 'terminate')) {
                $instance->terminate($request, $response);
            }
        }
    }
 
    /**
     * Gather the route middleware for the given request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    protected function gatherRouteMiddleware($request)
    {
        if ($route = $request->route()) {
            return $this->router->gatherRouteMiddleware($route);
        }
 
        return [];
    }
 
    /**
Arguments
  1. Request {
      #json: null
      #convertedFiles: []
      #userResolver: Closure {
        class: "Illuminate\Auth\AuthServiceProvider"
        this: AuthServiceProvider { …}
        parameters: {
          $guard: {
            default: null
          }
        }
        use: {
          $app: Application { …}
        }
      }
      #routeResolver: Closure {
        class: "Illuminate\Routing\Router"
        this: Router { …}
        use: {
          $route: Route { …}
        }
      }
      +attributes: ParameterBag {}
      +request: ParameterBag {#1}
      +query: ParameterBag {#1}
      +server: ServerBag {}
      +files: FileBag {}
      +cookies: ParameterBag {}
      +headers: HeaderBag {}
      #content: null
      #languages: null
      #charsets: null
      #encodings: null
      #acceptableContentTypes: array:4 [
        0 => "text/html"
        1 => "application/xhtml+xml"
        2 => "application/xml"
        3 => "*/*"
      ]
      #pathInfo: "/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so"
      #requestUri: "/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so"
      #baseUrl: ""
      #basePath: null
      #method: "GET"
      #format: null
      #session: Store {}
      #locale: null
      #defaultLocale: "en"
      -isHostValid: true
      -isForwardedValid: true
      basePath: ""
      format: "html"
    }
    
  2. Response {}
    
/
home
/
qdzpnghb
/
job2way-laravel
/
vendor
/
laravel
/
framework
/
src
/
Illuminate
/
Foundation
/
Http
/
Kernel.php
     */
    protected function dispatchToRouter()
    {
        return function ($request) {
            $this->app->instance('request', $request);
 
            return $this->router->dispatch($request);
        };
    }
 
    /**
     * Call the terminate method on any terminable middleware.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Http\Response  $response
     * @return void
     */
    public function terminate($request, $response)
    {
        $this->terminateMiddleware($request, $response);
 
        $this->app->terminate();
    }
 
    /**
     * Call the terminate method on any terminable middleware.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Http\Response  $response
     * @return void
     */
    protected function terminateMiddleware($request, $response)
    {
        $middlewares = $this->app->shouldSkipMiddleware() ? [] : array_merge(
            $this->gatherRouteMiddleware($request),
            $this->middleware
        );
 
        foreach ($middlewares as $middleware) {
            if (! is_string($middleware)) {
Arguments
  1. Request {
      #json: null
      #convertedFiles: []
      #userResolver: Closure {
        class: "Illuminate\Auth\AuthServiceProvider"
        this: AuthServiceProvider { …}
        parameters: {
          $guard: {
            default: null
          }
        }
        use: {
          $app: Application { …}
        }
      }
      #routeResolver: Closure {
        class: "Illuminate\Routing\Router"
        this: Router { …}
        use: {
          $route: Route { …}
        }
      }
      +attributes: ParameterBag {}
      +request: ParameterBag {#1}
      +query: ParameterBag {#1}
      +server: ServerBag {}
      +files: FileBag {}
      +cookies: ParameterBag {}
      +headers: HeaderBag {}
      #content: null
      #languages: null
      #charsets: null
      #encodings: null
      #acceptableContentTypes: array:4 [
        0 => "text/html"
        1 => "application/xhtml+xml"
        2 => "application/xml"
        3 => "*/*"
      ]
      #pathInfo: "/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so"
      #requestUri: "/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so"
      #baseUrl: ""
      #basePath: null
      #method: "GET"
      #format: null
      #session: Store {}
      #locale: null
      #defaultLocale: "en"
      -isHostValid: true
      -isForwardedValid: true
      basePath: ""
      format: "html"
    }
    
  2. Response {}
    
/
home
/
qdzpnghb
/
job2way-laravel
/
public
/
index.php
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/
 
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
 
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);
 
$response->send();
 
$kernel->terminate($request, $response);
 
Arguments
  1. Request {
      #json: null
      #convertedFiles: []
      #userResolver: Closure {
        class: "Illuminate\Auth\AuthServiceProvider"
        this: AuthServiceProvider { …}
        parameters: {
          $guard: {
            default: null
          }
        }
        use: {
          $app: Application { …}
        }
      }
      #routeResolver: Closure {
        class: "Illuminate\Routing\Router"
        this: Router { …}
        use: {
          $route: Route { …}
        }
      }
      +attributes: ParameterBag {}
      +request: ParameterBag {#1}
      +query: ParameterBag {#1}
      +server: ServerBag {}
      +files: FileBag {}
      +cookies: ParameterBag {}
      +headers: HeaderBag {}
      #content: null
      #languages: null
      #charsets: null
      #encodings: null
      #acceptableContentTypes: array:4 [
        0 => "text/html"
        1 => "application/xhtml+xml"
        2 => "application/xml"
        3 => "*/*"
      ]
      #pathInfo: "/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so"
      #requestUri: "/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so"
      #baseUrl: ""
      #basePath: null
      #method: "GET"
      #format: null
      #session: Store {}
      #locale: null
      #defaultLocale: "en"
      -isHostValid: true
      -isForwardedValid: true
      basePath: ""
      format: "html"
    }
    
  2. Response {}
    

Environment & details:

empty
empty
empty
empty
empty
Key Value
LSPHP_ENABLE_USER_INI
"on"
PATH
"/usr/local/bin:/usr/bin:/bin"
TEMP
"/tmp"
TMP
"/tmp"
TMPDIR
"/tmp"
PWD
"/"
HTTP_ACCEPT
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
HTTP_ACCEPT_ENCODING
"gzip"
CONTENT_LENGTH
"0"
HTTP_HOST
"job2way.com"
HTTP_USER_AGENT
"CCBot/2.0 (https://commoncrawl.org/faq/)"
HTTP_IF_MODIFIED_SINCE
"Tue, 16 Oct 2018 17:00:10 GMT"
HTTP_X_FORWARDED_FOR
"52.91.245.237"
REDIRECT_HTTPS
"off"
REDIRECT_SERVER_PORT
"80"
REDIRECT_UNIQUE_ID
"XBQNoJTr4yXwMq151bODKgAAAY8"
REDIRECT_STATUS
"200"
HTTPS
"off"
SERVER_PORT
"80"
UNIQUE_ID
"XBQNoJTr4yXwMq151bODKgAAAY8"
SERVER_SIGNATURE
""
SERVER_SOFTWARE
"Apache"
SERVER_NAME
"job2way.com"
SERVER_ADDR
"198.54.115.108"
REMOTE_ADDR
"52.91.245.237"
DOCUMENT_ROOT
"/home/qdzpnghb/public_html"
REQUEST_SCHEME
"http"
CONTEXT_PREFIX
""
CONTEXT_DOCUMENT_ROOT
"/home/qdzpnghb/public_html"
SERVER_ADMIN
"webmaster@job2way.com"
SCRIPT_FILENAME
"/home/qdzpnghb/public_html/index.php"
REMOTE_PORT
"33158"
REDIRECT_URL
"/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so"
SERVER_PROTOCOL
"HTTP/1.1"
REQUEST_METHOD
"GET"
QUERY_STRING
""
REQUEST_URI
"/jobs/devops-engineer-mf-for-the-worlds-favorite-online-scheduling-tool-5868so"
SCRIPT_NAME
"/index.php"
PHP_SELF
"/index.php"
REQUEST_TIME_FLOAT
1544818080.925
REQUEST_TIME
1544818080
Key Value
LSPHP_ENABLE_USER_INI
"on"
PATH
"/usr/local/bin:/usr/bin:/bin"
TEMP
"/tmp"
TMP
"/tmp"
TMPDIR
"/tmp"
PWD
"/"
0. Whoops\Handler\PrettyPageHandler