Hiring guide for Timber Engineers

Timber Developer Hiring Guide

Timber is a computer programming language primarily designed for real-time embedded systems, with its roots tracing back to the Haskell functional programming language. It was developed by a team of researchers at Chalmers University of Technology in Sweden, aiming to provide high-level abstractions for structuring real-time systems. The language's key features include concurrent reactive objects and type-safe memory management, making it ideal for safety-critical applications. Timber's semantics are defined using an operational semantics approach which ensures predictability in system behavior. Its development and application have been documented extensively in various research papers published by the Chalmers University team.

Ask the right questions secure the right Timber talent among an increasingly shrinking pool of talent.

First 20 minutes

General Timber app knowledge and experience

The first 20 minutes of the interview should seek to understand the candidate's general background in Timber application development, including their experience with various programming languages, databases, and their approach to designing scalable and maintainable systems.

Can you explain what Timber is used for in Android?
Timber is a logging utility library in Android that provides a small, extensible, and easy-to-use API for logging. It is used to simplify logging and to help developers avoid common mistakes. It also provides advanced features such as log tree and exception 'pretty-printing'.
How would you initialize Timber in an Android application?
To initialize Timber, you need to plant a Tree instance. This is usually done in the onCreate() method of the Application class. For example: 'public void onCreate() { super.onCreate(); if (BuildConfig.DEBUG) { Timber.plant(new Timber.DebugTree()); } }'
What are the built-in Tree implementations provided by Timber?
Timber provides two built-in Tree implementations: DebugTree and ReleaseTree. DebugTree logs everything in debug builds and ReleaseTree logs nothing in release builds.
How would you create a custom Tree in Timber?
To create a custom Tree, you need to extend the Tree class and override its methods. For example, you could create a CrashReportingTree that logs exceptions to a crash reporting tool.
Can you describe the difference between Timber and Log in Android?
Timber and Log are both logging utilities in Android but they have some differences. Timber provides a simpler API and automatically infers the tag from the calling class. It also provides advanced features such as log tree and exception 'pretty-printing'. On the other hand, Log requires manual tag specification and doesn't provide these advanced features.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

What you’re looking for early on

Does the candidate have a deep understanding of Timber?
Has the candidate demonstrated problem-solving skills?
Is the candidate able to communicate effectively?
Does the candidate have experience with similar projects or tasks?

Next 20 minutes

Specific Timber development questions

The next 20 minutes of the interview should focus on the candidate's expertise with specific backend frameworks, their understanding of RESTful APIs, and their experience in handling data storage and retrieval efficiently.

How would you use Timber to log an exception?
To log an exception with Timber, you can use the e() method. For example: 'try { // some code } catch (Exception e) { Timber.e(e); }'
What are the advantages of using Timber over standard logging in Android?
Timber provides several advantages over standard logging in Android. It provides a simpler API, automatically infers the tag from the calling class, and provides advanced features such as log tree and exception 'pretty-printing'. It also helps to avoid common logging mistakes.
Can you describe a situation where you would use Timber's wtf() method?
The wtf() method in Timber stands for 'What a Terrible Failure' and is used to log severe errors that should never happen. For example, you might use it to log an unexpected null pointer exception or an illegal argument exception.
How would you use Timber to only log messages in debug builds?
To only log messages in debug builds, you can plant a DebugTree in the onCreate() method of the Application class. For example: 'public void onCreate() { super.onCreate(); if (BuildConfig.DEBUG) { Timber.plant(new Timber.DebugTree()); } }'
What are the different log levels in Timber and how would you use them?
Timber provides five log levels: debug, error, info, verbose, and warn. Each level has a corresponding method in the Timber API. For example, to log a debug message, you would use the d() method, and to log an error message, you would use the e() method.
The hiring guide has been successfully sent to your email address.
Oops! Something went wrong while submitting the form.

The ideal back-end app developer

What you’re looking to see on the Timber engineer at this point.

At this point, a skilled Timber engineer should demonstrate strong problem-solving abilities, proficiency in Timber programming language, and knowledge of software development methodologies. Red flags include lack of hands-on experience, inability to articulate complex concepts, or unfamiliarity with standard coding practices.

Digging deeper

Code questions

These will help you see the candidate's real-world development capabilities with Timber.

What does the following Timber code do?
Timber.plant(new Timber.DebugTree());
This code plants a new DebugTree in Timber. It means that Timber will log messages and its stack trace when the application is in debug mode.
What will be the output of the following Timber code?
Timber.tag("MyTag").d("Hello, World!");
This code will output a debug log message 'Hello, World!' with the tag 'MyTag'.
What does the following Timber code do?
List logs = new ArrayList<>();
Timber.plant(new Timber.Tree() {
@Override
protected void log(int priority, String tag, String message, Throwable t) {
logs.add(message);
}
});
This code plants a new custom Tree in Timber. Every time a log message is sent to Timber, it will be added to the 'logs' list. This is useful for collecting and analyzing log data.
What does the following Timber code do?
Timber.plant(new Timber.DebugTree() {
@Override
protected boolean isLoggable(String tag, int priority) {
return priority == Log.ERROR;
}
});
This code plants a new DebugTree in Timber that only logs error messages. It overrides the 'isLoggable' method to only return true when the log priority is Log.ERROR.

Wrap-up questions

Final candidate for Timber Developer role questions

The final few questions should evaluate the candidate's teamwork, communication, and problem-solving skills. Additionally, assess their knowledge of microservices architecture, serverless computing, and how they handle Timber application deployments. Inquire about their experience in handling system failures and their approach to debugging and troubleshooting.

How would you use Timber to log a message with multiple arguments?
To log a message with multiple arguments in Timber, you can use the String format syntax. For example: 'Timber.d("%s %s", firstName, lastName);'
Can you explain how Timber's log tree works?
Timber's log tree is a mechanism that allows you to control how logs are handled. When you plant a tree, it gets added to the log tree. Then, whenever you log a message, it gets sent to all the trees in the log tree. This allows you to do things like only log messages in debug builds, or log exceptions to a crash reporting tool.
How would you use Timber to log a message without a tag?
In Timber, the tag is automatically inferred from the calling class, so you don't need to specify it. To log a message without a tag, you can simply call the appropriate method with the message. For example: 'Timber.d("Hello, world!");'

Timber application related

Product Perfect's Timber development capabilities

Beyond hiring for your Timber engineering team, you may be in the market for additional help. Product Perfect provides seasoned expertise in Timber projects, and can engage in multiple capacities.