Hi Abdel!
Software engineering is at the heart of what we do here at giffgaff. Our agile engineering teams build and support a wide variety of applications and services. These combine to create our unique user experience on the giffgaff website, enable a whole range of awesome features via modern APIs and, additionally, enable our internal teams to work in the most productive and efficient ways.
The quality and maintainability of our software is very important to us, so we are looking for engineers with real-world experience of building and running contemporary software, especially in terms of the whole development lifecycle. You will help us to design and implement tightly focussed APIs, user interfaces, services that internalise our core business logic or internal tools and, together with your team, you will support them in production. We want you to share your opinions on how we are doing things - and help us get better!
Basic Expectations
- Love delivering a wow to our members
- Ability to communicate clearly
- Be curious & creative
- Have excellent attention to detail
- Have an interest in technology, mobile and wider popular culture trends
- Able to work under pressure and manage workloads effectively
- Organised, self motivated and accountable for own workload
- A strong team player
Key Attributes & Behaviours
Community & Connectedness
A person with community & connectedness skills has a sense of being part of a larger whole, a desire to contribute, a sense that the other people (i.e. coworkers, users, members) are not simply characters in his or her own movie, but fully-realised individuals.
- Coach & Mentor
- Courageous & Honest
- Code with Empathy
- Open Source Approach
Leadership
A person with leadership skills knows how to develop and follow a sense of purpose, in themselves and in others. They are willing to point out, own, and fix things that are broken about our company and in their own career tracks.
- An Owner’s Mindset
- Good at Persuasion
- A Sense of Purpose
- Do the Next Right-Thing
Technical Capability
A person with high technical capability is technically curious, tackles problems without giving up, and produces solutions that less-experienced folks can use, maintain, and learn from.
- Creative & Curious
- Disciplined & Rigorous
- Fearless & Pragmatic
- Good at Problem Solving
- A Propensity to Ship
Core Engineering Skills
| Must Have | Reading & Writing Code |
| Variables & Control Structures | |
| Debugging & Troubleshooting | |
| IDE & OS Basics | |
| Should Have | Test Driven Development |
| Pair Programming | |
| Clean Code & Refactoring | |
| Version Control | |
| Could Have | Continuous Integration & Deployment |
| Algorithms & Data Structures | |
| Dependency Injection | |
| Mocks & Stubs | |
| Alerting & Monitoring | |
| Functional & Non-Functional Testing | |
| Would Like | SOLID Principles |
| Containerisation & Networking Basics | |
| Twelve Factor App Design | |
| Solution Architecture |
Our Technology Stack
| Client-Side | CSS3 |
| ECMAScript (ES6+) | |
| HTML5 | |
| Jest | |
| React | |
| React Native | |
| SASS | |
| TypeScript | |
| Server-Side | Java 8 with Maven |
| JUnit | |
| Node JS | |
| PHP & Laravel | |
| Python | |
| Spring Framework | |
| Additional | Apache & NGINX |
| AWS | |
| Jenkins | |
| DynamoDB, PostgreSQL, Redis & Oracle | |
| Docker & Kubernetes | |
| ElasticSearch & Kibana | |
| Grafana & Prometheus | |
| Kinesis |
We would like you to complete the following coding exercise - we anticipate this taking you no more than 45 minutes. You can use any programming language you like. Ideally your solution will include unit tests, preferably written using a test-driven development approach. The code related to your solution should be placed in a subfolder and be easy to execute - ideally clone → install → run.
Please commit your code back to this repository frequently. We expect you to complete this exercise within a day, but if takes a little longer don't worry - just let us know when you're done.
NOTE: Due to 2FA if you're using HTTPS to access this repo, you must create a personal access token to use as a password when authenticating to GitHub on the command line using HTTPS URLs.
Good Luck!
Exercise #1 (45 minutes)
Create a web application that lets users share a snippet of text, similar to http://pastie.org. The program you write should follow these specifications:
- The user should enter the text into a text area and save the text.
- The text should be stored in a data store.
- The program should generate a URL that can be used to retrieve the saved text.
- When a user follows that URL, the text should be displayed, along with an invitation to edit the text.
- When a user clicks the Edit button, the text should be copied and placed in the same interface used to create new text snippets.
- Use something other than a primary key for the URL, such as a slug that you generate. Investigate SHA or MD5 hashing.
Generated for abdelelbouhy on Thu Aug 20 2020 at 15:02:29 GMT+0100 (British Summer Time)
- React
- redux
- saga
- styled components
- jest
- react testing library
- express
yarn start or npm run start