Questions from interviews

I'v been asked numerous questions about myself during recruitment processes. I believe it will force me to improve the quality of the answers to publish them. I've added a few myself.

About yourself, in less than 256 chars.

Linguist turned programmer, from Welsh through Esperanto to Python, I am interested in all languages, human or programming. Now studying Natural Language Processing, used to deliver large-scale translation mechanisms in the retail industry.

About yourself, long.

I never planned to be a programmer like everyone in my high school and instead studied linguistics. It turned out that there were linguistic problems I could solve using programming so I taught myself to code. I went into professional python development five years ago and worked in several companies trying to master whatever skills were required for the projects at hand. I still find it interesting, challenging and useful. I also found mentoring and sharing my programming knowledge a fulfilling way of spending time. My last job was for an international company in the Netherlands which made me decide to seek a greater challenge and find a remote position.

What's the most amazing application you've built?

On my own, this would be kinro

An app to visualise my work patterns. It helped my improve my discipline by significant and quantifiable percent. It reduced work stress and let me focus on job at hand better. Also, designing and implementing complete project from scratch is an interesting challenge that programmers rarely get to do at work.

What do you look for in a company (e.g., Culture)?

What types of projects would you love to work on?

Why are you applying for this role?

You have an interesting, challenging and useful product, sounds like a place where one can grow. I'm sure I'd be surrounded with people I can learn from and give back to. I prefer working remotely, have learned how to do that and prefer companies that have tackled issues from this kind of work, you being fully remote must have solved such challenges which provides for good work atmosphere.

This role is perfect for Python developers who wish to become Full Stack Developers. How do you feel about this?

Happy and willing. I'm a typical backend guy with some front-end experience, I avoided this realm waiting for it to mature (I did battles with IE6 compatibility in my times and could spend that time in fancier ways :)). I guess it's mature enough with Typescript/ECMA6, I'm mature enough.

What have you learned in the last year and what would you like to learn next?

Next year: Focus on algorithmics with some math. Learn whichever database I'll be working with in-depth, preferably PostgreSQL, become an expert.

If you wanted to create a simple version of the Hotjar recordings feature, how would you do this? Explain how you would do this in as much detail as possible.

First, we need to acknowledge that actual recording of the screen is not possible, we only have access to DOM events and will need to re-create the user experience seen through his eyes blindly.

DOM events will need to be captured and stored and then re-drawn upon a sufficiently compressed video (say H.264) obtained by using a real browser engine like Webkit. The events are of two-kinds (at least), mouse movements which need to be probed at efficient interval and interactions like clicks, form entry, page scrolls and such like which need to be stored. These two event series can be stored indendently I guess. This allows tinkering with probing of the mouse movement probing.

Next step is replaying the experience. A JS library could be designed that can take such timeseries and replays it, visualizing the events and what happens in between them (mouse routes). A designated service could spawn a browser with said library enabled on an X server and capture the screen producing the final video using standard techniques.

There are many details I don't want to go into in detail: Capturing keystrokes in and out of forms, navigating away to a subsite (capture script reloads and we need to identify such sessions as one and glue such chunks into one video). I have a feeling that noticing changes in DOM is very difficult as well - a track of DOM diffs is non trivial.

I'm sure this is a much more complex problem and my naive approach would just cost too much, I especially worry about the storage, large sites where users spend minutes probed many times over during a campaign on a large sample of users.

