Earning a Spryker Foundation Developer Certification

Earning a Spryker Foundation Developer Certification

After spending a year living in Germany and working on developing online stores using Spryker, I decided to pursue a certification. I spent considerable time weighing the pros and cons of continuing to work with this framework before finally deciding to take the exam. In this article, I aim to share my experience, outline some of the exam questions, and discuss the benefits and drawbacks of using the Spryker framework.

Spryker is a modern technology stack (including Mysql, Redis, ElasticSearch, and PHP8.1) that can be used to create complex online stores. While some refer to it as a framework, I consider it a CMS due to its powerful and highly customizable nature. During my experience developing a B2B store, I found the system to be flexible and functional.

Benefits of using Spryker include its speed, layered architecture, and use of the Json:API standard for API interaction. 

  • Once installed, the online store is incredibly fast, with the site not accessing the database by default when opening a page, allowing for quick loading times. The layered architecture, which I had extensively used while working on other projects in Laravel, divides the application into the following layers: Glue API (for interacting with the store through other applications), Yves (frontend of the store itself), Zed (admin panel and backend). The frontend does not interact with the database by default but instead takes data from the cache, with an intermediary (Client) used to access data from the database. The backend is similarly divided into layers: Persistence (for interacting with the database), Business (where the business logic is stored), and Presentation (for displaying the interface).
  • Spryker uses the Json:API standard for API interaction, which I found to be a clear and simple standard that I had already actively used in my Laravel projects.
  • Spryker has a large number of expansion points, which means you can add functionality to your site without getting into the core. There are plug-ins available for almost every possible operation, so you can customize your site to your heart's content. For example, once a customer has added a product to their cart, you can write a plug-in to perform an additional operation during that process.
  • The framework comes with pre-installed code formatting scripts and static analyzers, which standardize the project and make it easier to maintain.
  • Everything in Spryker is brought into the Docker environment, but you can also install it on a virtual machine. Personally, I prefer to use Vagrant.
  • Spryker has easy-to-understand code and a well-structured, easily extensible frontend that uses the Atom approach for structuring.

Of course, like any framework, there are some nuances to consider:

  • Spryker generates DTOs and models automatically, which can be unusual if you're not used to it. DTOs are declared in XML files, and classes are generated from them using a PHP console command. This approach can take some getting used to.
  • Spryker uses the Propel database library, which may seem odd to some developers.
  • The documentation for Spryker isn't always up-to-date, and it's rarely updated. However, there are many videos available, and the code is easy to understand. But it may take time for a beginner to understand the general basics of some topics.
  • The community around Spryker isn't as developed as some other frameworks, which means that finding answers to problems can be difficult.
  • Writing tests in Spryker can be problematic, and there aren't as many simple and convenient helpers as there are in Laravel. Writing tests can take a lot of time.
  • Spryker uses the Twig template engine on the front, which may not be everyone's cup of tea.

If you're interested in Spryker, you should know that passing the exam requires answering 100 questions in 90 minutes. To pass, you need to answer at least 70 questions correctly. Here are some sample questions that you might encounter:

  1. How can you extend a Spryker core class?
  2. Search query debugging.
  3. Where the conversion from Quote to Order happens?
  4. What is a step in the Spryker’s Checkout?
  5. What Component is Spryker's main Dependency Injection mechanism?
  6. What is the major result of the StepEngine?
  7. What Component is Spryker's main Dependency Injection mechanism?
  8. Is the order of QueryExpanders is important?
  9. Why do we use DependencyProviders?
  10. What plugin stacks executes the CheckoutWorkflow?
  11. Why do we divide applications into frontend and backend?
  12. What is the order of configuration loading?
  13. Why do we use Plugins in Spryker?
  14. What kind of component is at the beginning of each pipeline?
  15. What's the difference between `include` and `embed`?
  16. In what layer is the Facade located?
  17. Why do we separate Process and Pipeline?
  18. Where do you define the order of the steps in the checkout?
  19. Where can you add new PHP modules to your project?
  20. What is the default behavior after adding a relationship plugin to the Glue DependencyProvider?
  21. What's the difference between an `atom` and a `molecule`?
  22. What's a `template` in Atomic Design?
  23. Why does Spryker enable you to export the documentation for the current API status quo?
  24. How is data collected during the checkout process?
  25. Is the re-calculated after every change you make to it?
  26. What's BEM?
  27. What stages are there by default in Middleware?
  28. How to efficiently run webpack watchers?
  29. Why should you try to reduce the number of Zed calls to a single one?
  30. What is a TranslatorFunction in Middleware?
  31. What are the main functions for every step in the checkout process?
  32. In what format is the API documentation exported?
  33. Is every stage can pass on its report to the overall import report?
  34. How is the order of results determined?
  35. Where is communication from the frontend applications to the Spryker Commerce OS happens?
  36. What is Jenkins used for in Publish&Synchronize?
  37. What is the synchronize step responsible for?
  38. Where are TransferObjects defined?
  39. What's the correct order of loading for styles, in order to enforce cascading rules, overwrite (and avoid code smells)?
  40. How do you create a database table in Spryker?
  41. How can you most easily debug Workers?
  42. Is CMS pages can have different content per locale and store?
  43. Why do we rely on custom tag `{% define data = {...} %}`?
  44. How does searching through Zed Tables work?

Overall, earning a Spryker Foundation Developer Certification was a valuable experience, and I highly recommend it to anyone interested in developing online stores using this framework.

I'm happy to answer any questions you might have about Spryker, or to help you with any new projects you're considering using it for.

Popular Posts

My most popular posts

Maximum productivity on remote job

Maximum productivity on remote job

I started my own business and intentionally did my best to work from anywhere in the world. Sometimes I sit with my office with a large 27-inch monitor in my apartment in Cheboksary. Sometimes I’m in the office or in some cafe in another city.

Hello! I am Sergey Emelyanov and I am hardworker
Business PHP

Hello! I am Sergey Emelyanov and I am hardworker

I am a programmer. I am an entrepreneur in my heart. I started making money from the age of 11, in the harsh 90s, handing over glassware to a local store and exchanging it for sweets. I earned so much that was enough for various snacks.

Hire Professional CRM developer for $25 per hour

I will make time for your project. Knowledge of Vtiger CRM, SuiteCRM, Laravel, and Vue.js. I offer cooperation options that will help you take advantage of external experience, optimize costs and reduce risks. Full transparency of all stages of work and accounting for time costs. Pay only development working hours after accepting the task. Accept PayPal and Payoneer payment systems. How to hire professional developer? Just fill in the form