diff --git a/README.md b/README.md index 26c89b6..b46f719 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ -## SparkFabrik dockerized Raneto-based playbook +## SparkFabrik playbook -This repository contains our company playbook (and possibly all the knowledge around our company-wide practices and policies), packed with a Raneto container to consult them. -Ideal destination for this stuff is on a domain like **playbook.sparkfabrik.com**. So far you can `docker-compose up -d` and visit http://playbook.sparkfabrik.loc to enjoy the result. +This repository contains our [company playbook](https://playbook.sparkfabrik.com) (and possibly all the knowledge around our company-wide practices and policies), packed with a Raneto container to consult them. ## Contributions -So far the project is meant to be internal. All company members can download the project and provide merge-requests towards `master` branch. -The naming convention for the branches is: +So far the project is meant to be internal, all company members can clone the project and set up a local environment with the command `docker-compose up -d`. +After that, a local instance of the playbook will be available at `http://playbook.sparkfabrik.loc`. + +To contribute provide pull-requests towards `master` branch. The naming convention for the branches is: * `section/section-slug-title` for new sections (hardly they will be open by a company member, mostly it will be a matter of pre-made structure, but suggestions are welcome) * `content/description-of-the-content` for content contributions of various nature, like typo corrections, adding a new procedure or policy, etc diff --git a/content/guides/local-development-environment-configuration.md b/content/guides/local-development-environment-configuration.md index e99d87c..93e879f 100644 --- a/content/guides/local-development-environment-configuration.md +++ b/content/guides/local-development-environment-configuration.md @@ -46,7 +46,7 @@ On MacOSX the local host resolver is the one native to MacOSX itself, while the ### Automatic installation with the sparkdock privisioner (recommended way) ``` -bash <(curl -fsSL https://raw.githubusercontent.com/sparkfabrik/sparkdock/master/bin/bootstrap) +bash <(curl -fsSL https://raw.githubusercontent.com/sparkfabrik/sparkdock/master/bin/install.macosx) ``` This will provision a VirtualBox VM ready to use and will do most of the configuration required to access containers from outside the VM. Also dnsdock container will be created and activated. @@ -60,7 +60,7 @@ If you already have VirtualBox, select a custom ("Ad hoc") installation and dese After installing Docker Toolbox, use the terminal to create *a new Docker machine* using this command: ``` -docker-machine create dev -d virtualbox --virtualbox-disk-size 50000 --virtualbox-cpu-count 1 --virtualbox-memory 4096 +docker-machine create dinghy -d virtualbox --virtualbox-disk-size 50000 --virtualbox-cpu-count 1 --virtualbox-memory 4096 ``` Adjust the settings according to your system; the command above specify: @@ -73,18 +73,18 @@ At the end of the installation use the `docker-machine ls` command, and you shou ``` % docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM -dev * virtualbox Running tcp://192.168.99.100:2376 +dinghy * virtualbox Running tcp://192.168.99.100:2376 ``` -Now you should add to the init script of your shell sessions something that automatically loads environment variable needed in order to connect to the dev machine. +Now you should add to the init script of your shell sessions something that automatically loads environment variable needed in order to connect to the dinghy machine. Add this lines to your *.bashrc* or *.zshrc*: ``` -eval "$(docker-machine env dev)" -export DOCKER_MACHINE_IP=$(docker-machine ip dev) +eval "$(docker-machine env dinghy)" +export DOCKER_MACHINE_IP=$(docker-machine ip dinghy) ``` -Install *dnsdock* with this command, that will create a container that will always start once the dev machine starts: +Install *dnsdock* with this command, that will create a container that will always start once the dinghy machine starts: ``` docker run --restart=always -d -v /var/run/docker.sock:/var/run/docker.sock --name dnsdock -p 172.17.42.1:53:53/udp aacebedo/dnsdock:v1.15.0-amd64 @@ -97,7 +97,7 @@ After either manual or automatic installation, it's recommended to manually conf *Set up routing* ``` -sudo route -n add -net 172.17.0.0 $(docker-machine ip dev) +sudo route -n add -net 172.17.0.0 $(docker-machine ip dinghy) ``` *Clear your DNS caches*: diff --git a/content/job-roles/administration.md b/content/job-roles/administration.md new file mode 100644 index 0000000..5f0a6fa --- /dev/null +++ b/content/job-roles/administration.md @@ -0,0 +1,15 @@ +/* +Description: Administration roles and functions in SparkFabrik +Sort: 15 +*/ + +## Administration owners + +Administration in Sparkfabrik is carried out mainly by members of the [Executive Board](/job-roles/governance) with the help of [Supporters](/job-roles/role-isc-supporter) - employees owning one or more processes and procedures vital to the health of the company. + +Despite not being directly involved in core-business or value delivery, Supporters are **the glue that holds governance and operations together**, thus being an essential gear in the company machinery. +They are facilitators, assistants, secretaries, organizers and the ultimate source of truth about so many information necessary to managers to properly hold the steering wheel. + +The [Supporter role](/job-roles/role-isc-supporter) has its own [impact scoring card](/working-at-sparkfabrik/impact-scoring) and, if not for the nature of its duties, is subject to the same requirements and quality standards as the other [operational roles](/job-roles/operations). + +In addition to supporters, [Lead developers](/job-roles/role-isc-lead-developer) and [Professionals](/job-roles/role-isc-professional) are often involved in administrative processes like reporting, project budgeting, lead assessment and so on. \ No newline at end of file diff --git a/content/job-roles/governance.md b/content/job-roles/governance.md new file mode 100644 index 0000000..7675a0a --- /dev/null +++ b/content/job-roles/governance.md @@ -0,0 +1,53 @@ +/* +Description: Governance roles and functions in SparkFabrik +Sort: 20 +*/ + +Governance in Sparkfabrik is organized in functions, not roles. +C-level roles are assigned to key people, that generally own government functions. Owning doesn't imply the function is totally carried out by that person. Professionals and lead developers at operational level cooperate with the government function owner to make it happen. + +## Executive board + +The executive board is in charge for the strategy and business planning of the company. +Current board is composed by company founders, with the following duties. + +* **Stefano Mainardi**: CEO - Responsible for the overall progress of the company. Praised for success, and held responsible for setback. +* **Paolo Pustorino**: Head of HR - Responsible for workforce training, development, management, recruitment, rewarding, compliance and ethos. +* **Marco Giacomassi**: CFO - Oversees company's financials. Responsible for budgeting, accounting, reporting, forecasting and investing. +* **Paolo Mainardi**: CTO - Oversees company's technology. Works to ensure that technology-related decisions align with business goals. +* **Alessio Piazza**: COO - Oversees company's day-to-day operations, sourcing, process control, resource allocation and activity planning. + +## Steering committee + +The steering committee works to overcome organizational problems and advance company's practices. It operate on a constant basis on top of the projects level, overseeing the processes, validating methodologies and improving the whole delivery process. + +This committee is composed by the CTO, COO, Head of HR, all Professionals and all Lead Developers in the company. +The owner of Steering committee events is the COO. + +Each quarter (the first Wednesday of each quarter first month) the committee has a 2 hours facilitated meeting in which they define: + +* Top priorities to be addressed (C-levels can set them or call for co-generation and voting) +* State top priorities in terms of initatives +* Willing people can apply as owners of those initiatives + +Initiatives clearly states SMART goals to address the related top priority. They should bring a change or even revolutionize an aspect of our work, such as introducing a new technology, change an organizational approach, introducing longed-for tools, etc. + +Owners commit to lead the completion of the initiative goals by the end of the quarter. Initiative owners will be pubblicly appointed. We want those people to challenge themselves and take on additional responsibilities to shape those skills that may in the future make them C-levels. + +The format of the quarterly meeting is aggressively timeboxed: + +* 20 mins: Identify and list weaknesses or opportunities for improvement in current approach. +* 30 mins: Define goals for a better condition (1 to 3 goals depending on the size). +* 30 mins: Generate SMART initiatives for the quarter that fulfills the goals. +* 20 mins: Appoint a single owner for each initiative. +* 10 mins: Define a scheduled session within 7 days where the owner will present and discuss his incremental plan to the completion of the goals (this will allow resource planning and assignement). + +The presentation of the initiative plan must include: + +* Quantification/qualification of time and resources necessary to fulfill the goal. +* A list of the deliverables to be expected (tools, docs, materials, etc). +* A calendar for brown bags/internal presentation to review increments with the whole company. +* If and how the company is expected to support the initiative deliverables, during the quarter and in the future (say, open source contributions etc). +* A list of outward facing material to communicate how your initiative is making a difference, such as blog posts, events speeches or the maintenance of open source contributions. + +While the initiative should be completed in the quarter, the ownership won't stop there: communication, promotion and ongoing maintenance may last longer and owners are supposed to take the commitment. diff --git a/content/job-roles/operations.md b/content/job-roles/operations.md new file mode 100644 index 0000000..5d825d4 --- /dev/null +++ b/content/job-roles/operations.md @@ -0,0 +1,33 @@ +/* +Description: Operational roles and functions in SparkFabrik +Sort: 10 +*/ + +In Sparkfabrik the term _developer_ is used generally to identify employees that deliver solutions to the customer. +It doesn't really matter if your job is to write code, design a new interface or taking care of the operations on a cloud appliance. Your job is still to _develop_ things: be it from scratch or to improve them. + +## Careers + +Operationals career paths expand vertically (_Growth_) and horizontally (_Specialities_). + +### Growth + +We recognize four levels of professional skills, depending on seniority and level of proficiency. Each level has its own salary bracket, mission and clear expectations. Developers [progress over this career path](/working-at-sparkfabrik/career-advancement.md) by their lenght of service, their results and by nurturing their technical and non-technical skills. + +* **Junior developer**: this is the level where duly graduated people or developers already experienced on other technologies start. We expect people to quickly step up to the next level, ideally in 12 to 36 months of employment. +* **Senior developer**: this is the level that compose the big part of our company and that we heavily rely upon. People at this level are skilled and proficient with both our technology and our methodology. They can mentor juniors and are authonomous in their work. +* **Lead developer**: those are the people that lead teams and projects in Sparkfabrik. Those people have a senior level background on top of which they developed the soft skills necessary to govern the social, technical and organizative complexity of our work. +* **Professional**: this is the highest operational role in Sparkfabrik. Professionals are the people that embody a speciality, can work with one or multiple teams at once, represent Sparkfabrik at important tables, provide training and mentorships, etc. Professionals may occasionally lead a team, but they are actually supposed to work cross-teams as reference key people. + +### Specialities + +We explained Sparkfabrik only employs _developers_. Sure there are differences and each person has her own natural or acquired inclination. We broadly recognize four _Specialities_ that qualifies you as a developer and do our best to make you shine in accordance with your nature. During your career you will be probably cover more than a single speciality, even at the same time. + +* **Analyst**: Analysts are great when it comes to map a domain, fathom complexity and express it in a clear, rational, understandable form. Analysts may not always have a solution at hand but for sure they know when a need is fulfilled or a problem is solved. Analysts skills make for great Product Owners. +* **Architect**: Architects describe the best possible solution to a framed problem. They are great decision makers, understand the long term implications of technical choices, know how to quickly probe, understand and adapt and always grasp the big picture. +* **Specialist**: Specialists are vertically expert in a discipline or area, be it writing software, cloud operations, implementing Agile or UX design. Those are the most keen to work in pair with project teams on the long run, when there are critical challenges. +* **Manager**: Managers make things work. They coach, measure, plan, steer and ultimately support people to give their best, remove obstacles, improve their processes and procedures. In Sparkfabrik people are never managed, work is. So managers govern but never rule. + +## How to advance + +We track and rule [people career advancement](/working-at-sparkfabrik/career-advancement.md) to make it fair and clear to everybody. \ No newline at end of file diff --git a/content/job-roles/role-isc-junior-developer.md b/content/job-roles/role-isc-junior-developer.md new file mode 100644 index 0000000..0de2d78 --- /dev/null +++ b/content/job-roles/role-isc-junior-developer.md @@ -0,0 +1,59 @@ +/* +Title: Roles - Junior Developer +Description: Junior Developer role in SparkFabrik +Sort: 50 +*/ + +## Mission + +* To realize technical solutions that satisfies customer's needs. +* To follow the direction of your team lead in doing so. +* To work following our agreed procedures and matching our quality standards. +* To value collaboration and critiques as the building blocks for trust with colleagues and customers. +* To value continuous improvement, seek out opportunities to learn and live by the principles of the Agile manifesto. +* To seek assistance every time you are in the need, not trying to shine by self-love or obstinacy. + +## Values + +* Passion +* Curiosity +* Communication + +## Awesomeness horizon + +If you score three times in a row over `2.5` you may get a career advancement. + +## Attitude + +### Teamwork + +You share your goals with your mates and work with them, never playing the hero or being a team of one. You speak your voice clearly, even when it's difficult, without holding relevant information for fear or stubbornness. When being frank makes you uncomfortable, you still strive to be polite and cheerful so you can make your point. + +### Self-organization + +Your own schedule and workload balance is your responsibility. You have clear what's expected to you each iteration (week, sprint, milestone) and step up to discuss conflicting priorities and possible bottlenecks with the management. + +### Lucidity + +You have clear what's expected from you and what you have to do to match the expectation. When you feel like you lost your goals, you speak up and do your best to have them clear. + +### Awareness + +You perceive the overall impacts of your day-to-day choices and know when to ask for validation. You face challenges proactively, not always waiting for others to solve problems for you, but know when to stop and ask for help to avoid wasting time or losing your mind on things bigger than you. + +### Strong opinions, lightly held + +You speak your mind and sustain your ideas with words and facts, but you are open to criticism and listen with open ears. + +## Business impacts + +* You define implementative details of solutions that fulfill business goals, matching our high quality standards. +* You realize solutions that fulfill business goals, matching our high quality standards, as defined with your team. +* You learn new, useful skills, taking advantage of any opportunity, balancing possible negative impacts on your duties. +* You help improve internal projects (even if just with bugfixes or documentation) based on your skills, aspirations and training goals. + +## Contributions + +* You propose or help to generate content about technology, methodology or practices for Sparkfabrik's media. +* You keep our Company Playbook up to date, extend and fix it every time you see the need. +* You deliver contributions (bugfixes, documentation, translations) to community projects based on your skills, aspirations and training goals. \ No newline at end of file diff --git a/content/job-roles/role-isc-lead-developer.md b/content/job-roles/role-isc-lead-developer.md new file mode 100644 index 0000000..7fc9b58 --- /dev/null +++ b/content/job-roles/role-isc-lead-developer.md @@ -0,0 +1,70 @@ +/* +Title: Roles - Lead Developer +Description: Lead Developer role in SparkFabrik +Sort: 70 +*/ + +## Mission + +* To understand customer's needs and help the customer state them in a clear, understandable form. +* To design systems that satisfies customer's needs. +* To guide your development team to implement those systems. +* To promote our procedures and standards and to find new opportunities to improve them. +* To teach by example and words, showing the value of excellence. +* To value collaboration and critiques as the building blocks for trust with colleagues and customers. +* To value continuous improvement, seek out opportunities to learn and live by the principles of the Agile manifesto. +* To contribute to the company's technical culture, sharing your mastery with others. + +## Values + +* Passion +* Discipline +* Teamwork + +## Awesomeness horizon + +If you score three times in a row over `2.5` you may get a career advancement. + +## Attitude + +### Leadership + +You are an organizational model for you colleagues. You live by best practices and require and help others to meet your high standards. You do your best to lead by consensus, listening to your team, but you always remember they look at you as a guide. You protect your team and remove obstacles but keep them committed and fit to create value. + +### Decisiveness + +You take promptly decisions, even on partial data, perceiving the overall impacts on people, schedule and deliverables. You face challenges proactively, not waiting for others to solve problems for you. You handle difficult situations without losing your mind and help others enduring them. + +### Teamwork + +You share your goals with your mates and work with them, never playing the hero or being a team of one. You speak your voice clearly, even when it's difficult, without holding relevant information for fear or stubbornness. When being frank makes you uncomfortable, you still strive to be polite and cheerful so you can make your point. + +### Self-organization + +Your own schedule and workload balance is your responsibility. You have clear what's expected to you each iteration (week, sprint, milestone) and step up to discuss conflicting priorities and possible bottlenecks with the management. + +### Lucidity + +You have clear what's expected from you and what you have to do to match the expectation. When you feel like you lost your goals, you speak up and do your best to have them clear. + +### Strong opinions, lightly held + +You speak your mind and sustain your ideas with words and facts, but you are open to criticism and listen with open ears. + +## Business impacts + +* You clearly identify the value behind a requirement and orient your work towards the delivery of that value, in accordance with our technical and human standards. +* You lead the creation of high-quality software, on time and in budget. +* You define the architecture of solutions that fulfill business goals, matching our high quality standards. +* You help your team define implementative details of solutions that fulfill business goals, matching our high quality standards. +* You sustain the growth of your younger colleagues, promoting the values of delivery quality and human relations both inside and outside the company. +* You help your team substantially improve internal projects, leading joint effort and/or directly contributing work as necessary. +* You shape new technologies, practices, tools and knowledge, even when you work on customer projects, in accordance with the direction set by the CTO. + +## Contributions + +* You generate content about technology, methodology or practices for Sparkfabrik's media. +* You lead, with the help of Sales and Communication, the production of a case study within two weeks by the end of each project. +* You make sure your team members (you also) participate in CFPs, applying as speakers at relevant conferences. You facilitate the organization of work to allow them (or yourself) to prepare the necessary material. +* You keep our Company Playbook up to date, extend and fix it every time you see the need. +* You deliver substantial contributions (new features, bugfixes, documentation, translations) to community projects, , leading joint effort and/or directly contributing work as necessary. diff --git a/content/job-roles/role-isc-professional.md b/content/job-roles/role-isc-professional.md new file mode 100644 index 0000000..799ca63 --- /dev/null +++ b/content/job-roles/role-isc-professional.md @@ -0,0 +1,75 @@ +/* +Title: Roles - Professional +Description: Professional role in SparkFabrik +Sort: 80 +*/ + +## Mission + +* To make your unique skills available to the whole company. +* To help lead and senior development achieving their mission. +* To dominate complexity, chew difficulties and laugh in the face of pressure. +* To promote our procedures and standards and to find new opportunities to improve them. +* To teach by example and words, showing the value of excellence. +* To value collaboration and critiques as the building blocks for trust with colleagues and customers. +* To value continuous improvement, seek out opportunities to learn and live by the principles of the Agile manifesto. +* To contribute to the company's technical culture, sharing your mastery with others. + +## Values + +* Passion +* Availability +* Teamwork + +## Awesomeness horizon + +You are already topping the awsomeness level. The higher your score, the higher the reward. + +## Attitude + +### Advocacy + +You are the professional model for your colleagues. You represent the company both inside and outside and are actively involved in the promotion of our culture. You are an antenna for the company, picking up information essential to validate and shape our overall strategy, of which you are an active and informed part. + +### Leadership + +You are an organizational model for you colleagues. You live by best practices and require and help others to meet your high standards. You do your best to lead by consensus, listening to your team, but you always remember they look at you as a guide. You protect your team and remove obstacles but keep them committed and fit to create value. + +### Decisiveness + +You take promptly decisions, even on partial data, perceiving the overall impacts on people, schedule and deliverables. You face challenges proactively, not waiting for others to solve problems for you. You handle difficult situations without losing your mind and help others enduring them. + +### Teamwork + +You share your goals with your mates and work with them, never playing the hero or being a team of one. You speak your voice clearly, even when it's difficult, without holding relevant information for fear or stubbornness. When being frank makes you uncomfortable, you still strive to be polite and cheerful so you can make your point. + +### Self-organization + +Your own schedule and workload balance is your responsibility. You have clear what's expected to you each iteration (week, sprint, milestone) and step up to discuss conflicting priorities and possible bottlenecks with the management. + +### Lucidity + +You have clear what's expected from you and what you have to do to match the expectation. When you feel like you lost your goals, you speak up and do your best to have them clear. + +### Strong opinions, lightly held + +You speak your mind and sustain your ideas with words and facts, but you are open to criticism and listen with open ears. + +## Business impacts + +* You clearly identify the value behind a requirement and orient your work towards the delivery of that value, in accordance with our technical and human standards. +* You define the architecture of solutions that fulfill business goals, matching our high quality standards. +* You define implementative details of solutions that fulfill business goals, matching our high quality standards. +* You realize solutions that business goals, matching our high quality standards, as defined with your team. +* You sustain the growth of your younger colleagues, promoting the values of delivery quality and human relations both inside and outside the company. +* You own one or more internal projects making sure they are in good shape, documented and up to date. +* You shape new technologies, practices, tools and knowledge, even when you work on customer projects, in accordance with the direction set by the CTO. +* You participate with CTO, COO and other relevant company staff to cross-project strategy and tactics meetings. + + +## Contributions + +* You generate (or help to) content about technology, methodology or practices for Sparkfabrik's media. +* You keep our Company Playbook up to date, extend and fix it every time you see the need. +* You deliver substantial contributions (new features, bugfixes, documentation, translations) to community projects based on your skills, aspirations and training goals. +* You own one or more community projects making sure they are in good shape, documented and up to date. \ No newline at end of file diff --git a/content/job-roles/role-isc-senior-developer.md b/content/job-roles/role-isc-senior-developer.md new file mode 100644 index 0000000..4637a67 --- /dev/null +++ b/content/job-roles/role-isc-senior-developer.md @@ -0,0 +1,58 @@ +/* +Title: Roles - Senior Developer +Description: Senior Developer role in SparkFabrik +Sort: 60 +*/ + +## Mission + +* To define and realize technical solutions that satisfies customer's needs. +* To follow the direction of your team lead in doing so. +* To help your junior mates grow, challenging them and giving them fishing cans, not fish. +* To work following agreed procedures and matching our quality standards. +* To value collaboration and critiques as the building blocks for trust with colleagues and customers. +* To value continuous improvement, seek out opportunities to learn and live by the principles of the Agile manifesto. +* To contribute to the company's technical culture, sharing your mastery with others. + +## Values + +* Passion +* Discipline +* Communication + +## Awesomeness horizon + +If you score three times in a row over `2.5` you may get a career advancement. + +## Attitude + +### Teamwork + +You share your goals with your mates and work with them, never playing the hero or being a team of one. You speak your voice clearly, even when it's difficult, without holding relevant information for fear or stubbornness. When being frank makes you uncomfortable, you still strive to be polite and cheerful so you can make your point. + +### Self-organization + +Your own schedule and workload balance is your responsibility. You have clear what's expected to you each iteration (week, sprint, milestone) and step up to discuss conflicting priorities and possible bottlenecks with the management. + +### Lucidity + +You have clear what's expected from you and what you have to do to match the expectation. When you feel like you lost your goals, you speak up and do your best to have them clear. + +### Strong opinions, lightly held + +You speak your mind and sustain your ideas with words and facts, but you are open to criticism and listen with open ears. + +## Business impacts + +* You define implementative details of solutions that fulfill business goals, matching our high quality standards. +* You realize solutions that business goals, matching our high quality standards, as defined with your team. +* You sustain the growth of your younger colleagues, promoting the values of delivery quality and human relations both inside and outside the company. +* You substantially improve internal projects (new features, bugfixes, documentation) based on your skills, aspirations and training goals. +* You shape new technologies, practices, tools and knowledge, even when you work on customer projects, in accordance with the direction set by the CTO. + +## Contributions + +* You generate (or help to) content about technology, methodology or practices for Sparkfabrik's media. +* You keep our Company Playbook up to date, extend and fix it every time you see the need. +* You partecipate in CFPs and apply as speaker at relevant conferences. +* You deliver substantial contributions (new features, bugfixes, documentation, translations) to community projects based on your skills, aspirations and training goals. diff --git a/content/job-roles/role-isc-supporter.md b/content/job-roles/role-isc-supporter.md new file mode 100644 index 0000000..5969833 --- /dev/null +++ b/content/job-roles/role-isc-supporter.md @@ -0,0 +1,68 @@ +/* +Title: Roles - Supporter +Description: Role that owns administrative and support processes in SparkFabrik +Sort: 80 +*/ + +## Mission + +* To help the management achieving company's mission. +* To own support processes, improving them as necessary. +* To promote our procedures and standards and to find new opportunities to improve them. +* To value collaboration and critiques as the building blocks for trust with colleagues and customers. +* To value continuous improvement, seek out opportunities to learn and live by the principles of Lean Thinking. +* To contribute to the company's organizational culture, sharing your mastery with others. + +## Values + +* Tidiness +* Reliability +* Teamwork + +## Awesomeness horizon + +Your role has no ladder as it is vital to the correct working of the company. The higher your score, the higher the reward. + +## Attitude + +### Clarity + +You are an organizational and procedural reference for both employees and management. You live by and shape clearly defined practices and help others creating new ones. + +### Fluidity + +You do your best to facilitate administrative and organizational processes. You build bridges across the whole company and work hard to highlight and remove wastes and obstacles as you identify them. You listen what happens at all levels and help both management and workforce find a common ground when you feel they lack the proper alignment. + +### Proactivity + +You know when to take promptly decisions, even on partial data, or require management validation. You perceive the impacts your choices will have on the company and make sure you always work to fulfill the current strategy. You face challenges proactively, not waiting for others to solve problems for you. You handle chaotic situations without losing your mind and help others making sense of them. + +### Teamwork + +You share your goals with the management and work with them. You also explain your needs or decisions to the workforce so that they'll be on your same page and understand the real value you want delivered. You speak your voice clearly, even when it's difficult, without holding relevant information for fear or stubbornness. When being frank makes you uncomfortable, you still strive to be polite and cheerful so you can make your point. + +### Self-organization + +Your own schedule and workload balance is your responsibility. You have clear what's expected from you and step up to discuss conflicting priorities and possible bottlenecks with the management. + +### Lucidity + +You have clear what outcomes are expected from your work and what you have to do to match the expectation. When you feel like your goals or process outcomes are confused, you speak up and do your best to have them clear. + +### Strong opinions, lightly held + +You speak your mind and sustain your ideas with words and facts, but you are open to criticism and listen with open ears. + +## Business impacts + +* You implement and improve administrative and support processes to bring a positive impact on the day-to-day work of the whole company. +* You sustain the growth of your younger colleagues, promoting the values of delivery quality and human relations both inside and outside the company. +* You own one or more internal processes, making sure they are in good shape, documented and up to date. +* You shape new practices, tools and knowledge, while working on your daily duties, in accordance with the direction agreed with the management. +* You participate with the company governance and other relevant company staff to cross-project/cross-process strategy and tactics meetings. + + +## Contributions + +* You generate (or help to) content about tools, methodology or practices for Sparkfabrik's media and playbook. +* You help the workforce to organize, collect or shape information necessary for them to own public contributions that will bring benefit to the company. \ No newline at end of file diff --git a/content/job-roles/sort b/content/job-roles/sort new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/content/job-roles/sort @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/content/our- b/content/our- new file mode 100644 index 0000000..fe79b82 --- /dev/null +++ b/content/our- @@ -0,0 +1,4 @@ +# Setup Lenovo Thinkpad X1 Carbon on Ubuntu 18.04 + +* https://mensfeld.pl/2018/05/lenovo-thinkpad-x1-carbon-6th-gen-2018-ubuntu-18-04-tweaks/ +* https://wiki.archlinux.org/index.php/Lenovo_ThinkPad_X1_Carbon_(Gen_6)#Enabling_S3 diff --git a/content/our-company/approved-hardware-and-software.md b/content/our-company/approved-hardware-and-software.md index 7195cf6..544f1a5 100644 --- a/content/our-company/approved-hardware-and-software.md +++ b/content/our-company/approved-hardware-and-software.md @@ -1,3 +1,8 @@ +/* +Description: How we require you to care in your devices during your daily work at SparkFabrik +Sort: 60 +*/ + SparkFabrik is primarly a web-development company, dwelling in the realm of FOSS (Free and Open-Source Software). We are strictly tied to the Unix world, either in philosophy, technics and mindset. diff --git a/content/our-company/company-manifesto.md b/content/our-company/company-manifesto.md index cadad1f..4e0f7fe 100644 --- a/content/our-company/company-manifesto.md +++ b/content/our-company/company-manifesto.md @@ -1,3 +1,8 @@ +/* +Description: Which values underpin SparkFabrik's culture +Sort: 10 +*/ + We require all our employees and contributors to endorse our [Company Manifesto](http://www.sparkfabrik.com/manifesto.html). Sharing our values is a great indicator you can work with us, so please, take a look at them before apply for hiring. diff --git a/content/our-company/impact-scoring-cards.md b/content/our-company/impact-scoring-cards.md new file mode 100644 index 0000000..53d3369 --- /dev/null +++ b/content/our-company/impact-scoring-cards.md @@ -0,0 +1,40 @@ +/* +Title: Impact scoring cards +Description: How accountabilities for the different roles work in SparkFabrik +Sort: 40 +*/ + +Operational roles are described in terms of **impact scoring cards**: documents that describe the expected positive impact a role has to the business. + +As you take on new roles and possibly even move between specialities (we love multi-talented people), your accountabilities will be described by one (or more) scoring cards. + +## Shared accountabilites + +We all share a set of accountabilities, regardless of our job position and role on any specific project: + +### Client satisfaction + +Client is not always right, or they would not turn to us to solve their problems. Still [we value technical quality and good human relations over aything else](https://www.sparkfabrik.com/en/who-we-are.html). Be kind and clear, explain your positions, always focus on customer needs, with open ears and a bright smile and ultimately deliver a great customer experience. + +### Delivering projects + +Simple as it sounds. On time, on budget, on specs. + +### Respecting you colleagues + +Be friendly. Keep in mind that we share the same goal but everybody may have different way to achieve it. Always presume everybody il well-meaning and help her to improve. Don't waste others time: be timely at meetings, point out when other forget something and state your requirements or needs in a clear way so other should not try to figure out what you mean. + +### Supporting your colleagues + +Work with others so that they can grow. Add to their knowledge. Help them if they are in the need but don't steal the spotlight: let them do the work so they can improve. Point out when other can meet a highest standard. Don't hold information that can help other succeed. + +### Following company processes + +We prefer processes and evolutionary agreements over rules. Still we want everybody to follow those processes and respect evolutionary agreements. Everybody is involved in shaping them so everybody must respect them. + +## Per-role accountabilities + +* [Junior developer](/job-roles/role-isc-junior-developer) +* [Senior developer](/job-roles/role-isc-senior-developer) +* [Lead developer](/job-roles/role-isc-lead-developer) +* [Professional](/job-roles/role-isc-professional) diff --git a/content/our-company/roles-in-sparkfabrik.md b/content/our-company/roles-in-sparkfabrik.md deleted file mode 100644 index 10161d9..0000000 --- a/content/our-company/roles-in-sparkfabrik.md +++ /dev/null @@ -1,20 +0,0 @@ -In SparkFabrik we make distinction between **Company Roles** and **Team roles**. - -We don't have such a thing like **Job roles** since we are currently all developers, each one with its skill-level and focus, but pretty all devoted to create digital products. This basically means we won't hire for a _Project manager_. We probably will search for a more or less skilled technician and he will eventually end up doing what he does best. - -The main difference between **Company roles** and **Team roles** is that the latter are generally interchangeable, while the formers tend to be fixed and company-wide. All Company roles are currently covered by company shareholders and founders. - -## Company roles - -* **CEO** - Stefano Mainardi (stefano.mainardi@sparkfabrik.com) and Paolo Pustorino (paolo.pustorino@sparkfabrik.com) are currently CEOs of the company, with equal powers. -* **CTO** - Paolo Mainardi (paolo.mainardi@sparkfabrik.com) is the current CTO of the company -* **CFO** - Marco Giacomassi (marco.giacomassi@sparkfabrik.com) is the current CFO of the company -* **Software Architect** - Alessio Piazza (alessio.piazza@sparkfabrik.com) is the current Software Architect of the company -* **Office Manager & Administrative Officer** - Ayse Meric (ayse.meric@sparkfabrik.com) is the current Office Manager & Administrative officer - -## Team roles diff --git a/content/our-company/sort b/content/our-company/sort index 573541a..7ed6ff8 100644 --- a/content/our-company/sort +++ b/content/our-company/sort @@ -1 +1 @@ -0 +5 diff --git a/content/recipes/access-k8s-sparkfabrik-cluster.md b/content/recipes/access-k8s-sparkfabrik-cluster.md new file mode 100644 index 0000000..2832e53 --- /dev/null +++ b/content/recipes/access-k8s-sparkfabrik-cluster.md @@ -0,0 +1,248 @@ +## Introduction + +Since late 2016 Sparkfabrik's internal services (Gitlab, CI/CD pipelines, SparkBoard, etc) are running into a Kubernetes cluster hosted on GKE/GCP. + +This means that all intermediate environments other than local and production (so integrations, branch builds, epic builds, etc) run in pods into a Google Cloud Engine elastic cluster. The following guide will help you configure your local environment so that you will be able to access services inside pods, open shells into them, read relevant logs and - ultimately - devops all the things! :) + +## Step 1: Authentication to Google Cloud + +As said, the K8s cluster is running over Google Cloud infrastructure. To access it we first need to authenticate on GCP. +Rejoy! Your `sparkfabrik.com` account is enough to perform authentication, but you'll need to open a terminal and [install `gcloud` CLI tool](https://cloud.google.com/sdk/install). Follow the link to get `gcloud` running on your OS. + +Once done, you can authenticate running + +```text +$ gcloud auth login +``` + +Provide your `sparkfabrik.com` credentials. + +Now configure the gcloud docker integration running: + +```text +$ gcloud auth configure-docker +``` + +## Step 2: Accessing the K8s cluster + +Access to the cluster and pods therein will happen using K8s CLI tool `kubectl`. + +On MacOSX `gcloud` command has all that we need to make it work: + +```text +$ gcloud components install kubectl +``` + +While Ubuntu users can enjoy `apt`: + +```text +$ sudo apt install kubectl +``` + +Once `kubectl` is installed `gcloud` command will allow us to access the GKE cluster. +`gcloud` CLI manages so many GCP services and areas that there are commands specific to each one. To tame the complexity, all commands are grouped and subgrouped. + +Right now, the `container` group is what we need: it contains groups of commands by which we can manage GKE aspects, like clusters, node-pools, Container Registry images, and so on. + +We are going to use a command in the `clusters` subgroup of the `container` group to gain access to the cluster. That command is `get-credentials` which fetches credentials for already running clusters. + +Now, the `get-credentials` command takes a single parameter which is the **cluster name**. In our case it is `spark-op-services`. In additions there is a mandatory flag that specifies the region and the datacenter zone inside the region (namely, where is the cluster phisically running?): `--zone`. + +Last but not least, there is a global flag (not specific to the `get-credentials` command), which is `--project`. Projects in GCP are similare to realms. Not to be confused with *K8s namespaces*, (quoting GCP docs) + +> [...] projects form the basis for creating, enabling, and using all GCP services including managing APIs, enabling billing, adding and removing collaborators, and managing permissions for GCP resources. + +So let's specify the correct `spark-int-cloud-services`, that is the project that holds all the production services in Sparkfabrik. + +**Beware**: environment for customers' projects CI are not customers' assets, they are Sparkfabrik assets, payed and managed by us. That's why accessing these environments involves our production project! + +After this long explanation, the following command should be clear: + +```text +$ gcloud container clusters get-credentials spark-op-services --zone europe-west1-b --project spark-int-cloud-services +``` +A laconic message should inform you that *kubeconfig generated an entry for spark-op-services*. No frills but you can pat yourself a shoulder. You're done. + +## Step 3: Fetching info from clusters + +OK, we gained access to the cluster. Mind that's the access is read only, but you have execution permissions (namely you can run `kubectl exec`) so you can enter running pods. + +Let's test if our access is working after all. Run + +```text +$ kubectl cluster-info +``` + +and you should get a response in the lines of + +```text +Kubernetes master is running at https:// +GLBCDefaultBackend is running at https:///api/v1/namespaces/kube-system/services/default-http-backend:http/proxy +Heapster is running at https:///api/v1/namespaces/kube-system/services/heapster/proxy +KubeDNS is running at https:///api/v1/namespaces/kube-system/services/kube-dns:dns/proxy +Metrics-server is running at https:///api/v1/namespaces/kube-system/services/https:metrics-server:/proxy +``` + +If not check you followed all previous steps correctly. +Mind though that depeding on permissions on your account the output of this command may differ and you can see only a subset of the information and/or a specific error message. Keep this in mind before banging your head to the wall. + +## Step 4: Namespaces + +We mentioned projects, which is GCP realms to address accountability, ACLs and other "administrative" aspects related to the GCP services. + +Projects as never to be confused with **namespaces**. The concept of namespace here is intended as typical of Kubernetes: K8s namespaces allow to segment the same "physical" cluster in reserved spaces, like they are separate clusters. + +This makes us sure critical ops won't concur for resources or won't hinder each other in case of malfunctioning, **at a cluster level**. + +We use this feature to make sure each Gitlab project (again, not to be confused with GCP projects: we mean each customer or internal product) that needs build environments in Gitlab, lives in its own namespace. + +Let's take a look at all namespaces available in the cluster: + +```text +$ kubectl get ns +``` + +Here are a dummy response (since this is a public playbook): + +```text +NAME STATUS AGE +bunnies Active 293d +bunnies-demo Active 49d +default Active 1y +gizmo-website-d6 Active 99d +gizmo-website-d8 Active 4d +gitlab Active 345d +gitlab-test-envs-342 Active 23d +ingress-nginx Active 5d +kube-lego Active 345d +kube-public Active 1y +kube-system Active 1y +... +spark Active 345d +sparkfabrik-website-292 Active 245d +... +acme-website-304 Active 126d +acme-website-master-stage Active 36d +acme-website-subsid-stage Active 37d +acme-website-master-dev Active 121d +``` + +Some of the preceding namespaces are real. As you can see names are pretty self-explaining (at least the ones related to projects). But if you are in doubt you can check Gitlab to see which namespace is in use by a specific Gitlab projects. +Follow `Settings -> Integrations -> Kubernetes -> Namespace` in the project page to make sure (proper permissions may be necessary, ask your team leader if you can't access that section). + +## Step 5: Pods + +OK, so far we have this hierarchy: + +```text +GCP Project foo + └── Cluster bar + ├── Namespace foo-bar-alpha + ├── Namespace foo-bar-bravo + └── Namespace foo-bar-charlie +``` + +Now, each namespace can contain pods. For simplicity think of pods like *docker containers with superpowers*. + +Let's list all pods in a specific namespace, say `spark`. + +```text +$ kubectl -n spark get pod +``` +here is the result + +```text +NAME READY STATUS RESTARTS AGE +artifacts-ssh-server-7d9b9db67b-wg4hh 1/1 Running 0 5d +cron-3028794900-znhs8 1/1 Running 0 5d +dashboard-develop-499waf-849b7c95f9-4qxmr 1/1 Running 0 5d +playbook-locke-2261095262-8x8p2 1/1 Running 0 5d +``` + +This command components are: + +* `kubectl` : the client - duh +* `-n spark` : use `spark` namespace +- `get pod` : list all pods + +If we want to view the logs of a specific pod (like issuing `docker logs -f` on a normal container), try + +```text +$ kubectl -n spark logs -f +``` + +for example + +```text +$ kubectl -n spark logs -f playbook-locke-2261095262-8x8p2 + +npm info it worked if it ends with ok +npm info using npm@4.2.0 +npm info using node@v7.10.0 +npm info lifecycle locke-server@1.1.0~prestart: locke-server@1.1.0 +npm info lifecycle locke-server@1.1.0~start: locke-server@1.1.0 + +> locke-server@1.1.0 start /srv/locke +> node server.js + +Express HTTP server listening on port 80 +GET /robots.txt 404 58.932 ms - 2387 +GET /FAQ/who-to-talk-to-for 200 68.338 ms - 11073 +GET /guides/an-introduction-to-docker 200 24.580 ms +``` + +Again, let's see what the command does: + +* `kubectl` : ok, ok... +* `-n spark` : use `spark` namespace +- `logs -f` : spit logs and follow the output (like `tail -f` where `f` stands for *forever*) +- `playbook-locke-2261095262-8x8p2` : the pod name + +So, to sum things up. Since each pod can be seen as a container and each container usually runs a single service (as per best practice), with this swiss-army knife command template: + +```text +kubectl -n logs [-f] +``` + +you can see the logs of a specific service, for a specific project. +As a (almost) real life example *see apache logs for the ACME Drupal 8 website, develop environment* can translate to + +```text +kubectl -n acme-dev logs [-f] drupal +``` + +## Step 6: Accessing pods command line + +Now that we have logs we can debug 99% of the problems like a boss. Right? + +Not really... accessing the shell may be a real boon, even to make live tests and assess the problem (or a solution) quickly. + +To gain access to the shell we'll make use of the mentioned `exec` command of `kubectl` client. Let's try: + +```text +$ kubectl -n spark exec -it playbook-locke-2261095262-8x8p2 -- /bin/bash +``` + +Ta-daaan. You should be logged to the terminal as root, as simple as that. + +Dissecting the command we found: + +* `kubectl` : enough of this, right? +* `-n spark` : again, use `spark` namespace +* `exec` : this works much like in Docker +* `-it` : the same Docker flags, meaning `interactive` and `tty` +* `--` : enforces what follows as positional parameter (shell stuff actually, not partaining to kubectl) +* `/bin/bash` : the shell to be executed (see below) + +**Gotcha**: Please remind that not all containers have bash. Some (many actually) of them are based on Alpine Linux or other distros so the available shell may vary. +Alpine for example sports `ash` so you may have to issue + +```text +$ kubectl -n acme exec -it acme-ash-test -- /bin/ash +``` + +## Conclusions + +This is a small recipe to get you started with our production K8s environments. From here up it's a matter of experience, docs reading and a bit of work by you to increase your devops skills. + +Roll your sleeves and enjoy! diff --git a/content/recipes/projects-environments-availability.md b/content/recipes/projects-environments-availability.md new file mode 100644 index 0000000..78f800f --- /dev/null +++ b/content/recipes/projects-environments-availability.md @@ -0,0 +1,33 @@ +## Projects environments general availability + +Our CI pipelines build a lot of different environments for each project every day. +Aside from branch-related pipelines built for automated testing purposes, we also have more stable environments like staging, demos or develop. + +Those environments live on a Kubernetes cluster (see [Access Kubernetes Sparkfabrik cluster](/recipes/access-k8s-sparkfabrik-cluster)) which under load may scale well over 20 active nodes. To reduce costs **and** to enforce our policies on a healthy work/life balance, we leverage the dynamic nature of the cloud and scale the cluster down to 2 or 3 nodes after 8:00PM. At 8:00AM the environment are respawn transparently. +Same happens during the weekends, so you're not supposed to visit a staging environment on sunday. We really hope you have something better to do! + +So, **if you try to connect to an environment during the _down phase_** and you get something like a _503 Bad gateway_ error, don't fire the alarm! As long as nobody of the operations team communicated scheduled or unscheduled maintenance activities, you environments will be up and running normally the next day. + +## Special needs + +Of course, your project may need a different treatement. + +### I need my project to stay up at night/during the weekend on a permanent basis + +OK, no problem. Reach out for the operations team or write to [support@sparkfabrik.com](mailto:support@sparkfabrik.com) and we'll set it up according to the necessity. + +### I have a demo/event/whatever during the weekend for a single time and I really need a specific project environment to be up and running + +Again, get in touch with the operations team or write to to [support@sparkfabrik.com](mailto:support@sparkfabrik.com) but please **plan the event in advance** so that the team won't have to rush and the risk of errors is reduced. + +### I occasionally need to work on the environment outside normal working hours + +You can reprovision a shutdown environment by yourself. Just run the last deploy job in the project for the necessary environment. You don't need to re-run the whole build pipeline, just the deploy job. This will make the environment up and running up to the next working day. + +## Urgent support + +If none of the above work and something really bad is about to happen, reach out on Slack, phone or mail for: + +* Paolo Mainardi +* Alessio Piazza +* Marco Giacomassi \ No newline at end of file diff --git a/content/resources/promotional-resources.md b/content/resources/promotional-resources.md new file mode 100644 index 0000000..ef4539a --- /dev/null +++ b/content/resources/promotional-resources.md @@ -0,0 +1,12 @@ +This page lists a set of official resources that anyone in SparkFabrik may use for communication and promotion. + +There are always the preferred assets: always make use of these templates and media, unless you have a very good reason not to. + +## Presentation templates + +We rely on Google GSuite for company documents. When you need to create a new presentation, refrain to use local/proprietary solutions and stick with what we chosed. + +We have two layouts for presentations, one with a **light** and one with a **dark** background. +All Sparkfabrik employees may use their company accounts to access Drive and create a new presentation from one of the availabe templates (`Drive -> New -> Presentation -> From template` and choose the `Sparkfabrik GmbH` tab at the top). + +Instructions on how to make the best out of those layouts are in the first page of each template. \ No newline at end of file diff --git a/content/resources/sort b/content/resources/sort new file mode 100644 index 0000000..597975b --- /dev/null +++ b/content/resources/sort @@ -0,0 +1 @@ +35 \ No newline at end of file diff --git a/content/working-at-sparkfabrik/career-advancement.md b/content/working-at-sparkfabrik/career-advancement.md new file mode 100644 index 0000000..1a580c6 --- /dev/null +++ b/content/working-at-sparkfabrik/career-advancement.md @@ -0,0 +1,40 @@ +/* +Description: How people grow and specialize in SparkFabrik +Sort: 40 +*/ + +People in Sparkfabrik should expect to advance on their career path almost constantly. +Growth is awarded by the combination of two mechanisms. + +## Length of service + +We value people to stick with us. +Turnover is costly and investement on team building pays more in the long term. That's why we want people to stay around. We reward anyone with a salary increase after 3, 5, 7 and 10 years of work. This happens automatically, regardless of performance and will go beyond the tenth year. + +## Impact scoring + +This practice is heavily inspired by how [Deeson](https://www.deeson.co.uk) and [Stack Overflow](https://stackoverflow.com/) help their employees achieve their goals and commit to their duties. + +Once every three months, as a developer, you attend an [1:1 meeting](/working-at-sparkfabrik/one-to-one-meetings). Among other things, [Impact scoring](/working-at-sparkfabrik/impact-scoring) will be evaluated and discussed in that occasion, to measure your growth on the various business-impacting aspects. + +Matching (or exceeding) a score of `2.5` for three times in a row will allow you to be assigned a higher role. Stepping up on your career path will then be based on adherence to values and the actual impact you make, not on personal perception of your merit. + +Stepping up will impact: + +* your salary following [this table](/working-at-sparkfabrik/salaries#salary-variations); +* your duties in accordance to your new [impact scoring card](/our-company/impact-scoring-cards). + +``` +NOTE: Salary brackets valures and direct bonds between performance and salary step-ups are still in "alpha" stage. +``` + +## Taking the challenge + +To fullfill [its vision](https://www.sparkfabrik.com/en/who-we-are.html), Sparkfabrik sells and cultivates high seniorities. Thus we expect junior developers to work hard to step up and we **require** that, once the proper goals are completed they will be ready to take the responsibilities of a senior developer. + +Not all senior developers crave to become leaders or top professionals, instead. This is understandable and we respect the choice. +When you as a senior developer meet the requirements for a career advancement, we will present you the opportunity, explain new role's benefits, expectations and duties. It is to you to take or leave. + +We encourage everybody to accept the challenge and may, in many cases, probe people that already refused if we see a new occasion for them to shine, but won't push or force any advancement. + +Still we expect **every senior developer** to constantly increase her scoring and set new professional goals, maybe tackling new [Specialities](job-roles/operations#specialities) in their career, making side steps instead of climbing the ledder. \ No newline at end of file diff --git a/content/working-at-sparkfabrik/impact-scoring.md b/content/working-at-sparkfabrik/impact-scoring.md new file mode 100644 index 0000000..40d571c --- /dev/null +++ b/content/working-at-sparkfabrik/impact-scoring.md @@ -0,0 +1,56 @@ +/* +Description: How we manage performance and rewarding in SparkFabrik +Sort: 60 +*/ + +As every fast growing company we faced the problem of unbiased performance and rewarding mechanisms. + +## Credits + +We stumbled upon [Deeson's model](https://handbook.deeson.co.uk/working-at-deeson/impact-scoring/), which in turn is claimed to be borrowed from [Stack Overflow](https://stackoverflow.com/company/salary/skills/web-developer?e=1&l=1) in the first place so credits go to those two exemplary companies for shaping the model. Thank you guys! + +## Impact scoring + +We evaluate each other based on the desired impact we should get during our daily work. To this extent each role's duties in Sparkfabrik is detailed based on the expected outcomes, not a series of tasks or procedures that people must follow blindly. + +These outcomes is seen as important to business, context and company culture by [company governance](/job-roles/governance). + +## Impact assessment + +In [one-to-one meetings](/working-at-sparkfabrik/one-to-one-meetings) at the start of every quarter (Jan, April, July, Oct), we evaluate a developers against the outcomes listed in their [impact scoring cards](/our-company/impact-scoring-cards) on the same scale from A (and above) to C used by Deeson. + +Each outcome or skill gets one of the following rates: + +* **A+++**: Over the top amazingness. You do, teach and lead. When people think of this skill, they think of you. Even in Sparkfabrik, where people are expected to excel, such a score will be rare. You can aim here but are not expected to, probably this reflects an aspect of your personality or a natural talent. +* **A+**: You do more than your mates expect, even considering we have demandingly high standards. +* **A**: You totally do what's expected, matching our high standards. Undeniably positive impact. +* **B**: Good performance but with improvement headroom. When you have to set your quarterly or yearly professional goal, here is where to put your energy first. +* **C**: This falls way behind our expectations and you need to improve significantly in this area. Such a score will inevitably set a goal for you for the next quarter, when this is expected to have become a B. Scoring the same C over and over is not acceptable. + +An additional value is + +* X – Who is providing the score have no evidence or data to evaluate you on this aspect. + +## Total score calculation + +The total score is calculated by the following formula: + +> (4 x _A+++ count_ + 3 x _A+ count_ + 2 x _A count_ + 1 x _B count_ + 0 x _C count_ + 0 x _X count_) / (_Total aspects count_) + +The resulting score is and average awesomeness indicator you can keep track of. It is bound to grow and when it constantly stays over the _Awesomeness horizon_ reported in your impact scoring card, you'll be eligible for a [career advancement](/job-roles/career-advancement). + +## How assessment happens + +This evaluation is not done by someone in a vacuum. **You are required to attend the one-to-one with a complete score-card** you will have filled with your lead (or senior mate). This means you will have to discuss your scoring, not getting it _from above_. + +If you feel you got an unfair scoring from your lead, **you can have a HR representative to review the evaluation** with you and your lead in advance. + +### For the evaluated + +Although other people may not always be objective in evaluating your impacts, it is important to sustain the conversation openly and get all the reasons behind each score. Even when it's difficult to take, **honest feedback is the most valuable help you can get in your growth**. +Different people will see you in different lights and from different perspectives. This is also food for thought and will help you nurturing soft social skills, useful when you will become a team leader or a top manager. + +### For the evaluator + +It may be difficult and uncomfortable to give honest feedback. You may be tempted to be too soft, too rewarding, shy away from harsh topics, etc. Or, quite the opposite you may be in rage for something really bad that recently happened and be tempted to bash your colleague with a bad evaluation, calling off months of good work and wiping the slate clean. +Having to explain your reasons should help you be more objective. Should the conversation become difficult, try to make her clear how she may succeed in the future instead that just pointing out how bad she failed. But don't sweep the dirt under the carpet. **Remember that the reason you are providing feedback is to allow your mate to do a better job next time**. Always trust she will! \ No newline at end of file diff --git a/content/working-at-sparkfabrik/job-interviews.md b/content/working-at-sparkfabrik/job-interviews.md new file mode 100644 index 0000000..0a0eb16 --- /dev/null +++ b/content/working-at-sparkfabrik/job-interviews.md @@ -0,0 +1,242 @@ +/* +Description: How we perform recruitment meetings and assess skills in SparkFabrik +Sort: 20 +*/ + +We are constantly evolving our hiring skills and practices. + +What follow is a broad depiction of our hiring workflow, from first contact to job offer signing. +[Resource onboarding] has its own dedicated chapter in this playbook. + +## How we collect CVs + +Candidates apply via our company website or by mail, to jobs@sparkfabrik.com. +Please send your CV in the format that more represents your skills and attitude. Beside your CV a bit of a presentation is very welcome as it can help us understand who you are and what you exepect from us. + +## First interview + +We'll propose you a one-hour slot for a first interview. We'll both collect information about each other and will keep a record of our discussion for future reference. +We do our best to get an interview with each and all candidates. Taking the first interview is not binding. If both we and you will be interested in establishing a job relation, we'll proceed to next steps. + +The first interview has the following goals: + +* Getting to know you, your attitude and your expectations in person. +* Giving you a taste of how working for us would be. + +Let's get this out of the way: **we will value our personal impression more than any of the following parameters**. +Anyway, we'll ask you some question and score your replies. Here is how we calculate your scores. + +### Knowledge of the company + +**Max score: 6** + +* You actually know what we do +* You read our [manifesto](https://www.sparkfabrik.com/en/manifesto.html) +* You read this playbook +* You know you offer something we are looking for +* You know we offer something you are looking for +* You get in touch with us in a non-fortuitous occasion (conferences, events, following on socials, etc) + +### Self awareness + +**Max score: 5** + +* You can show you know your strenghts +* You can show you know your weaknesses +* You can elaborate on what you expect from your professional life (short, mid and long term) +* You are aware about how you see yourself in our company +* You can explain why you really want to work with us + +### Attitude and personal skills + +**Max score: 4** + +* You can show passion for what you do, or what you want to do +* You have drive and will, not only at work +* You display or prove good social skills +* You show curiosity and interest about your future in our company + +### Proficiencies + +**Max score: 3** + +* You can clearly elaborate on the skills mentioned in your CV +* You can show some of your work (either personal or professional) +* You can fluently hold a part of the conversation in English + +More notes may be taken our side and maybe we won't go deep into each and every point here, but basically that's what we want to understand about you. + +During the interview we'll devote 10 to 20 minutes replying your questions about the company. +In addition, if you have any financial expectation, please be prepared to state it clearly during the first interview. + +We commit to provide you with a honest feedback within two weeks from the interview. We may also ask your feedback about how the interview went so we can improve our practices. It would be great if you agree to be engaged in such a loop. + +## Technical interview + +Given you roll a critical hit during your first interview, we will call you back to hold a technical interview. + +What "technical" means actually depends on your profile. Maybe you applied as a developer, UX designer, cloud engineer, agile product owner or whatever else. No matter what, in your technical interview we will get a grasp on your real proficiency and operational attitude. We will also answer your questions about how we do things and why. It has to be a conversation so we can both bring some value home. + +Your technical interview score will depend on various aspects, not just production skills. + +### Basic skills and experience + +**Max score: 7** + +* You have good fundations of Computer Science (high-school diploma or college degree, or analogue training) +* You have professional development experience with the programming languages we use the most +* You have professional development experience with the programming frameworkds we use the most +* You know how to test your code and you do it as a standard practice +* You use git in a non-trivial environment (i.e. contribute to projects on github, working in a medium/large team with defined branching model) +* You feel comfortable moving around a Unix shell and may use a Unix-like OS as your main operating system +* You know what Docker is and you make use of containers during your daily job +* You have basic experience with mainstream Cloud vendor services + +### Advanced skills and experience + +**Max score: 9** + +* You have experience engineering and designing complex/multi-service software architectures +* You have experience with serverless architectures +* The mentioned experience relates to the same technologies we are currently using +* You properly document your source code by automatic tools +* Containerized environments are common practice for you +* Continuous Integration is common practice for you +* You have experience with Continuous (or automated) deploy and delivery +* You know how to optimize your application performance +* You know how to check and fix security issues in your code +* You can articulate on your debugging approach, practices and tools +* You have strong experience with mainstream Cloud vendors services +* You have real-world experience with Kubernetes orchestrator +* You are or have in the past been a sysop + +### Soft skills + +**Max score: 8** + +* You can explain how you organize your work to ensure it to be on time, in budget +* You owned a project from both techcnical and organizational sides +* You have experience leading a team on medium/long term projects +* You feel comfortable speaking to an audience +* You are a good communicator +* You can manage a troublesome customer +* You can manage a troublesome colleague +* You provided technical mentorship (or onboarding coaching) to your junior colleagues + +### Agile skills and expertise + +**Max score: 7** + +* You have experience or training in Agile frameworks +* You know what a backlog is +* You played the Product/Project/Process Owner role in a Scrum or Kanban team +* You played the Scrum Master role in a Scrum team +* You was part of a development team using Scrum or Kanban and you can articulate on your experience +* You are certified in one of the named frameworks +* You can explain when and why it is not adviced to use such approaches + +### Passion and contributions + +**Max score: 5** + +* You can show passionate about the work we (us and you) do +* You contribute to FOSS projects +* You maintain or own FOSS projects +* You organize or help the organization of relevant events +* You talk to events, engage in hackathons or are active in a community. + +The technical interview may run from 60 to 90 minutes depending on your proficiencies level, your argumentations and how much fun we all take from it. + +Having the opportunity to take a look at your code or attending a bit of a performance during the interview will surely add useful information and may make you jump the technical challenge if it is totally clear that you are a great fit. + +Of course we are available to give you back information on our technical approach and setup so you can decide if SparkFabrik is a good fit for you also. Ideally we will reserve 10 to 20 minutes out of an hour for your questions. In addition, clever questions often matter more than correct responses. + +## Technical challenge + +Depending on your areas and level of proficiency, we may ask you to endure a technical challenge. The main goal of this activity is to see you at work in our environment. + +Technical challenges here are not setup like school exams and there is not always a bar to skip. It is more of a benchmark that will give us an idea about: + +* How you jump onto problems and tackle them +* How you face a healthy stress +* To what extent you can relate to others around you +* How proficient and productive you are during a (non standard) working day + +On the other hand we want you to: + +* Taste the general mood of our working environment +* Spend some times with your possible colleagues, like coffee-machine chat or lunch together +* Make questions about how we do things and why +* Speak your voice + +Depending on your availability, geographical position and other possible constraints, we can arrange the challenge to be taken _in person_ or remotely. + +### In person challenges + +In this case the actual challenge may change: you might have to produce something with a given technology, analyze a problem and provide your observation, explain and comment on something you produced in your spare time, dismantle a messy requirement in a set of user stories, reproduce a diabolical visual with CSS, or such. + +No matter the challenge nature, you'll be assigned a mentor for it, so you know whom to talk to in case of need. + +During in person challenges you'll have access to the internet, our team, our offices and all the devices, tools and boons you would reasonably get in your everyday job. + +### Remote challenges + +Moving to our offices for the time necessary to take a challenge is not always feasible. For those cases we will ask you to engage in a fictional project development using a Trello agile board. + +We have some **Technical Challenge board templates** availabe for you to clone right away. Each board lists all challenge instructions and rules, together with some useful resources. + +The board also sports a product backlog, describing a fictional product or agile activity. The backlog may be taken in charge directly in the board. A column for notes and asynchronous discussions is also there. + +To take the challenge you must: + +* Clone the board +* Put your name in the board title so we can find your one +* Invite your SparkFabrik mentors to the board (generally the CTO and HR responsible for your hiring) +* Start working on the project + +Your assigned mentor will play the role of the _Product Owner_ for this fake product. +The base technologies may change, depending on what's relevant in your specific case. + +To date the following remote challenge template boards are available: + +* [SparkFabrik development challenge](https://trello.com/b/iZpT5tIa/sparkfabrik-development-challenge-template): develop a simple web application to store and retrieve quotes on a technology of our choice. + +Please, be available to come visit or attend a 2-hrs call to present your work, review it with us and collect our feedback. + +At the end of your challenge you will be assigned a score, like follows. + +### Social attitude + +**Max score: 3** + +* You reached out for help or a simple review by your mentor +* You managed to controll stress and kept a positive mood along the activity +* You spent some time with other colleagues and learned about how life in SparkFabrik actually is + +### Self organization + +**Max score: 3** + +* You were able to set and maintanin tasklist to achieve your goals +* You managed to keep track of your progresses during the day +* You shown a clear understanding of your goal and can articulate about your progression (no matter how much) at the end of the challenge + +### Technical skills + +**Max score: 4** + +* You produced something that actually works +* You can explain (sell?) your choices and tradeoffs +* You can engage in a meaningful conversation with your mentor about how the challenge went, possible improvements and the difficulties you encountered +* Your work is testable, be it by automated tests or by a human following clear scenarios + +### Boons + +Any of the following may increase your score. + +**Max score: 4** + +* It is clear you took fun in the challenge +* You helped us shape the challenge idea or raised the stake +* You put special care in some valuable aspects of your deliverable +* You provide honest and professional feedback on your experience that can help us shape future challenges diff --git a/content/working-at-sparkfabrik/one-to-one-meetings.md b/content/working-at-sparkfabrik/one-to-one-meetings.md new file mode 100644 index 0000000..5aeebd3 --- /dev/null +++ b/content/working-at-sparkfabrik/one-to-one-meetings.md @@ -0,0 +1,39 @@ +/* +Description: How we make sure people grow and express themselves in SparkFabrik +Sort: 80 +*/ + +Our one-to-one meeting is heavily inspired in spirit and practice by the [24 questions to ask in your next 1:1 meeting](https://www.small-improvements.com/blog/24-questions-ask-next-11-meeting/) post by Jason Lauristen on _Small improvements_ blog. + +HR representative and team leads engaging in one-to-ones with developers are required to read the whole post and take inspiration. + +## Scheduling + +Three (3) one-to-one meetingd are scheduled each year. All employees with a role in operations will attend the meeting with a designated HR representative. +Each employee must [get ready for the meeting compiling her ISC](/working-at-sparkfabrik/impact-scoring#how-scoring-happens) with her team leader. +Optionally junior developers ISCs [may be compiled with the help of a senior team mate](/working-at-sparkfabrik/impact-scoring#how-scoring-happens) and their one-to-one conducted by a lead developer. + +## Goal + +The one-to-one meeting is **not** an occasion for control or top-down education. It is a meeting **of the employee and for the employee**, with the following goals: + +* Receive honest feedback +* Provide honest feedback +* Discuss impediments +* Setting near-range goals and check the milestone + +## Agenda + +To achieve meeting goals we set the following agenda over a 60 minutes meeting: + +1. **Warm-up** (5 mins): What is the single most important thing we need to discuss today? +2. **Celebration** (10 mins): What are your most significant accomplishments since we last met? Did you already match the goals you set last time? +3. **Impediments** (15 mins): What obstacles are you encountering right now? Where do you struggle? +4. **Next goals** (15 mins): What are the most important things you will focus on before we meet next (relates to point 1)? Can we state it as a [SMART](https://en.wikipedia.org/wiki/SMART_criteria) goal? +5. **Offer to help** (10 mins): What can we as your managers do better or differently to support you? +6. **Facilitator feedback** (5 mins): What are your feelings on this one-to-one? How should I improve as a facilitator? + +## Outcome + +The HR representative will summarize the outcome and new goals in a private mail with the employee. +The outcome of the meeting will be shared by discussion with the company governance, and potentially team leads if applicable. \ No newline at end of file diff --git a/content/working-at-sparkfabrik/salaries.md b/content/working-at-sparkfabrik/salaries.md new file mode 100644 index 0000000..f6f34eb --- /dev/null +++ b/content/working-at-sparkfabrik/salaries.md @@ -0,0 +1,83 @@ +/* +Description: How we calculate salaries in SparkFabrik +Sort: 30 +*/ + +``` +NOTE: What follows has to be considered in "alpha stage". Actual values and policies will be tested and adjusted during year 2019. +Moreover, a way to reward horizontal growth (learning diversified skills) still have to be introduced. + +Despite that, this page is a sensible reference for our current salaries baselines and increases. +``` + +## Salary calculator + +Wages are calculated starting from [baseline salary brackets](#baseline-salary-brackets), sized by role. +On top of them we add: + +* **Lenght of service increments**: happens automatically as time passes by +* **Job interview scoring adjustments**: determined only at [hiring](/working-at-sparkfabrik/job-interviews) and affecting your starting wage +* **Impact scoring adjustments**: a running process related to your [professional growth](/working-at-sparkfabrik/career-advancement) + + +## Baseline salary brackets + +Here are the baseline brackets by role: + +| Role | Baseline salary (€) | +|---|---| +| Junior developer | 25K | +| Senior developer | 30K | +| Lead developer | 35K | +| Professional | 40K | +| Executive | 55K | + +Baseline brackets are tuned on an [Impact Score](/working-at-sparkfabrik/impact-scoring) of `2`, which represent nothing more, nor less than a perfect match between employee performance and company expectations. + +## Length of service increments + +When your length of service exceeds the following milestones your wage will automatically increase as listed: + +| Years of service | Salary increase (€) | +|---|---| +| 3 | 700 | +| 5 | 1.120 | +| 7 | 1.680 | +| 10 | 2.800 | + +## Job interview scoring adjustments + +During your job interview we will assess your profinciency and skills level so we can place you on the ladder. +Depending on your expectations, the interviewer perception and the overall [job interview score](/working-at-sparkfabrik/job-interviews) you will be assigned an _Impact-equivalent score_. + +A negative adjustment means we feel you can't match our expectations from the start, but we recognize key aspects of your personality that can fill the gap in the very first period of your career. +In this case we will take a chance on you, but also set clear goals for you so that: + +1. Your impact score meets the assessed level at the first check (1 to 3 months from hiring, depending on national contract employee level) +2. Your impact score raise to the average level within the second check (6 months of employment) + +If you score higher during your interview, or if you want to negotiate an initial wage higher than the baseline, you will need to match higher than average expectations: + +1. At the first check (1 to 3 months from hiring, depending on national contract employee level) your score will not be lower than **one step** below the level you negotiated for[1](#fn1) +2. We expect you to arrange a proper development plan to feel the possible gap with CTO and HR during your first 1-to-1 +3. Your impact score must to raise to the average level within the second check (8 months of employment) + +## Impact scoring adjustments + +As long as you repeatedly score above a certain threshold (3 times), you become eligible for a salary increase. +You may require a single score-supported salary increase during the same year that the company will honor without negotiation. + +If you aim to a higher salary for a specific year, you are encouraged to work towards that goal, working to increase the rating for your role's accountabilities or applying for a higher role, with more accountabilities for example. + +The following table represents the adjustements relative to impact scores, per role. To guarantee a fair and inclusive retribution to all company's workforce **these values are not negotiable**. + +| Impact Score | 1 | 1.25 | 1.5 | 1.75 | 2 | 2.25 | 2.5 | 2.75 | 3 | +|:---|---|---|---|---|---|---|---|---|---| +| **Junior Dev** | € 20.000 | € 21.250 | € 22.500 | € 23.750 | **€ 25.000** | € 25.900 | € 26.870 | € 27.770 | € 28.750 | +| **Senior Dev** | € 24.000 | € 25.500 | € 27.000 | € 28.500 | **€ 30.000** | € 31.150 | € 32.250 | € 33.350 | € 34.500 | +| **Lead Dev** | € 28.000 | € 29.750 | € 31.500 | € 33.250 | **€ 35.000** | € 36.300 | € 37.650 | € 38.900 | € 40.250 | +| **Professional** | € 32.000 | € 34.000 | € 36.000 | € 38.000 | **€ 40.000** | € 41.500 | € 43.000 | € 44.500 | € 46.000 | + +--- + +_1: For example, if you negotiated a salary of € 26.875 for a Junior position (corresponding to a score of 2.5), you must take a scorecard with a final score of at least 2.25 at your first 1 to 1 meeting. [↩](#fnr1)_ \ No newline at end of file diff --git a/content/working-at-sparkfabrik/sort b/content/working-at-sparkfabrik/sort new file mode 100644 index 0000000..d8263ee --- /dev/null +++ b/content/working-at-sparkfabrik/sort @@ -0,0 +1 @@ +2 \ No newline at end of file