Code Test: Given an array of ints, return True if the sequence.. 1, 3, 4 .. appears in the array somewhere. Please write your Python code in a secret gist (https://gist.github.com/) and paste the URL below.

https://gist.github.com/bartekbrak/a99eda9d5239f70fd4a607b7b01e8a7a

What are the most important requirements for a small team of developers to work smoothly together?

On personal level: Be dependable, helpful, invest your time in others. Trust built through empathy. Write code that won't make your friend on duty wake up in the middle of the night. * Write code to be consumed by humans, not your ego. I say the first receiver of my work isn't the company or the end user but my colleague. A balance is needed though.

On team level: Gather people of varied skillset, a database ninja will need the toolsmith sometimes, the toolsmith will need the frontend guru Have a routine to talk about tools, processes, productivity, but don't get stuck in a methodology for no reason * Provide enough autonomy to make people actually care but add leadership when things go meh

Good question, it heavily depends on the team but maybe some general answer can be had. People write PhDs about it. Aristotle once said: code isn't hard, people is hard.

What do you consider to be your strengths and your weaknesses?

Weaknesses: I sometimes get too heated up when bad or half-solutions get accepted. Hard to give up. This creates conflicts. I'm working on it. I haven't studied CS in college. I have some stuff to catch up on. The more I catch up, the farther the rabbit.

Tell us about a project which failed and what you learned from it.

I once joined friend's startup as head programmer leading a team of two. The technology was already chosen (Corona/Lua) but it was bad for the job. We fought a long battle but in the end the technology proved wrong and impossible to maintain, the money run out, we realized how weak we were in long term planning. I learned to be more realistic in planning and estimation. Had we changed the technology early on and be braver in abandoning bad ideas maybe the product would be on today. I learned a lot about managing people as well.

Have you ever worked in a customer support or client facing role? And how do you feel about talking to customers?

Before I became a programmer, one of my jobs was selling language courses. For one month, I was even awarded, best advisor, having sold most among colleagues. I received training and spend over a year explaining the product, providing support and up selling. I feel quite strong in such position, although I left this position to become a programmer.

copy stackoverflow

I enjoy working with large, legacy systems, cleaning, documenting, extracting new shiny services. I like working with products that have social impact and hope my personal projects will become such in the future. I enjoy sharing my knowledge, mentoring and helping others join the progamming community.

TODO

What was the hardest bug you've faced?

Explain TCP/IP to your grandmother

Explain breadth-first search

Factorization

Tell me about a time you had to persuade a group of people to make a big change

Tell us about yourself.

I'm a typical back end guy who just always happened to be the one to make my teams' life easier by automation. Besides writing code like everyone else, I invented tools for everyday problems, big and small, worked on git workflows (design the policy) and made tools to make it easy to adhere to them (playing the repository cop role). I became a programmer somewhat by accident, a fruitful and pleasant accident. I studied applied linguistics at university, learning strange minority languages that I love, like Welsh or Irish and needed programming to solve linguistic problems. Long story short, I liked programming more and continued, trying to become an excellent programmer while I'm at it. I still haven't got there, every project and every book lead to more things to learn and I love it. I have recently stopped working to make up for the lack of proper CS education and I'm going over the algorithmics, math and database design.

Tell us about the most difficult API/library/software bug you've squashed (we love troubleshooting stories).

On the infrastructure side, I once was in charge of in-company cheeseshop using pypiserver, a backup of relevant PYPI packages and place to store our own wheels. One team with a large project could not upload their package getting a meaningless bad request 400 error. We spent considerable time in all the wrong places, debugging the packaged app itself (possible bad packaging), python packaging itself (where I learned most of setuptools intricacies), the pypiserver and finally the server embedded in pypiserver, bottle where the problem was found. This bug was hard and humbling, because debugging packaging is mostly uncharted territory and I had to come up with test suites that were not typical so no one could offer help. The debug took many steps, I wrote in bash and tried not to lose track of results of each step as I had to check many potential ways and often had to take a step back. Self documenting was crucial. I was quite proud of myself when I finally realized that the package had more than usual dependencies, the authors of pypiserver/bottle didn't take that into account. A pull request followed: https://github.com/pypiserver/pypiserver/issues/82

Tell us about an engineering solution you've built that you're proud of.

I built from scratch a system to import data from competitors for a time tracking app for Dutch lawyers. The product the company was offering was so good that many people wanted to migrate to it. They usually had the some data but in strangest of formats, non relational CSV, FoxPro db, "that very old version" of MySQL with some tables mangled by bad dumping... The data obviously never matched our data model and a patient programmer with excellent knowledge of our data model had to reshape the data. The tool made it relatively easy. It allowed connecting various data sources by separating concerns properly and implementing intermediate data representations. It included lots of little debug helpers allowing to visualize the data like pygments-powered re-indented python object representation (now a library: https://github.com/bartekbrak/prettyrepr) and made extensive use of python logging with defined levels. This solution cut the time to do a single import from months to weeks and lessened the frustration we had to got through while importing by making as much as possible visualized.

Tell us about a technically impressive thing you've built.

A bash script for moving whole MySQL installation to RAM to gain speed (for local development only). It's a crazy idea, I know, but let me explain. We had a probably badly designed database and were wasting a lot of time dumping, loading and interacting with it (like migrations). The data could be easily re-downloaded from production server if needed so it didn't matter if you lost it. I wasn't sure if this made sense or whether it was possible. I tried and gained 5x speedups (compared to HDD drives, old days). Both front end backend developers wanted the that speedup and the word quickly got around that this tiring problem can be solved by my hack. So I polished the code, add backups option and released it. I wouldn't say it's that technically impressive but it influenced how a lot of people worked in the company, total time saved was quite impressive. https://github.com/bartekbrak/ramdb

Tell us about the largest deployment you've worked on.

The company I worked for had up to 120 AWS instances at any given time on an auto-scaling farm, processing rabbit tasks. The machines went up and down a lot, as it is with such deployments. My task was to make sure as little time as possible was spent on bootstrapping the machines with our python packages. I worked on caching PYPI packages and converting ours to near zero install time python wheels.

Tell us about your favorite technology to work with.

Python and Bash. Python was always the first language of choice if I could use it. Bash was always useful but I have a love-hate relationship with it and always try to replace it with Python which isn't always possible.

Include links to your portfolio/Github profile or provide us with 500+ LOC to help us get a feel for how you write code.

Introduction about yourself

I'm a typical Python back end guy with 5 years of experience. I'm experienced in all things Linux. I have worked as CTO in a startup scraping Polish law - failed startup, sadly, due to financial reasons but the journey was well worth it. I focus on code's maintainability, readability and process.

What technology have you worked with?

5 years back end Python in several companies with brief excursions into front end when demanded. I'm an experienced Linux user, I have always used bash, sed, awk, find, pipes, etc. I consider myself an expert in git and mercurial. Scraping wise, I have used Scrapy and wrote custom scrapers in pure requests+lxml+beautiful soup, although that was a while ago, I have learned a lot since. In my free time I study algorithmics and write my own little apps - time tracking app and boggle board game solver.

Sunscrapers

How would you describe your role at Sunscrapers?

I'm a Python developer. I also try to teach others whatever I can, about Python and Linux toolchain, being a mentor is my main professional goal.

Pick one question from each category.

I'll answer them all. The answers will be useful to me too for my own blog.

Why did you join Sunscrapers?

I was looking for a smaller company than my previous employer, specifically one with a smaller managment overhead so I don't talk away my life during endless meetings rather than creating code. That sentiment was described in the book Rework among other useful lean ways of running company. During my interview Przemek himself mentioned the book, I was surprised and I was thrilled. Sunscrapers lives by the rules I dreamt of having. I also felt both sides had things to teach to each other: I like preparing wporkshops for developers, Sunscrapers can show me what true agile looks like, for example.

What was your impression after a week at Sunscrapers?

I was given my first coffee by Łukasz, the CEO. I thought such attitude was the stuff of corporate recruitment flyers that never really meant anything. I was happily proven wrong and the guys were surprised that I was surprised. Everyone was friendly and focused on work at the same time. We had only one meeting that week, the office was quiet and helped me focus.

What’s your favourite thing about your job?

It's flexible. I try to be useful to the company and colleagues specifically so that I can have more say in the way I work, how and when, so I can be most productive. And this works. The fact that I did not have to negotiate it with a HR department chain of command was a relief. I can really focus on being productive here.

What would you say is your best skill?

Sharing knowledge. I feel I am where I am because I'm standing on the shoulders of giants than invested their time in me before. I'm trying to repay that debt by sharing what I know and learning how to do it effectively.

What do you want to learn more about?

Everything, recently about Dutch and Dutch law, strawbale houses and motorcycles.

Why Python?

By accident, I didn't choose. I love the language but it's a tool and should remain a tool. I will happily switch to whatever is needed to solve the next problem.

What is the best thing in our office?

It's quiet. Quiet enough. And the terraces are pure awesome, morning coffee in the sun!

Where do you come from?

I was born and raised in the north-east corner of Poland, in the Mazury Garbate region. It's a lake district and it used to be very cold. So I could swim and ice skate before I was 6.

What is your background?

Linguistics, I used to study Welsh, Irish, English. Never finished. Studying was fun, exams was not.

What did you want to be when you grew up?

So many things, I still haven't figured out, I don't want to figure that out. Embrace the change.

What was your favourite childhood toy?

Commodore-64.

What do you like to read?

The economist magazine, non-fiction books, memoirs.

What was the last thing you listened to?

Martian, the movie soundtrack.

Who is your favourite superhero and why?

I don't have one, I don't like dreaming. We can all be superheroes ourselves, so why focus on some poor renditions of American moneymakers.

What do you do on your days off?

Youtube, roller blading, discovering new vegan places, learning something new.

What have you found exciting recently?

Learning to drive a motorcycle.

What’s your favourite TED talk?

I don't have one. When I discovered TED few years back, I downloaded all 500+ talks as audio and listened to them all while cycling to work. I've had enough for long. I prefer Youtube in general these days.

What is your favourite sport?

Roller-blading.

What is your favourite place in Warsaw?

Manĝo, the vegan street food takeaway.

What do you admire in others?

Being direct, but helpful. Seeing broad, but focused. Challenging others, but for a good reason.

What makes you laugh?

Bad jokes. only bad

What helps you to recharge?

Sleep, water, no access to the Internet.

If you could meet your idol, who would it be?

Myself. As self-obsessed as it may sound, I want to be as happy and complete a person that I would die to meet myself. This hasn't happened yet, thankfully, I'd stop fighting.

3 things that are the essence of your life

learn. share. change.

What are your strengths and weaknesses according to this position?

I have used most of the technologies mentioned and there are quite some mentioned, I feel comfortable in the main technologies. This should cut down on on-boarding time. I speak English proficiently and I understand this is going to be a much needed skill. As for weaknesses, I feel I have too little knowledge in regards to ElasticSearch and I need to brush up on MongoDB.

What is your career goal? In what kind of technology would you like to develop your skills?

My goal is to acquire in-depth understanding of databases and very slowly shift away from producing code to consulting and research in this area. Therefore, I wish to develop my skills in understanding indexes on a variety of databases, database tuning and be able to competently compare and recommend various database technologies.

What is important for you to keep motivation for work on the same level all the time, as it was at the beginning of your career?

Competent people around me, access to mentors. Being able to maintain efficiency by avoiding different kinds of waste and taking part in improving the delivery process. Being able to mentor by myself.

What conditions must be met by the employer to your increased efficiency?

Dedication to finding and solving problems. Being demanding and respoding to demands - reasonable demands, I'm talking about setting goals, re-inventing broken parts of the delivery process, being vigilant. Lack of micro-managment, trust combined with leadership. Understanding what leadership is.

Do you have any additional experience in projects besides your professional experience? Do you learn some other technologies/tools, which are not mentioned in your CV?

I'm not sure what you mean by projects. I have experience beyond IT field, I'm a teacher of English and a hobby linguist. In the field of IT, I take part in mentoring opportunities and try to develop skills in this regard, for example, I have taught Python to data scientists in Berlin. My CV covers the important parts of my experience, I can't recall anything else of substance without knowing what you're looking for.


bartekbrak1@gmail.com