Upgrade Your Drupal Skills

We trained 1,000+ Drupal Developers over the last decade.

See Advanced Courses NAH, I know Enough
Jan 25 2021
Jan 25

If you've spent any time in the Drupal community (specifically the issue queues, forums, and Drupal Slack workspace channels), you may have noticed that while the vast majority of discussions are positive, every now and then tempers flare up or less-than-helpful comments are posted. 

To continue to grow a healthy community, we all must work under the assumption that no one intentionally uses language to hurt others. Even so, despite our best efforts we sometimes still use words or phrases that are discouraging, harmful, or offensive to others. We are all human beings who make mistakes, but as members of a shared community, it’s our responsibility to lift each other up and encourage the best in each other. 

When observing negative behavior in the Drupal community, it can be difficult and/or uncomfortable to interject ourselves and find the right words to get conversations moving in a healthy direction. To address this, starting with an idea discussed at a Community Working Group (CWG) workshop at DrupalCon Seattle, the CWG Community Health team has been working on a communication initiative for the Drupal community. It consists of a series of de-escalation templates we have dubbed “Nudges”.

“Nudges”

The team has written five nudges that community members can use when they are faced with one of these uncomfortable situations in the Drupal community. We selected topics that we feel can have the most impact and are easy to understand. Each “nudge” provides context as to why the comment may be harmful and relevant links including our Code of Conduct and Values and Principles.

The “nudges” created to date are as follows:

Inclusive language - gendered terms

This discussion appears to include the use of gendered language in a comment. Gendered language can be harmful to our community because it can signal that we assume that people’s participation in the community is determined by gender.

The shift to gender-neutral language promotes gender equality. Please respect the pronouns that community members provide in their profiles.

For more information, please refer to Drupal’s Values and Principles about treating each other with dignity and respect.

This comment is provided as a service (currently being tested) of the Drupal Community Health Team as part of a project to encourage all participants to engage in positive discourse. For more information, please visit https://www.drupal.org/project/drupal_cwg/issues/3129687

Inclusive language - ableist terms

This discussion appears to include the use of ableist language in a comment. Ableist language can be harmful to our community because it can devalue challenges experienced by people with disabilities.

For more information, please refer to Drupal’s Values and Principles about treating each other with dignity and respect.

This comment is provided as a service (currently being tested) of the Drupal Community Health Team as part of a project to encourage all participants to engage in positive discourse. For more information, please visit https://www.drupal.org/project/drupal_cwg/issues/3129687

Gatekeeping knowledge

This discussion appears to discourage contribution from some participants by assuming a level of education or exposure to information. This can discourage folks that are new to a conversation from asking for help or getting involved. Consider providing the new contributor with links to help them learn the topic or concept.

For more information, please refer to Drupal’s Values and Principles #3 of fostering a learning environment: long-term contributors should be role models by admitting their own shortcomings and mistakes, being vulnerable, and by giving others the same respect that was once given to them. To keep learning read this article about not feigning surprise.

Principle #9 can also be useful here: be constructively honest, and relentlessly optimistic. You can be optimistic and supportive by giving suggestions for how to improve their contributions. By being helpful, you encourage people to accept feedback and act on it.

This comment is provided as a service (currently being tested) of the Drupal Community Health Team as part of a project to encourage all participants to engage in positive discourse. For more information, please visit https://www.drupal.org/project/drupal_cwg/issues/3129687

Cultural differences

This discussion appears to have escalated due to the inclusion of culturally-specific language. This may be harmful to our community as stereotypes can exclude or tokenize community members, devaluing their individual contribution and value. Please avoid language that imposes an identity on an individual or group.

We should be mindful that not all words and phrases translate to have the same meaning. Please be mindful that different cultures may appreciate different levels of directness in their communication styles and that may impact how words are presented or interpreted.

For more information, please refer to Drupal’s Values and Principles about treating each other with dignity and respect.

This comment is provided as a service (currently being tested) of the Drupal Community Health Team as part of a project to encourage all participants to engage in positive discourse. For more information, please visit https://www.drupal.org/project/drupal_cwg/issues/3129687

Escalating emotions

This discussion appears to include escalating emotions, creating the opportunity for miscommunication. The invested parties are encouraged to take a break from this discussion to help gain perspective. It is important to the community that all members are shown the appropriate amount of respect and openness when working together. Additionally, there are resources offered by the Drupal community to aid conflict resolution should those be needed.

For more information, please refer to Drupal’s Values and Principles of seeking first to understand, then to be understood. Assume best intentions of other contributors and suspend judgment until you have invested time to understand decisions, ask questions, and listen. Before expressing a disagreement, make a serious attempt to understand the reasons behind the decision.

This comment is provided as a service (currently being tested) of the Drupal Community Health Team as part of a project to encourage all participants to engage in positive discourse. For more information, please visit https://www.drupal.org/project/drupal_cwg/issues/3129687

Testing strategy

Over the next few months, members of the Community Health Team will be testing these "nudges” in Drupal.org issue queues, forums, and Drupal Slack workspace channels. For now, this will be done by copying and pasting the nudge text and formatting directly into an issue comment or Slack message. Our goal is to create a nudge widget that allows community members to insert one of the pre-written nudges via a token in issue queue and forum comments.

We feel that a gradual introduction to help prevent overuse of these nudges is necessary as overuse may produce its own sort of gatekeeping. This could lead to desensitization to the “nudge” initiative, negating our efforts. The CWG’s mission is to ensure a positive space that is inclusive to all of our members. 

These are early days for “nudges”. We are looking forward to hearing from other community members on how we can improve on this idea. We have been having weekly meetings for nudges and have been documenting everything we've been doing in the Community Working Group issue queue - let us know if you'd like to get involved!

Thanks

Current community members who have been working on this task include: AmyJune Hineline (volkswagenchick), Neil Drumm (drumm), George Matthes (watsonerror), Darren Oh, Donna Bungard, JD Flynn (dorficus), George DeMet, and Mike Anello (ultimike).
 

Jan 25 2021
Jan 25

Newly engineered opportunities have opened the doors for Higher Education institutions to pioneer student, researcher, and funding recruitment. From deeper data applications to mass-scale live debates, the Higher Education sector is going through a digital transformation, with varying rates and approaches.

New data and accessibility regulations, as well as pressure on student recruitment from COVID-19, have required Higher Education institutions to accelerate these 'digital transformation roadmaps'.

Entire organisations have had to react and re-evaluate everything across technology implementation, face-to-face education, student recruitment, and community satisfaction.

The forces of change are drawing in at an unprecedented rate. But are universities equipped to make the quality, long-term adjustments needed?

Senior stakeholders from the University of West London, Manchester Metropolitan University, and Oxford Saïd Business School sat down with Paul Johnson, our Drupal and HE Specialist at CTI Digital to discuss their digital challenges and opportunities during a panel at DrupalCon Europe. We received a unique perspective on various UK organisations' challenges with differing cohorts, scale and complexity, age and legacy systems.

Watch the full panel here, and use the time stamps below to navigate:

[embedded content]

00:00 - Introduction with:

  • Chair and top left: Paul Johnson, HE Specialist at CTI Digital
  • Bottom left: Adrian Ellison, Associate Pro-Vice-Chancellor & Chief Information Officer at the University of West London.
  • Top right: Nick Holland, Head of Digital at Manchester Metropolitan University.
  • Bottom right: Iain Harper, Head Of Digital Marketing, Saïd Business School, University of Oxford.

05:29 - Why The University of West London chose to upgrade and continue using Drupal.

09:50 - How Manchester Metropolitan University built the business case to move to Drupal.

13:29 - Oxford Saïd Business School's experience of using Drupal 8 for multiple years.

19:30 - Managing "HiPPO" (Highest Paid Person's Opinion) and different stakeholders' opinions.

22:20 - Data-driven decision making to changes of an existing platform at Oxford.

24:58 - Managing governance for an entire platform change at MMU.

26:58 - Managing change to projects and their teams over multi-year projects.

33:54 - Lockdown and adapting working with staff and students remotely.

37:04 - Content governance and consistency.

38:54 - Designing and building a website for diverse audiences.

41:22 - What features or capabilities for Drupal should Drupal develop for HE's future?

If you're looking for a digital partner to support your digital transformation. We're the team you're looking for. Our full-service team can take your through discovery and user research to plan and define the underlining requirements that meet your business goals. Our content strategy and development team will then be available to make your digital roadmap become a reality—all under one roof, with years of precedented success.

Get in Touch

Jan 25 2021
Jan 25

If you're like most modern Drupal developers, you use the excellent Address module to collect country-aware address data on entities that require it. But, what do you do with the output of address data?

Granted, you can use the Geofield module ecosystem to turn that address data into embedded maps on your site, but if you're looking for a simpler solution, consider using the Address Map (& Directions) Link module - this module does one thing and does it well: it allows you to link the address to an external mapping service of your choice via additional settings on the default Address formatter.

Address Map Link module screenshot

So, the next time you use the Address field, consider this easy solution to improve the usefulness of that data!

Jan 22 2021
Jan 22

The way websites are perceived has changed a lot recently. The audience has started demanding more and more from the web and web developers have to provide for all the demands. What this has resulted in is the transformation of websites for the better. 

The features that today’s sites are packed with were hardly even imaginable a decade ago. A website, a web application or a mobile application, all can do wonders for the users, satiating them with their experiences. 

So, when building a website, you have to be extremely considerate of the software you use and the technologies that accompany it as it is these that will make an astounding difference in your site’s overall appeal. 

On the same note, I will try to enlighten you about one such software and technology pair that has made websites as appealing as both their developers and users want them to be, and that is Drupal and Angular. So, let’s get right on it.

Drupal’s Essence 

The Drupal logo is seen.

In essence, Drupal is a provider of innovative digital experiences that set your websites apart from the ordinary. 

Being a content management software, Drupal can make websites that actually set standards for others to follow. Convenient content authoring, impeccable performance and outstanding security are some of Drupal’s most renowned features. Whether you want flexibility and modularity or integrated digital frameworks, Drupal can ease your needs. 

With multiple add-ons;
With numerous modules; 
With several themes; 
With various distributions; 
And with multitudinal mix and match options, Drupal’s core abilities are magnified by a landslide. 

Now, the Drupal 9 has paved the way for an even more delightful web building experience. Known to be the easiest upgrade in over a decade, it is going to take Drupal 8’s innovative streak even further. Here’s everything you will want to know about Drupal 9.

NBC, MTV UK, Amnesty International and University of Oxford are some of the elite clientele of Drupal and their websites are a true epitome of Drupal’s abilities. 

“Make something amazing, for anyone”  - a motto of a kind should have been pretty self explanatory of Drupal’s essence, but it has acquired bragging rights and rightfully so. Hence, a little more elaborated boasting was mandatory.  

Taking the Headless Route 

Drupal’s abilities, features and all that it encompasses has made it one of a kind. At the top of the list of its unique abilities is its ‘headlessness’. I know this is going to sound strange, but it is a fact and a very beneficial one at that. 

Like I mentioned above, Drupal has all the features to make a web experience up and running and quite smoothly too. Having so many modules, themes and distributions, web builders would not find any need to look for additional features in their site. The entire web project would be placed inside Drupal and it would be entirely responsible for all of the project's needs. 

However, sometimes developers want to try more and Drupal lets them. It essentially removes its head, that is the presentation layer, to make room for a different one, that is other frontend technologies, and lets the developers only utilise it for its body, that would be its backend capabilities. So, in a truly Headless Drupal architecture, you would only use Drupal as a content repository and nothing else. This is also known as Decoupled Drupal, since you are going to be separating the couple, the frontend from the backend. 

When you go headless, you will be parting with Drupal’s frontend capabilities, but the separation does not have to be final. Decoupled Drupal comes with two options for you to choose from; 

  • One is the fully decoupled Drupal or the Headless Drupal. This completely segregates the two ends of a web project. Drupal takes command of the backend, while other frontend technologies, like JavaScript take hold of the frontend; both being connected by an API for the transmission of the information. 
  • Then there is the less final, progressively decoupled Drupal. In this architecture, you are still left with some of Drupal’s frontend capabilities. This means you can combine other frontend technologies to work with Drupal and get the most for your website, without losing Drupal out-of-the-box capabilities.  

Do you benefit from the going Headless?

Drupal has numerous benefits when you use it as a whole for building projects from the ground up; however, the decoupled Drupal comes with a tad more advantages. That is why it is becoming a vogue today, with several traditional Drupal sites converting themselves into the decoupled ones. 

So, yes, you will indeed benefit from taking the headless route. 

Aids in publishing on multiple platforms 

Going Headless makes it very easy to publish content on multiple platforms, be it your primary website, social media handles, intra sites or even print and media. The write once, publish everywhere features lets you capitalise all the IOT devices and publish on them.

Aids in maximising user experience 

The growth of your online business is directly proportional to the user experience you provide. The better the UX, the higher the conversions. UX is further dependent on your site’s performance. Having two separate ends enhances it, the request time is reduced with a client-side server and your site would be nothing but speedy.

Aids in making your team independent 

When you have a separated front and backend, that means you have the power to work faster. The frontend developers will only be focused on the user interface and the backend developers will only need to worry about those needs. Your teams can even make changes on their respective layers without having to worry about impeding the work of the other. All of this results in faster work speed and increased efficiency.  

Aids in enhancing creativity 

Drupal is a robust software, yet it can be stuff sometimes. You have to follow its guidelines and set standards or the work won’t get done. This hampers the development team’s creative flair. However, by adopting other, more flexible, frontend technologies through decoupling, you can let your creativity run free. 

Aids in faster upgrades 

Headless Drupal separation of concerns makes it simple to upgrade without impeding on your site’s current workings. It also gives you the opportunity to test on a dummy web service, which acts as a mockup, aiding you further in making revisions to your site.

Aids in taking advantage of JavaScript 

The final and probably the most compelling advantage of decoupled Drupal is the use of JavaScript. JS has the ability to make websites extremely interactive, with features like destructed assignment and arrow functions in the latest version. Since site interactivity with the user has taken precedence over anything else, decoupling has become more of a need. React, Angular and Vue are some of the most eminent JS frameworks that are used when going Headless. 

To know everything about headless Drupal and its suitability, read our blog, “When to move from monolithic to decoupled Drupal architecture.”

In Comes AngularJS

Now that we have discussed one part of the title, let’s move on to the second, which is AngularJS. You may know that a major reason behind going headless is the fact that it allows the user to incorporate other frontend technologies into Drupal and get the desired web building experience and the product as well. AngularJS is one such technology. Let’s get into its details.

The logo of Angular is shown.

What is AngularJS?

We ended the headless Drupal discussion at JavaScript, so it is only wise to begin the new one with JavaScript as well. AngularJS operates on JavaScript, being an open-source front-end web framework. It helps you create dynamic web pages through its structured framework. 

HTML’s template language is integral when building web projects. However, there is one problem with its use. HTML has proven its potential for static documents, however, when dynamic views come to play, it becomes lacklustre and chaotic. Now, in such a scenario, AngularJS comes in to save you. It allows you to extend the HTML vocabulary for your project, paving way for your developers to work in an environment that is expressive, readable and fast to develop. 

There aren’t many frameworks that have the ability to solve the HTML conundrum, what they do instead is abstract away HTML, CSS and JS or they might manipulate the DOM. covering up the problem is not really a solution and AngularJS provides an extension of HTML, making it worthy for dynamic views. 

The crowning jewel of AngularJS is its ability to adapt. It can easily be modified or replaced to make it suitable for any of your development needs. Whatever your workflow and feature require, AngularJS has the ability to provide. The fact that it is completely extensive and compatible with other libraries. 

Talking about the technologies Angular belongs to, it is part of the so-called MEAN stack. The MEAN refers to MangoDB, Express, Angular and Node.js. The combination of these four accounts for a firm ecosystem that is also backed by full-stack developers.

Let's look at AngularJS’ market share to understand its prominence even more. 

A list of the top industries using AngularJS is shown.(a)A list of the top websites built on AngularJs is shown.(b)A list of the countries is shown that use AngularJS with the number of websites using it.(c) | Source: SimilarTech

All of these numbers are pretty self-explanatory of AngularJS’ popularity in the market. 

What are the benefits?

Built in 2010 by Google, which is to this date responsible for its maintenance along with an entire community of developers and companies, AngularJS is quite a technology to utilise for your project’s development. It’s numerous benefits will make you believe me even more. 

Angular is flexible 

Angular by nature, or maybe its build, is extremely lightweight and concise. What this translates into is a working environment that is so extensible that you would be able to create things you never deemed possible. 

Angular uses directives 

Like we discussed above, Angular is unique because it is able to extend HTML. And this is possible because of Directives. Through these, special behaviours are assigned to the Document Object Model, which in turn enables your developers and engineers to use HTML and create dynamic and rich content. 

Angular binds your data two ways 

It is a known fact that Angular gives your developers the power of developing at a much faster rate. Multiple views, asynchronous technique, SEO friendly development are amongst a few of the immensely impressive features of Angular. And all these are possible because it works on the MVC architecture.  Because the Model-View-Controller framework synchronises the Model and the View, so when one changes, the other changes automatically. And work gets done faster. 

Angular injects dependencies 

When developers code, all the different pieces of that code have to interact with each other. This interaction also means that they are going to be affected by each other;s changes. This scenario is defined as dependencies. 

AngularJS solves this issue of dependencies in code simply by decoupling them using injectors. A dependency injector has the ability of making individual components easy to manage, test and reuse; maybe even more than before. 

Angular aids testing 

Lastly, AngularJS also makes unit testing pretty convenient for you. It has a built-in setup that makes testing the code much simpler and faster for your developers. 

The things you can do using AngularJS are much more advanced than Drupal’s frontend capabilities. So, combining the two is going to be a partnership that will make work wonders for your web project. 

The best of both worlds

The Drupal and Angular logos can be seen together.

Up until now we have been talking Decoupled Drupal and Angular individually and they have certainly been impressive enough. Both Drupal and Angular are equipped to build projects that will cater to any and all of your needs.

When paired together, they seem to be packing a punch. Your web projects will be able to accomplish so much more. Let’s have a look at some of the most intriguing features.  

Performance that will leave you spellbound 

A site’s performance is what sets it apart from others, it is what will keep your visitors scrolling through your pages and finally clicking on that coveted Buy Now tab. So, how do Drupal and Angular together help in improving your site’s performance?

If I talk about Drupal, it provides functionality in tons. Just working with drupal can make your site perform impeccably. Now, if you combine the Angular technology with it, you will end up with a performance that would be even better. That is because you will be able to offload business logic to AngularJS as it is client-side, you would not be able to do it completely, but even some part of the offload can be extremely effective. 

Furthermore, when you go Headless and take up Angular, you would use the latter for theming and presentation, while Drupal would only be responsible for the backend data source. This would enable you to move the display logic to the client-side, helping you in streamlining the backend. The resultant site is going to end up as fast as The Flash himself, for lack of a better metaphor.

Coding that will free up your developers 

When you use Drupal to build a regular, basic website, you would not need to write a lot of code and the development work would also be quite minimal. Yes, a basic Drupal site would not be feature packed and that is where AngularJS would enter. 

AngularJS will take an ordinary Drupal site and make it extraordinary, so to speak. Angular can make sites more interactive, more dynamic and richer in experience, and complex coding would not be a prominent part of this picture. 

By using directives, HTML, plain objects and other features, the JS framework requires very little effort from your developers in terms of coding. Despite the minimal efforts, you will still end up with the interactive pages that were only possible to get with a complete JS coding. 

Logic that will clean up your code structure 

You remember we talked about the MVC architecture in the previous section? I would have to be redundant and mention it again since it serves a lot of benefits when going headless. 

The Model-View-Controller architecture works on a principle that essentially segregates itself into three parts; 

Business logic;
Controller logic; 
And model logic. 

This results in a separation of your application logic from the user interface. And why is that essential? Because it aids in making the code structure cleaner, without much redundancy and more clarity. 

Imagine if one of your developers has to leave in the middle of your project. This could become devastating for your project, but an isolated code would make it extremely convenient for any other developer to pick up the left pieces and continue with the same effectiveness as before. 

AngularJS and Drupal also work well together because the MVC framework helps in eliminating a lot of backend logic from Drupal. Consequently, your site will turn out to be both extremely lightweight and efficient.

Security that will keep you shielded

Both Drupal and Angular are backed by a massive community. This means that there all the security features are always under scrutiny and the chance of things going sideways is slim to none. 

Add to this the fact the Drupal’s security protocol, if followed to the T will provide you an assurance of safety that not many CMSs can. Further adding to this, the combination of Headless Drupal and AngularJS will enable an extra layer of security to your site because there won't be any direct server-side interaction, the browser will only communicate with AngularJS.

The result of all of this would be that your site will become immune to malicious code that the notorious hackers are known to inject in your databases. And all would be well in the web world.

Everything about leveraging decoupled Drupal and different frontend technologies can be accessed here

Summing Up 

When decoupling is considered, tapping into the available frontend technologies is the paramount concern. JavaScript is most definitely at the forefront of the developers’ mind for the presentation layers. 

Angular is one of the flag bearers of JavaScript, and Drupal is a prominent name in the CMS world. Be it dynamic sites or interactive interfaces, the possibilities of with the combination of these two powerhouses. So, when are you taking them up?

Jan 21 2021
Jan 21

Our community is in need of additional drupal.org site moderators (formerly "webmasters") to assist day-to-day site moderation tasks.

Over the past few years, the number of active site moderators in the Drupal.org site moderators queue https://www.drupal.org/project/issues/site_moderators?categories=All has decreased significantly. Recognizing that this isn't a sustainable situation, the current active site moderators have embarked on an effort to recruit new volunteers.

Responsibilities of a site moderator

Site moderators are primarily tasked with responding to issues in the Drupal.org site moderators issue queue and the ongoing on-boarding of new community members. These tasks include:

  • Responding to issues in the Drupal.org site moderators issue queue.
  • Reviewing posts flagged as spam, deleting spam, and blocking users who post spam on Drupal.org web sites.
  • Confirming new Drupal.org users.
  • Responding to reports of projects posted on Drupal.org that do not meet community norms.
  • Other related tasks as described on the Moderation and maintenance documentation page https://www.drupal.org/drupalorg/docs/maintenance.

Process to become a site moderator

In order to become a site moderator, there are a few easy steps:

  1. Familiarize yourself with site moderator responsibilities via the project https://www.drupal.org/project/site_moderators and the Site Moderator role description. https://www.drupal.org/community/contributor-guide/role/drupalorg-site_moderators
  2. Announce your intent to start participating in the #drupalorg-site-moderators channel in the Drupal Slack workspace.
  3. Begin participating in site moderator issues https://www.drupal.org/project/issues/site_moderators?categories=All - it is recommended that at first you ask questions and propose solutions to issues in a way that current site moderators can provide useful feedback.
  4. Once you have participated in the site moderator issue queue enough that you feel that you have a good handle on its various processes, open a new issue in the queue asking for the Drupal.org "site administrator" role. It is highly recommended that you are active in the issue queue and Drupal Slack workspace channel, and have interacted with the other active site maintainers before applying for this elevated role.

Why donate your time to Drupal?

If you've made it this far, then the obvious question is "why should I become a Drupal.org site moderator?" Develop and exercise your people-skills while helping the Drupal community become a more sustainable, welcoming, friendly, and productive place. Regardless if you’re a developer, becoming a site moderator is a pretty straightforward way to build those skills.

In addition:

  • You'll work with other site moderators around the globe, building up your Drupal community network.
  • You'll have the opportunity to help nurture new community members in a meaningful way.
  • You'll have the opportunity to earn contribution credits.
  • Having the "site moderator" role is a position of leadership in our community. https://www.drupal.org/about/values-and-principles#choose-to-lead
  • If you or your organization uses Drupal and is looking for a way to give back, this is a small thing that will have a big impact.

First step

Interested? If you have any questions, pop into the Drupal Slack workspace #drupalorg channel and ask away. When you're ready, start with steps 1 and 2 above and start your journey!

Thanks to Donna Bungard (dbungard https://www.drupal.org/u/dbungard), Darren Oh (https://www.drupal.org/u/darren-oh), Jordana Fung ( jordana https://www.drupal.org/u/jordana), and Mike Anello (ultimike https://www.drupal.org/u/ultimike) for assisting with this blog post. 

Jan 21 2021
Jan 21

Mobile app development is not rocket science in today's day and age. Making a good mobile application, however, is a process that requires a very lengthy pre-planning process. It could be as simple as launching the IDE, putting a few items together, doing a quick round of screening, and uploading it to an App Store, all achieved in half a day's work, to create your mobile application. Or you can render it a deeply engaged process involving comprehensive up-front design, QA testing on a range of platforms, accessibility testing, a complete beta lifecycle, and then various forms of deploying it. Your vision is given form by the direction you chose. With that said, here is a look at the lifecycle of app creation and the priorities and obstacles along the way.

1. The Research

Even if yours is only for getting a mobile app presence, every app development starts with an idea. Refine the concept into an application on a solid basis. Make sure that your initial research covers your buyer persona's real demographics, motivations, activity trends and objectives. Keep the end-user in mind during each point of the process. Now, try to think of the lifecycle of your client, until their features are pinned. They need to be obtained, transformed, maintained and their loyalty nurtured after you meet them. In the end, you can understand how the digital product would be used by the client. Doing this will put you on a solid footing at the very beginning, and your transparency will give you and your investors much-needed confidence.

This phase is critical because you lay down the required groundwork during this phase for what is to come next. Before heading on to the next step, do your bit of intensive studies and strategizing. And evaluating competition is another essential part of this point. A thorough review of the software of your rival can assist you to find out what features are lacking in your software so that you can incorporate it into your app to make it pop out.

2. Wireframing

The next step is for the app to be registered and wireframed. While time is not on your side at this stage, it allows you to uncover usability problems by actually drawing thorough sketches of the envisaged product. Sketching does a great deal more than just tracing the moves. It can be a strong instrument for cooperation and interaction. Wireframing will help refine the concepts when you're finished sketching and organise all elements of the design correctly. In this initial step, you can resolve any technological limitations found in the context of back-end development. Now, try to build a better picture of how a working app can fuse the suggested designs and ideas. To show the relationship across each screen as well as how the users can move through the app, you can also establish a roadmap or a template. Look for ways to integrate the brand, concentrate on the user experience and take into account the variations in how people use a mobile phone app and a mobile browser.

3. Technical Feasibility Assessment

Now though, you may well have a good understanding of the graphics, but you must still take into account if the back-end frameworks would be able to maintain the interface of the app. You need to gain access to public data by accessing open APIs to know if the concept of your application is technologically possible. There will be various specifications for an app, based on its size (smartphone, tablet, wearables, etc.) as well as the system (iOS, Android, etc.). The team will have fresh concepts for the app by the conclusion of this phase or have concluded that some of the preliminary functionality is not feasible. Brainstorm a little at this stage, ask questions, and check the status.

4. Prototype

Build a simple prototype. The keyword here is Rapid. Before and until you contact the Software and see how it functions and flows, you can't fully grasp the touch experience. But, to see if it works with the most popular use case, create a prototype that brings the app idea into the hands of a user as soon as possible. For this step, use rough and not detailed wireframes. If you are bringing stuff in the right direction, this will help you see. Include in this phase the stakeholders, enabling them to access the prototype will offer you their input and apply it in your work. And, also, the prototype will provide the first look at your app to various stakeholders and will help you verify the data you have collected.

5. Design

You can plunge into programming once you get this phase-out of the way. The connection between design elements is architected by your user experience ( UX) designer, while the user interface (UI) designer creates the app's look and feel. With its various review steps, this is a multi-step process. Blueprints and visual direction are what you get, reminding the engineers of the final product envisaged and how interaction can shift, feel and flow. This design process can be done in a single afternoon or can take a team a whole lot of hours, depending on the project scope and app budget. And by playing around with the layout of control, buttons and other graphic cues, remember to make several variations of a computer. The more your product differs, the greater the chances that your UX will be original. Designing applications can prove to be a multi-step process, and the results should be simple visual instructions that provide the final product with an abstraction.

6. Develop

Generally, the production process begins very early on. In reality, a working prototype is created after an idea gets some maturation in the conceptual stage, validating functionality, assumptions, and helping to provide an understanding of the scope of work.

The app goes through a series of phases as the production progresses. The core functionality, while present, is not verified in the initial stage. Seeing that the app is very buggy, there is no non-core functionality at this stage. In the second level, most of the proposed functionality is implemented. Ideally, the software has gone through light testing and bug fixing, but there may still be some problems. In this step, for further testing, the app is released to a certain group of external users. The app will pass to the deployment stage after the bugs in the second stage are patched, where it is ready for release.

Make note of the agile approach if yours is a complicated task where user requirements change frequently. Flexible preparation, progressive growth, early implementation and continuous changes are supported by this. A large framework can be split apart into smaller components, and each of these minor bits can be added to agile methodology.

7. Testing

It's a good way to check early and often in mobile app growth. Doing so will keep your final expenses down. The deeper you go through the growth cycle, the more expensive it becomes to patch bugs. When building the different test cases, relate to the original design and development documents.

Application testing is comprehensive, so ensure all the relevant aspects of it are covered by your team. Usability, functionality, protection, interface tests, stress, and performance should be checked for the application. You explore whether or not your mobile app works with your intended users during user acceptance testing. To test this, provide a few individuals in your target audience with your app and ask specific questions. You know your approach "works" after your application passes the user approval test, and further make your application available for a beta trial, either by the registration of previously established groups or an open request for participants. The reviews you get from beta users will assist you to find out if the features of the app perform well in a real-world situation.

8. Deployment

Your app is ready for submission. Select a day and initiate a formal launch. The rules for the release of an app are appropriate for various application stores. And note, this is not the end. Creation of apps doesn't stop at launch. Input will flood in when the application gets into the hands of consumers, and you will need to integrate the input into future iterations of the software. Updates and new features will be required for any app. Usually, the development cycle starts again as long as the first version of the software is released. To sustain your item, make sure you get the resources. Bear in mind that it is a long-term investment, aside from the money spent in creating a digital product.

The key thing to note is that a constant and continuing phase is the creation of apps. It just doesn't end with the release of the final production, it's just the beginning. More reviews and suggestions will come in as the app gets more users, and you will have to incorporate the requisite improvements in the form of potential app updates. Follow the above steps to make your app hit the pinnacle of success if this is your debut attempt at app growth. The mobile app development process is very intricate. Mobile app development companies and agencies are in great demand because the customer base for it is large. The back end of your mobile app is made by app developers using specialised mobile app development software and tools. Developing the apps we love and spend our days’ scourging is being created with a lot of care by mobile app development companies. Mobile app development companies in India have greatly evolved and are at par with others on a global scale.

Jan 21 2021
Jan 21

Our normally scheduled call to chat about all things Drupal and nonprofits will happen TODAY, Thursday, January 21, at 1pm ET / 10am PT. (Convert to your local time zone.)

No set agenda this month, so we'll have plenty of time to discuss whatever Drupal-related thoughts are on your mind. 

All nonprofit Drupal devs and users, regardless of experience level, are always welcome on this call.

Feel free to share your thoughts and discussion points ahead of time in our collaborative Google doc: https://nten.org/drupal/notes

This free call is sponsored by NTEN.org and open to everyone.

View notes of previous months' calls.

Jan 21 2021
Jan 21

It's essential that companies have a presence online in the digitalised global economy. Enterprise web development is thus, naturally, an important opportunity for a company to achieve online exposure and enter a broader audience. Web creation for business is essentially the method of creating a company-level website.
Enterprises run the gamut from mid-sized to large-scale enterprises and institutions (governmental, for-profit or non-profit) to organizations and collectives (healthcare, education, philanthropy, or any other group with a common purpose or similar goals).


Developing a company website requires a huge joint project with a web development firm, as the design of an organization website is extremely complicated. In this blog, we'll address what web commerce is, what it does and, most significantly, what it can do for your company.


Significance of Enterprise Web Development

Web creation provides a global platform essential for communicating the business model of a company to specific customers. Business websites are an excellent channel for the promotion of products, services and even ideas.

In addition, with a growing amount of business being done online, it is safe to assume that in the coming years a company without a high-quality website will find it extremely difficult to maintain itself.

A website is the initial point of interaction with prospective clients in the modern age, and having a beautifully crafted website can help to improve the brand and increasing customer retention. mid-to client website goes beyond advertising and helps companies to conduct a significant portion of online operations effortlessly.

They vary from receiving and executing requests to supplying consultancy services and responding to inquiries, to offering information via blog posts or video clips.

Because of advancements in web technology and increasing value of enterprise web development, websites and web applications are predicted to become more creative and offer companies and customers several more advantages.

Read more to understand how web development for enterprises will increase your business opportunities.

How Does an Enterprise Website differ?

Since the best enterprise website designs are usually designed for mid-to large-scale enterprises, it demands several more features and resources to address different needs than a standard website. This also varies in the kind of content management system employed.

The Enterprise Content Management (ECM) program used by business websites requires many tools, modules and functions that satisfy the plethora of detailed criteria of different stakeholders (customers, investors, partners, suppliers, and others).

An enterprise website also includes resources and approaches for branding, content creation and marketing approaches such as SEO and keyword rankings, inventory management, code incorporation and much more.

While the structure and efficiency of enterprise websites rely on the purview of a business, business websites are generally needed to accommodate increasing traffic, rapid surges in demand and need to be flexible to expanding operations in the long - term.

Scalability is also an essential factor as a website should be able to accommodate potential development without impacting the pace of the site and the user experience. Overall, a company website is considerably more sophisticated and comprehensive to meet the capability and a wide range of features needed for a business.

Therefore, enterprise website management is significantly unique and requires careful preparation. Enterprise web development involves resources which involve, but are not restricted to, UI and UX design technique, database building, content management system, website maintenance, customisation, brand assessment, and analytics configuration.

Bearing in mind the diverse problems and requirements of an enterprise website, it is important to cautiously choose a web development agency that can handle these nuances. In reality, it is strongly advised that you look for an agency that can modify the website of your organization after having considered its priorities, scale, long-term goals, vision, mission and value proposition for the business.

Some of the best enterprise web development tools are;

Angular.JS

Chrome DevTools

Sass

Grunt

CodePen

TypeScript

GitHub

NPM

JQuery

Bootstrap

Visual Studio Code

Sublime Text

Sketch

1) Angular.JS

AngularJS can help you expand your vocabulary to HTML. HTML is fine for static documents but dynamic displays won't work. AngularJS can provide you with an environment that can be descriptive, readable, and rapid to create. It provides the toolset that will help you to construct the framework for developing your application.

This entirely extendable toolset is capable of interacting with other libraries. It offers the ability to modify or remove the features according to your production workflow.

2) Chrome DevTools

Chrome gives Web developers a selection of tools. Such tools are built into Google Chrome. This has the features of displaying and modifying the DOM and layout of a Tab. With Chrome DevTools, you can display notifications, run & debug JavaScript in the browser, edit on-the-fly pages, easily diagnose the problem and improve the pace of the website.

3) Sass

Sass is the most sophisticated and functional CSS-extension language. It will allow the use of variables, nested rules, mixing and functions. Sass will enable you to share the concept around and inside projects.

4) Grunt

Grunt is a JavaScript function runner, perfect for automation purposes. It will perform most of the routine work including mining, compiling, checking units, etc...

5) CodePen

CodePen is an online platform with the features and functions for front end design and distribution. You can use CodePen to build the whole project as it contains all of the IDE features in your browser.

6) TypeScript

The language of open-source coding is a typed JavaScript superset. For plain JavaScript, it will generate the code. It supports every client, host, and operating system. You can use the current JavaScript code and call JavaScript to the TypeScript code.

7) GitHub

GitHub is a Website for Software Development. It will assist in running the programs. GitHub will allow you to build a review system and incorporate it into the workflow for your application. This can be integrated into the software that you already use. It can be deployed as a self-hosting or cloud-hosting solution.

8) NPM

Using critical JavaScript software, Npm can help you create stunning stuff. This has Group Leadership functionalities. No configuration will be needed. It offers auditing security mechanisms.

It offers security expertise, de-duplicated growth, intrusion detection and unrivalled assistance for enterprise-grade solutions.

9) JQuery

This JavaScript library is designed to allow traversal and manipulation of HTML DOM tree simplified. This also allows for handling and animation of events. It is loaded with features.

10) Bootstrap

Bootstrap is the toolkit that allows you to create with HTML, CSS, and Javascript. Bootstrap is used to build mobile-first sensitive projects over the internet. This library of front end components is an open-source toolkit.

11) Visual Studio Code

 Visual Studio Code can run anywhere. It has IntelliSense technology, Debugging, Built-in Git, and plugins to include languages, templates, debuggers, and more. It supports systems running Windows, Mac and Linux.

12) Sublime Text

Sublime Text is a scripting language that is suitable for javascript, markup, and prose. It supports divided editing mode. You'll be able to modify files side by side with the aid of this feature. This may be accessing the same file at two different places.

This offers even more features such as customizing something and fast project move. Sublime Text allows Platforms for Windows, Mac and Linux to run.

13) Sketch

Sketch offers a smart interface to help you build flexible, reusable components that can be resized to suit the entire content. It comes with hundreds of plugins. It supports Mac OS and can be used to build animations on timelines.

7 Website Features That Help Businesses Grow:

Well-designed configuration of the site

Navigating should be simple and encourage visitors to find what they are searching for at a cursory look.

Efficient development and engineering

A growing number of visits to the site use portable devices such as mobile phones or tablets to search online. A customized web design that adapts to the user experience by changing the layout accordingly, such as the screen size, interface and rotation.

A website that appears appealing, whether accessed from a mobile phone or desktop and easily loads to all platforms (because mobile devices usually have lower internet speeds than desktop computers), would appeal to all consumers.

What Can Business Do For You

Defines explicitly what the business model of the company is and how it will benefit you.

Lead Generation and Participation

Create marketing leads from clients, inquiry forms and methods, and techniques specific to your company.

Notifiable material

Publish material not only promoting the goods but also offering information that targeted customers are looking for.

Calls-to-Action

Including simple calls-to-action is a successful approach to enable clients to start a conversation. One of the best ways to increase the conversion level is to make it simple for customers to reach you or buy your product or service via direct calls-to-action.

Analysis and Tracking

This is important so that companies can evaluate data such as demographics, customer behaviour, purchasing habits, marketing and promotional campaign efficiency and other criteria.

Web-Based Enterprise Applications

Web-based corporate software, including client websites, are valuable business tools. A web-based business app is a program developed for mid-to large-scale organizations and that can be launched on the Web or intranet.

Apps are designed for various purposes, whether for internal or external uses. As an example, an organization may need a shared app of internal needs, such as communicating and exchanging project documents and information with staff located at various locations. Or a company can create an app for outside investors such as basic order placement and delivery program.

Or it may include an app for internal and external participants to collaborate on projects and participate in platform discussions from different places.

In addition, the software must communicate with existing systems, databases, and other technical entities for consistent access and smooth knowledge transfer. Since apps frequently contain and handle sensitive customer information, strict security procedures are also required to secure data, business information and operations.

Working with a skilled customized software company is the best way to develop web-based business apps.

Advantages of Web-Based Enterprise Apps

Flexibility

Staff members can access and send business details, wherever they are, making it much easier for employees who drive to or work from home to work with unlimited accessibility and even take care of the crucial business in order to guarantee accuracy and consistency.

Marketing

Far more corporations are trying to make the most out of their online network to advertise and sell their products and services, and also to manage online transactions and processes. Companies creating technology applications to achieve corporate website development goals gain competitive advantage.

Interoperability

The interface and integration of an app with other devices and resources promote consistency which in effect allows for high compatibility between different platforms, systems and devices.

Installation, deployment, and maintenance are fast and cost-effective

Web applications can be built in a single operating system, resulting in cost-efficiency. They're all located in a single server from where they're open to all users. They can also be managed and modified from a central site that is open to users universally over the network.

Data Security

Since web applications are built and stored on stable, dedicated servers managed by security specialists, all company and customer information is stored securely.

Demand for customized web apps is only anticipated to increase in the future as more organizations continue to realize the advantages of a custom-designed app designed to match their processes and goals.

Emerging Web Development Trends

With recent advancements in web technology and the increasing requirement for enterprise web creation, websites and applications are anticipated to become more innovative and nuanced in terms of its functions, usability and presentation.

Emerging trends in web growth, such as Accelerated Mobile Pages (AMP) and Progressive Web Application (PWA), would concentrate on delivering a more engaging user interface, great potential for SEO rankings, improved safety, higher load speeds and increased traffic. Such developments will certainly boost market opportunities by enhancing new acquisitions and operations of customers.

The web development field is set to expand in the years ahead and provide an increasingly attractive and exciting digital space.

Jan 21 2021
Jan 21

Jamstack & Drupal, match made in heaven?

Developers, in our survey but also at DrupalCon, have put a huge focus on the integration between the new JAMstack world (Javascript, APIs & Markup) and Drupal itself. Drupal allows to push results directly to the browser. More and more we also see that components, built in React, Vue.js, Ember or Angular are taking over some of the responsibility here. To such an extent even that the Drupal core team has decided to build a react component for the menu in Drupal. In addition, concepts such as keeping Drupal 7, 8 and 9 up to date have also been discussed on several occasions with even the outlook of automatic updates being hugely beneficial!

Data is the new gold

Some developers are convinced that data is the new gold and this of course raises the concept of data ownership and the fear of being dependent on external vendors. There were a number of discussions at DrupalCon about how Drupal can deal with this and what standard privacy protection measures Drupal could take with new installations.

Rising star: DXP

What did come as a big surprise is that developers are not yet completely familiar with the concept of DXP. More than half of our surveyed developers said they had never heard of it. At Dropsolid, Drupal is a permanent pillar of content management in our DXP projects, and it has become our mission to put DXPs on the map!

Opportunities for Drupal developers in the future

From our research, the many conversations and responses to our sessions at DrupalCon, we noted that developers in general are less involved in the end-user experience and customer journeys of (potential) customers. They have a limited view on the different platforms a brand uses to connect with its customers and how exactly that happens. Not necessarily a problem? But also not that unimportant! Keeping the end goal in mind is important for every position in a company. The communication between the different departments runs smoother when this is clear to everyone, the noses are in the same direction and everyone speaks the same language. Just think of the gap between business and development: how do you get a concept really sharp without all departments having a clear view of the core objective?

It could be the perfect time, for you as a Drupal developer, to expand your horizon. If you, as a developer, have an overview of the end user's goal, show a healthy interest in the optimal customer experience for your client and understand the needs of this new market? Then you are already one giant step ahead. It’s precisely these profiles that fill the gaps in the current market and make big career opportunities possible.

3 things business owners can learn from this 

  1. A good connection between the different departments, in particular business and IT, is priceless and an absolute must for every company.
  2. The balance between customer experience and operational excellence has to be in harmony.
  3. A lot of agency owners are worried about the previously listed roadblocks, and yet there is an obvious solution that is emerging: a Digital Experience Platform (DXP).
Jan 21 2021
Jan 21

The dilemma of choosing the more suitable CMS from a range of possible CMS options can be overwhelming.' is a major question that comes to mind when thinking forward towards development.

Now, that alone relies on the requirements that you will come up with. For a blog-related website, WordPress might be one's choice. Similarly, for a website catering to e-commerce, Magento might be one's preference. The question arises why should Drupal be chosen over existing options. Why is Drupal the best CMS? Safety, 3rd party implementations, support networks, comprehensive, SEO friendly, open-source tools, support for Free Module / Plugin, etc. are the  contributing factors. If you have a query as to “Should I use Drupal?” These are some of the features that should help you make an informed decision.

Drupal Migration Services are also available and it is the simplest approach via which you can relocate your existing website to Drupal. The complexity of the database structure does not matter.

Some advantages that come with choosing Drupal are:

1. Community

The open-source structure of Drupal promotes consistent collaboration and development through the Drupal community's support and enthusiasm. Today, in 230 countries, there are over 1.4 million Drupal users who are committed to pushing Drupal towards success. The opportunity to generate extraordinary digital experiences extends far beyond what a single team of patented software developers could conceive of, with a pool of such varied experts working constantly to make Drupal better.

2. User Experience 

The new Drupal is a revolutionary digital platform that can be leveraged by developers and marketers to generate memorable customer experiences. The latest editions of Drupal have prioritized user experience (UX) to encourage everyone to strengthen existing customer experiences, from site editors to content creators. Some of Drupal's user interface improvements include:

Layout Builder - Provides an easy-to-use page building experience for content authors that allows editors to control the get-up of their content without relying on a developer.

The administrative theme of Claro provides a cleaner, easier-to-use site management, configuration, and authorship interface.

Mobile sensitive web features- out-of-the-box delivery of mobile-friendly themes, sensitive images, and mobile management.

3. Scalability

Drupal is an effective and future-ready CMS that gives companies the freedom to adapt to their needs. The versatile API architecture of Drupal facilitates the development of exponential content across a worldwide multi-site ecosystem. Drupal is optimized for many caching circuits that facilitate faster page loading, optimized bandwidth, and stronger web performance overall, even under high-pressure conditions. 

4. Security

Safety is the primary concern when it comes to creating digital experiences that people trust. Not conforming to digital security norms can both harm consumer relationships and cause companies to suffer heavy legal fees for heavily regulated and public-facing sectors such as government and healthcare. Security is taken more seriously by Drupal than any other CMS. That's why organizations such as Georgia State, Steward Health Care, and Fannie Mae depend on Drupal to safeguard their websites and hold their audiences' trust.

5. Accessibility

An inclusive web environment for all users is prioritized by Drupal's determination to accessibility standards. For any specific component and function added to the core, availability is a gateway requirement.

Drupal guarantees that all of its features and functionality comply with the out-of-the-box WCAG, WAI-ARIA, and ADA standards of the World Wide Web Consortium. Some of the characteristics of usability included in Drupal 8 and the Drupal 9 entail:

Color Contrast Themes and text size optimization 

Defaults of Alt Tag

Control Tab Order  

Mobile Responsivity

Aural Alerts For sectors, such as tertiary education, with the responsibility of providing learners from a variety of backgrounds with opportunities and knowledge, accessibility is a major issue. At present, over 70% of educational institutions including renowned institutions such as North Dakota State University, have opted for Drupal as their CMS of choice. Drupal stays true to providing everyone, regardless of their circumstances, accessible information, and positive digital experiences.

Some of the widely asked questions when it comes to Drupal is, Why is Drupal better than WordPress? What are the benefits of Drupal over WordPress? Which is the best, Drupal or WordPress? So, let's take a deep plunge and compare them one by one according to scenarios.

Drupal vs WordPress

There is no denying about the intricacy of Drupal in contrast to WordPress, but no one can refuse that Drupal offers advanced features. The interface of Drupal is much wider than that of WordPress and it mainly uses types of content, views, categorizations, etc. So, if the requirement in that situation is for multiple templates, Drupal is rated higher than WordPress.

Flexibility

Drupal is more versatile than WordPress as it is engineered by developers for custom software development.

Everything is freely accessible as modules in terms of capability and you can customize everything in Drupal with the assistance of a developer. In WordPress, plugins are obtainable in paid versions. WordPress is intended to be a blogging platform. So, to manage a large amount of content and consumers, it has limited functionality and is Drupal's backbone for handling thousands of data and customers at the same time.

Security

Security is the primary concern for every customer who invests in building a website, and if their website is hacked, then everyone involved in the project will suffer a major loss. Drupal has enterprise-level security due to the large open-source community, which offers comprehensive security reports. The website of Whitehouse.gov or U.S. Govt is on Drupal, which demonstrates the trust in Drupal at the level of security.

In conclusion, you must first recognize the requirements of the customer and analyze them to choose which best fits your requirements. With the service component of Drupal 9 out now, developers have a complete object oriented structure for building websites, portals, e-commerce solutions, etc. Also, the answer to the question, “Is Drupal hard to use?” is NO. It is made for the ease of users and allowing yourself to be immersed in the experience is the surest way to make the best use of it.

Jan 21 2021
Jan 21

Accessibility design

The mission of accessibility design - to make digital work easier for people with disabilities and everyone who works with it, and grow the target audience this way. Voice assistant, subtitles, large fonts - for any content, you need to think about the user scenario of the user with a disability. 

If you are new to web design accessibility, please also have a look at our article, what it is, and why it matters.

Dark mode

This mode has become standard for sites and applications, and in terms of accessibility, this is one of the necessary functions.

Microinteractions

The devil's always in the details. The slightest movement leads to some result and application’s or website’s response. For example, I press a button - it shows the download. Awwwards has a great collection of games and websites with micro-interactions that kill boredom and improve the user experience.

Instead of a conclusion

Sasha Lopatyuk, art director of IDT Corp:

"It seems to me that trends are shaped by trendsetters, technology, and culture. And here, we must understand that when we say - "influence" we are talking about the influence of somethings on designers and not on society as a whole. So, the basic user may not be interested in the cyberpunk theme, but its abundance over the Internet can push a designer to create the Tesla Cybertruck."

Maxim Desiatykh, member of the board of directors of Redmadrobot:

"Product design is now at the peak of popularity and demand. Companies and individual entrepreneurs create or try to create new digital products and services. It is a mass effect, like startups in garages at one time. And all design trends will come from this market trend.

With a lot of this kind of work today, demand for the product designers exceeds supply. For a business, if a designer owns tools, this is already a sign of a person who can do something and is ready to work in a team. Business is more interested in creating something in general and less interested in some visualization tricks. All products and interfaces are focusing on the business and metrics now, rather than on the design trends. It is the distinctive feature of the product design."

Do you want to make a trendy website already? Don't be shy - contact us!

Jan 20 2021
Jan 20

The Drupal project uses the pear Archive_Tar library, which has released a security update that impacts Drupal. For more information please see:

Exploits may be possible if Drupal is configured to allow .tar, .tar.gz, .bz2, or .tlz file uploads and processes them.

Jan 20 2021
Jan 20

People today do not like to be confined, if I talk about development teams, they would hold up flags stating the same. Since development and innovation go hand in hand and constraint is the biggest enemy of innovation, you can’t tell me they are wrong to have that notion. 

Talking specifically about web developments, there are a lot of areas to explore and a lot of technologies to help you do that. So, why limit yourself, when you don't have to? Drupal has brought such an impressive trend forward that has simply satiated the developer’s desire for innovation and that is the headless approach

Unlike before, when your entire project had to be nestled inside one CMS, Drupal now gives you the opportunity to explore new technologies to your heart’s desire. This is possible because the presentation layer and the backend content become two separate entities. Drupal acts as the content repository and a frontend technology of your liking takes care of, of course, the frontend part of website architecture.

To provide a connection between the separated development aspects of the project, enters the API. An API layer is a necessity when going headless, because it transmits all the information from the front to the backend and vice-versa. 

And the three available APIs in Drupal, REST, JSON and GraphQL, are the reason behind me writing this blog. Although the purpose of all three is the same, they are quite different from one another. Today, we would be highlighting their meanings, their pros and cons and all the visible distinctions they have. So, let’s begin. 

Decoding the APIs 

The logos of GraphQL, JSON and REST are displayed horizontally.


REST, JSON and GraphQL bring in a similar outcome when they are used for decoupling Drupal. Yes, they are different too. And we would get into the difference between REST, JSON and GraphQL soon. Before that it is essential to understand their history, origin and what they were intended for because the differences actually start from there. 

REST 

REST was developed by Roy Fielding in the year 2000, the purpose behind its development was to provide a software architectural design for APIs. In simple terms, it provided an easy path for one computer to interact with another by utilising an HTTP protocol. The communication between the two computers is not stored on the server, meaning it is stateless; rather the client sessions are stored on a client-side server. 

There are six constraints necessary to implement REST in the complete sense. 

  • It needs a separated client and server; 
  • It needs to be able to make independent calls;
  • It needs to able to store cacheable data;
  • It needs to have a uniform interface;
  • It is a layered system; 
  • Finally, it needs a code-on-demand. 

REST offers a great deal of functionality without a lot of effort. For instance, if you are working on someone else’s RESTful API, you would not need a special library or special initialisation. Yes, your developers need to design their own data model using REST, but the HTTP conventions at play make programming a breeze. 

To know how REST plays a key role in decoupling Drupal, read our blog REST APIs in Drupal.

JSON: API  

JSON stands for JavaScript Object Notation. Built in May of 2013, it was designed as an encoding scheme, eliminating the need for ad-hoc code for every application to communicate with servers, which use a defined way for the same. JSON: API, like the name says, is a specification for building APIs using JSON. 

With JSON: API, communication between the server and the client becomes extremely convenient. It not only formats the way a request should be written, but the responses also come in a formatted manner. The primary aim of JSON: API is to lessen the number of requests and shrink the size of the package, all using HTTP protocol. 

Broadly stated; 

  • JSON reduces the number of requests and amount of data being transmitted; 
  • It requires zero configuration; 
  • It uses the same JSON access scheme for every piece of data, making caching very effective;
  • It offers quite a few features and gives you, as the client, the opportunity to turn them on or off. 

To know how JSON:API plays a key role in decoupling Drupal, read our blog, JSON API in Drupal.

GraphQL 

While JSON can work alongside REST, GraphQL was designed as an alternate to it and some of its inconveniences. Built in 2012 by Facebook, it acts as a cross-platform data query and manipulation language. Its servers are available in numerous popular languages, being Java, JavaScript, Ruby, Python, C#, amongst others. 

The features of GraphQL are that; 

  • It allows users to request data from multiple resources in a single request.
  • It can be used to make ad-hoc queries to one endpoint and access all the needed data.
  • It gives the client the opportunity to specify the exact type of data needed from the server. 
  • All of these add to its predictable data structure, making it readable as well as efficient. 

It was in 2015, after GraphQL was open-sourced that it became truly popular. Now its development is governed by The GraphQL Foundation, which is hosted by the Linux Foundation. 

To know how GraphQL plays a key role in decoupling Drupal, read our blog, GraphQL in Drupal.

Now that we know the basics of all the three APIs, let us have a look at their popularity status, before beginning the comparison. 

A bar graph shows the standing of different web services against each other.A glimpse at the popularity of the three APIs. Source: State of API Report 2020

REST vs JSON vs GraphQL 

Now let’s get down to the details and understand why choosing one over the other two could be in your best interest. Let’s start with the differences between REST, JSON:API and GraphQL.

How efficient is the data retrieval?

A distinction is shown between the three APIs, REST, JSON and GraphQL, in three circles with regards to data retrieval..


One of the most important aspects for an API is the way its fetches data. It could require one or more requests. Therefore, this aspect is also referred to as its request efficiency. Getting multiple data responses in a single request has to be an ideal, so let’s see how REST, JSON: API and GraphQL here. 

REST 

The REST API is innately built to capitalise one resource per request. This works perfectly as long as you only need to retrieve a single piece of data like an article. However, if you need more than that, the number of requests you would have to type in separately would be equivalent to the amount of data you need. 

One article = one request 
Two articles = two requests
Two articles and the author information stored in a different field = Two requests for the articles + a long wait for the completion of those requests + two additional requests for the author information. 

This sums up REST’s request efficiency to the T. You require to be equipped to handle a number of requests, which can ultimately stall your user experience, making it seem to go at a snail’s pace. No sugar-coating here, there are going to be a lot of round trips. 

And the problem with a lot of round trips is a lot of extra information you do not even need. This is because there is a possibility that a REST API endpoint might not have the required data for an application. As a result, the said application will not get everything it needs in a single trip, making multiple trips the only option. It's safe to say that REST over-fetches and the verbose responses can be a problem.

JSON: API 

JSON: API does not suffer from the multiple request conundrum. One single request can give you everything you want, be it one article, two or ten along with the author’s information, I kid you not. 

This is possible because JSON: API implements a concept called ‘sparse fields.’ What this does is list the desired resource fields together for easy fetching. You can have as many fields as possible. If you feel the fields are too long and would not be cacheable, you can simply omit a few sparse fieldsets to cache the request. 

Another thing to remember is that the servers can choose sensible defaults, so your developers would need to be a little diligent to avoid over-fetching. 

GraphQL 

Coming to GraphQL, it was also designed in a similar fashion to JSON: API and is competent enough to eliminate the problem of over-fetching and avoid sending multiple requests. 

GraphQL has its own queries, schema and resolvers that aid the developers in creating API calls with particular data requirements in mind. Moreover, by mandating clear-cut additions to every resource field in every query and ensuring the developers cannot skip any of it,  it is able to avoid multiple round trips. Thereby, making over-fetching information a thing of the past. 

The only problem here can be that the queries may become too large, and consequently, cannot be cached. 

How is the code executed?

The distinction between REST and GraphQL is shown with regards to code execution.


Using an API for calls involves the execution of a code on the server. This code helps in computing, calling another API or loading data from a database. All three of the APIs use a code, however, the code is implemented varies a little.

REST 

Route handlers are utilised for execution upon a REST call. These are basically functions for specific URLs. 

  • First the server receives the call and retrieves the URL path and GET; 
  • Then the functions are noted and the servers begins finding the same by matching GET and the path; 
  • After that the result is generated, since the server would have executed the function; 
  • In the final step, once the result is serialised by the API library, it is ready for the client to see. 

GraphQL

GraphQL operates in a relatively similar manner. The only difference is that it uses functions for a field within a type, like a Query type, instead of using functions for specific URLs.  

Route handlers are replaced by resolvers in GraphQL, they are still functions though.

  • After the call is made and the server has received a request, the GraphQL query is retrieved. 
  • The query is then examined and the resolver is called upon for every field. 
  • Finally, the result is added to the response by the GraphQL library and it is ready for the client to see. 

It should be noted that GraphQL offers much more flexibility as multiple fields can be requested in one request, and the same field can be called multiple times in one query.  The fact they let you know where you performance needs fine-tuning makes resolvers excellent trackers as well. 

This is simply not possible in REST and JSON. Do you see the difference in implementation? 

How do the API endpoints play a role?

Many a time, it is seen that once the API is designed and the endpoints are sealed, the applications require frontend iterations that cannot be avoided. You must know that the endpoints aid an application to receive the required data just by accessing it quickly in the view, so you could call them essential even. 

However, the endpoints can pose a bit of a problem for the iterations, especially when they need to be quick. Since, in such an instance, changes in the API endpoints have to be made for every change in the frontend, the backend gets tedious for no reason at all. The data required for the same can be on the heavier side or the lighter side, which ultimately hampers the productivity. 

So, which API offers the solution?

It is neither REST, nor JSON. GraphQL’s flexibility makes it easy for the developers to write queries mentioning the specific data needs along with iterations for the development of the frontend, without the backend having to bear the brunt.

Moreover, GraphQL’s queries help developers on retrieving specific data elements and provide insights to the user as to which elements are popular and which aren’t amongst the clients.  

Why doesn’t REST? 

The answer is simple, REST has the entire data in a single API endpoint. Being a user, you won’t be able to gain insights on the use of specific data as the whole of it always returned. 

How good is the API exploration?

A distinction is shown between the three APIs, REST, JSON and GraphQL, in three circles with regards to API exploration.


Understanding your API and knowing about all of its resources and that too quickly and with ease is always going to benefit your developers. In this aspect, all three perform pretty contrastingly. 

REST 

REST gives a lacklustre performance in API exploration to be honest. The interactivity is pretty substandard as the navigation links are seldom available. 

In terms of the schema, it would only be programmable and validatable, if you are going to be using the OpenAPI standard. The auto-generation of the documentation also depends on the same. 

JSON: API 

JSON performs better than REST. The observation of the available field and links in JSON: API’s responses helps in its exploration and makes its interactivity quite good. You can explore it using a web browser, cURL or Postman

Browsing from one resource to the next, debugging or even trying to develop on top of an HTTP-based API, like REST, can be done through a web browser alongside JSON. 

GraphQL 

GraphQL is indeed the front-runner here. It has an impressive feature, known as the GraphiQL, due to which its API exploration is unparalleled. It is an in-browser IDE, which allows the developers to create queries repeatedly. 

What is even more impressive is the fact the queries get auto-completed based on the suggestions it provides and you get real-time results. 

Let’s focus on schema now 

A distinction is shown between the three APIs in terms of schema using three circles.


Schemas are important for the development team, the frontend and the backend equally. It is because once a schema has been defined, your team would know the data structure and can work in parallel. Creating dummy test data as well as testing the application would be easy for the frontend developers. All in all, the productivity and efficiency levels elevate. 

REST

REST does have an associated expected resource schema since it is a set of standard verbiage. Despite this, there is nothing that is specifically stated in them. 

JSON: API 

In terms of schema validation and programming, it does define a generic one, however, a reliable field-level schema is yet to be seen. Simply put, JSON is basic with regards to schema. 

GraphQL

The fact that GraphQL functions completely on schemas makes it a pro in this regard. The schema used here is Schema Definition Language or SDL. What this means is that GraphQL uses a type system that sets out the types in an API because all the types are included in SDL. Thus, defining the way a client should access data on the server becomes easy. 

To conclude this point, I would want to say that when there is immense complexity in the schema and resource relationships, it can pose a disadvantage for the API.  

How simple is to operate it? 

The operational distinction is shown between the three APIs in three circles.


Operating an API essentially involves everything, from installing and configuring it to scaling and making it secure. REST, JSON: API and GraphQL, all perform well enough to make themselves easy to operate. Let’s see how. 

REST 

REST is quite simple to use, a walk in the park for a pro developer. It is because REST is dependent on the conventional HTTP verbiage and techniques. You would not need to transform the underlying resources by much, since it can be supported by almost anything. It also has a lot of tools available for the developers, however, these are dependent on their customisation before they can be implemented. 

In terms of scaling, REST is extremely scalable, handling high traffic websites is no problem at all. To take advantage of the same, you can make use of a reverse proxy like Varnish or CDN. Another plus point of REST is that it has limited points of failure, being the server and the client. 

JSON: API 

JSON: API is more or less the same as REST in terms of its operational simplicity, so much so that you can move from REST to JSON: API without any extensive costs. 

  • It also relies on HTTP; 
  • It is also extremely scalable; 
  • It also has numerous developer tools, but unlike REST, JSON: API does not need customised implementations; 
  • Lastly, JSON also has fewer failure points. 

GraphQL 

GraphQL is the odd one out here. It isn’t as simple to use as the other two. It necessitates specific relational structure and specific mechanisms for interlocking. You would be thinkin that how is this complex? Let me ask you to focus on word specific, what this means is that you might need to restructure your entire API with regards to resource logic. And you must know that such restructuring would cost you time, money and a boatload of efforts. 

Even in terms of scalability, GraphQL does not fare very well. The most basic requests also tend to use GET requests. For you to truly capitalise GraphQL, your servers would need their own tooling. If I talk about the points of failure here, even those are many, including client, server, client-side caching and client and build tooling. 

What about being secure?

The security distinction is shown between the three APIs in three circles.


The kind of security an API offers is also an important consideration in choosing it. A drastic difference is noted in REST and GraphQL. Let’s see what that is. 

REST 

REST is the most secure amongst the three. The intrinsic security features in REST are the reason for the achievement. 

  • There are different APU authentication methods, inclusive of HTTP authentication;
  • There are the JSON Web Tokens for sensitive data in HTTP headers;
  • There are also the standard OAuth 2.0 mechanisms for sensitive data in JSON structure. 

JSON:API

JSON:API is on a similar footing to REST in terms of security. The reason being the fact that like REST it exposes little resources.  

GraphQL 

It is not like GraphQL is not secure, it is; however, the security has to be manually attained. It is not secure by default and it is not as mature as REST in this regard. 

When the user has to apply authentication and authorisation measures on top of data validation, the chances of unpredictable authorisation checks rise. Now, do I have to tell you that such an event is bound to jeopardise your security? 

How is the API design pinpointed?

The distinction for API design is shown between the three APIs in three circles.


If an API has to perform well for every use case, you have to make it do so. By creating such design choices that are a result of your understanding of the users’ needs. You cannot just go with the flow, evaluating how your users are going to be interacting with your API and getting an understanding of the same is key for your API’s design. 

REST

For REST, this exercise of deciphering the user requirements must happen before the API can be implemented. 

GraphQL 

As for GraphQL, this apprehension can be delayed a little. By profiling the queries, you would be able to tell their complexity level and pinpoint the sluggish queries to get to an understanding of user’s consumption of the API. 

What about their use in Drupal?  

The distinction for Drupal installation and configuration is shown between the three APIs in three circles.


Drupal is an important player when it comes to building websites and managing their content. With decoupling Drupal becoming more and more popular, it has become crucial to understand how the APIs perform alongside Drupal. 

REST 

Talking about the installation and configuration of REST, it can be complicated at best. The fact that the REST module has to be accompanied by the REST UI module does not ease the complexity. 

With REST, the clients that cannot create queries with the needed filters on their own, since the REST module does not support client-generated collection queries. This is often referred to as decoupled filtering.  

JSON:API 

JSON:API module landed in Drupal core in Drupal 8.7. JSON:API’s configuration is as easy as ABC, there is simply nothing to configure. JSON is a clear winner in this aspect. 

Moving to client-generated queries, JSON does offer its clients this luxury. They can generate their own content queries and they won't need a server-side configuration for the same. JSON’s ability to manage access control mechanisms offered by Drupal make changing an incoming query easy. This is a default feature in JSON:API.

GraphQL 

The installation of GraphQL is also not as complicated as REST, but it isn’t as easy as JSON as well. This is because it does mandate some level of configuration from you. 

Similar to JSON, GraphQL also offers decoupled filtering with client generated queries. A less common trend amongst GraphQL projects is seeking permissions for persisted queries over client-generated queries; entailing a return to the conventional Views-like pattern.

In addition to these three major Drupal web services, explore other alternatives in the decoupled Drupal ecosystem worthy of a trial. Read everything about decoupled Drupal, the architecture-level differences between headless and traditional setups, different ways to decouple Drupal, and the skills required to build a Decoupled Drupal web application to know more.

Concluding with the basics 

To sum up, let us look at the fundamental nature of the three APIs, which entails two aspects; simplicity and functionality. 

In terms of simplicity, REST is a winner. A second would be rewarded to JSON, while GraphQL would not and could not be described as simple, complex and that too immensely with major implementations coming your way would be a more accurate description. In terms of functionality, GraphQL does offer the most. If you choose JSON over GraphQL, you would end up parting with some of its features unfound in JSON. 

All three are powerful and efficient in what they can do for your application. The question is how much complexity are you willing to take up with that power?

Jan 20 2021
Jan 20

I was very happy (and proud) about this achievement – so decided to do it again in 2020! This time I encouraged other people to join the channel and try the challenge with me. More people jumped in and together, as a group, we contributed to the Drupal project and modules that we use in our day-to-day work. 

Not only Amazee developers and project managers joined the challenge. One job application we received referenced our #12months12patches Challenge blog from 2019. That applicant ended up joining Amazee Labs a few months after, and then, of course, became an active contributor of the channel!

Our contributions were focused mostly on Drupal modules, but we also worked on Drupal related projects (i.e.: Lagoon). We got some great ideas for new modules from the project managers ("Something like this would help the client to...") and shared tips on how to find issues to contribute to more often (i.e.: whenever you install a new module on a project, look in the issue queue and try to help with some of the reported issues).

Drupal Patches

Overall, it was a real team effort and a great experience. As you will see below, the number of patches grew considerably, compared to the first installment of the challenge. Let's have a look to see what each month was like. 

These are the different patches (and modules) made by different Amazee's throughout the year.

January

February

March

April

May

June

July

August

September

October

November

December


Again, I couldn’t be happier that we achieved the challenge goal, and best of all, we did it as a team – by encouraging and helping each other. Looking forward to doing it all again in 2021!

If you're also keen to contribute to Drupal, don't miss out on Drupal Global Contribution Weekend, 29 - 31 January 2021 - events are happening world-wide. Happy coding!

Jan 20 2021
Jan 20

Next week kicks off Drupal Global Contribution Weekend, January 29-31, a virtual worldwide event everyone can participate in from anywhere in the world.

Want to give back to the Drupal Community in the form of code but you're not acquainted with the new contrib process? Here’s your chance to get ready for the weekend. Now that our meetups are online, join the San Francisco community in learning how to create issue forks and merger requests.

Drupal Global Contrib Weekend - Introduction to issue forks and merge requests with Mark Casias

Learn the new workflow for the drupal.org issue queues. Previously, the main way to contribute source code changes to a Drupal project repository was through the patching process. In November 2020, a new and different workflow became available, similar to what open-source contributors commonly use on sites like GitHub.

We'll walk through the basics. There will be a demo followed by Q&A.

Thursday, January 28, 2021 - 3:30-4:30 pm PT on ZOOM
RSVP here

Join us on Social Media

Join us on slack: http://sfdrupal.herokuapp.com
Subscribe to us on YouTube: https://bit.ly/SFDUG-youtube
Follow us on Twitter: https://twitter.com/BADCamp

The San Francisco Drupal User’s Group wants to extend a special thank you to Kanopi Studios for donating resources, platforms, and organizing efforts over the past couple of years. They design, build and support websites for clients who want to make a positive impact.

Jan 20 2021
Jan 20

January 20, 2021

This post is aimed at web development teams and is not tied to a specific technology. We will aim to not get more technical than is needed, but rather to explore what Continuous integration (CI) is, and how it can help save teams money within a month of it being set up.

What is continuous integration?

Although several definitions of CI have been proposed, we will use the following definition in the context of this post:

Cotinuous integration (CI) is the practice of running any number of tests, automatically, on a project, periodically and/or whenever the code changes. For CI practitioners, the number one priority is for tests to always be passing.

A simple example, please

Here is the very simplest example I can think of:

Let’s say you’re maintaining an old-school HTML website (no fancy stuff like databases or PHP), your team may decide to set up CI to make sure a file called “index.html” exists in your codebase: if it exists, your test passes; if it is absent, your test fails.

Checks may be run every time your code is changed.

Your team might store code on GitHub, and link a cloud CI provider such as CircleCI to your codebase, having it trigger every time your code changes.

You will then define a script which is your definition of “what it means for your your codebase to pass”: checking for the existence of “index.html” is a one-line script.

A more complex example

Although the example above has value, it is very simple, and you may soon find yourself wanting to add higher-value tests to your script. This ability to add complexity over time is a powerful feature of CI: getting started is simple, and you can add as many tests as you want over time depending on your available resources.

Let’s say your team is maintaining a Drupal or Wordpress codebase with lots of complex code, your team may set up a CI server that:

  • checks for broken links on the live environment every so often;
  • checks every few minutes that the live environment is responding and has some expected keywords on its front page;
  • every so often, checks that the live environment adheres to certain Accessibility standards;
  • every so often, checks that the live environment is not reporting any errors;
  • on every code change, perform some static analysis on custom PHP code: for example, that a function which expects an array as an argument is never called with a string.
  • on every code change, make sure PHP code adheres to coding standards (for example, functions should have comments; and indenting should be correct).
  • on every code change, create a dummy Drupal or Wordpress site with a dummy database and make sure your site fires up, and run some end-to-end tests against it.
  • etc., etc.

A cloud-based tool such as CircleCI can work well to check the codebase when it is changed; and a hosted tool such as Jenkins might be a good fit for running periodic checks (such as a sanity check making sure the production environment works).

The above example corresponds to real-world checks I perform on lost of projects I maintain; and both CircleCI and Jenkins are tools I have been using for years.

So how much does all this cost?

“How much does this cost?” is actually the wrong question. “How much can I save?” is a better way of putting it. Consider the following graph, the horizontal axis is time, and the vertical axis is cumulative project cost.

  • The red line is business as usual: because we are not maintaining CI scripts or setting up tests, the up-front cost is low. But eventually you’ll lose control of your codebase and spend all your time putting out fires (I call this the “technical debt wall”).
  • The blue line is the CI approach, higher up-front cost to set things up, but eventually you’ll get less errors.
  • Where the two lines intersect, I call the “sweet spot”. That’s when you start saving money. Your “sweet spot” is not months or years away: I firmly believe it should happen within a month. If it takes longer than a month, you’re overengineering your CI system.

So what are these up-front costs?

The up-front costs are:

  • Creating a simple script which defines what it means for your code “to work”. If you find this intimidating, just have your script check for a file that must be present, as in the simple example presented earlier.
  • Make sure your code is tracked in GitHub or BitBucket.
  • Make sure your entire team accepts the principle that making tests pass is the number one priority. This is crucial. If you start accepting failing tests, then CI becomes a useless burden. This also means every member of your team must agree with every test that is performed. If a test is not important enough to warrant dropping everything when it fails, then you should not have that test in your codebase.
  • Integrate a simple, free CI cloud provider like CircleCI and make sure it works.

All of the above, together, can take between an hour and a day.

How about the ongoing costs?

Ongoing costs are closely relate to the complexity of your CI setup. If you are just testing for an “index.html” file, your ongoing costs are close to zero, but may include:

  • dealing with errors and updates in the CI script itself. Don’t forget the CI script is computer code, and like any computer code, it needs to be maintained.
  • updating the CI script to deal with API changes in the cloud CI provider.
  • fixing false negatives. For example, someone may change the filename from index.html to index.htm, which might require you to fix your test script to also test for index.htm in addition to index.html.
  • onboarding new team members to understand the importance of making sure tests always are passing.

If your tests are super simple (such as checking that an “index.html” file exists), the above costs are low, probably less than one hour a month.

If your tests are complex (as in our second example, above), you might set aside 5 to 10 hours a month for ongoing costs.

Obviously, if your ongoing costs are higher than your savings, then you are “over-testing”.

So what are the benefits?

The fundamental trick of CI is to keep your benefits higher than your costs. Let’s go back to our simple “index.html” example:

  • We have already established that there are minimal up-front and ongoing costs.
  • There are also ongoing savings: once you know that your index.html file is guaranteed to exist, your manual testing time decreases.
  • The cost in lost revenue, lost confidence, and debugging time in case someone accidentally deletes index.html from your website would be considerable high.

Based on the above, you can conclude whether it’s worth implementing CI.

Continuous improvement of your CI setup

Checking for “index.html” is probably of very low value, but once you’ve done that, you’ve also set up the foundation to improve your script. Every time you feel your CI script has a positive cost-benefit ratio, it is time to improve your CI script. In practice, I have found that in projects under active development, the CI setup gets constantly improved.

Specifically, any time a problem makes its way to production, it should be a gut reaction to introduce a fix, along with a test to make sure the problem never happens again.

The key is making incremental improvements, making sure your cost-benefit ratio is always positive.

Docker and containerization

Docker, and containerization generally, embed software and configuration in computer code along with your project code.

The widespread adoption of Docker and containerization in recent years has been crucial for CI. Without containerization, let’s say you want to run PHP static analysis, start a database with a Drupal site, run end-to-end tests, you need to install a bunch of software on your CI server (or your laptop), make sure the versions and configuration are in sync with your local development setups. This is simply too expensive.

Docker makes all this easy: simply put, Docker abstracts all the software and configuration, making software act the same on any computer that has Docker installed.

If you are not using Docker and you’d like to see how simple this makes things, install and launch Docker Desktop on your computer, give it 6Gb RAM instead of the default 2Gb in its preferences, then you’ll be able to run all tests on my Drupal Starterkit project, without any additional fiddling with configuration of software:

cd ~/Desktop && git clone https://github.com/dcycle/starterkit-drupal8site.git
cd starterkit-drupal8site
./scripts/ci.sh

It should take about 10 minutes to run all tests and it will not add any software to your computer; everything is done on throwaway “containers”. (In general, tests become a lot more frustrating to developers as they take longer to run; which is why I have a policy of not accepting tests which take more than 20 minutes to run.)

The amount of software packages and configuration required to run all the tests in this example is enormous: database servers and configuration, passwords, permissions, PHPUnit, the right version of PHP and Apache or Nginx…; however it’s all defined in Docker files and in code, not on host computers.

Which is why you can run the tests in three lines of code!

This makes it possible to run these complex tests on your computer without installing any software other than Docker.

This also makes it possible to run these exact tests, sans extra configuration, on CircleCI or other CI providers which support virtual machines with Docker preinstalled. In fact, that’s exactly what we’re doing with the Drupal Starterkit. CircleCI even provides a cute badge to indicate whether tests are passing.

Click on the badge below to see test results on CircleCI, which should be identical to the results on your computer if you ran the the above script (you’ll need to log in with your GitHub or BitBucket account).

CircleCI

Security

Whether you are using a cloud service such as CircleCI, or hosting your own CI server with Jenkins or other software, be aware that it adds a potential attack vector for hackers, especially because by design, CI software needs access to your codebase.

In early 2021, a vulnerability was discovered in JetBrains TeamCity (Widely Used Software Company May Be Entry Point for Huge U.S. Hacking, New York Times, January 6th, 2021) in relation to the major SolarWinds hack.

Make sure you have a solid security policy, including the Principle of Least Privilege (POLP) and other industry-standard security approaches; also make sure your codebase, even if it’s private, does not contain any sensitive data, including API keys.

Conclusion

With continuous integration (CI), you can let computers do the grunt work of looking for bugs in your codebase, liberating your developers to do more productive work, reducing the number of bugs that make it into production, and increasing the level of confidence of all stakeholders in your software, and deploying frequently.

And, above all, saving money.

CI can be as simple or as complex as you need: start small, then let your CI process grow as your team becomes more comfortable with it.

Please enable JavaScript to view the comments powered by Disqus.
Jan 19 2021
Jan 19

Are your meetings falling flat lately?

For many, the realities of remote working are wearing kind of thin. We’re looking for ways to breathe more life into meetings and raise the bar for engagement, productivity, and yes, even fun. 

It’s easy to become frustrated with participants during a call when they’re on mute for most of the meeting, or texting, or only partially present. It’s true, of course, that this is business, and we’re all adults, and tuning out should not be an option. It’s also true that when the leader of the meeting gets intentional about a different approach to navigating group interactions, the energy and the impact of the meeting takes off in a new trajectory.

Remote meetings present distinct challenges, especially months into a global pandemic in which most everyone has been required to work remotely. Regardless of whether participants are sitting around the same table or separated by several time zones, there is so much that meeting facilitators can do to encourage all participants to lean in, actively contribute, and build upon each others’ ideas to come up with great solutions. 

Improv at Work

The rules of improv comedy can actually provide some great lessons for keeping meetings moving with all participants bringing their A Game.

I had the fortunate experience of working with several coworkers at an interactive digital marketing agency who taught and performed improv comedy. I learned from them that the kind of hysterically funny, in-the-moment interactions present in improv are not as spontaneous as they may seem. Great improv results from a lot of study and practice. 

As it turns out, learning and following the basic “rules” of improv can have a significant impact on the energy and outcomes of business meetings. 

Here are a few improv comedy rules along with some thoughts on how they can be adopted for business. 
 

Rule #1: Say "YES"

“Yes AND …” along with “Yes ANDing” has emerged essentially as the catchphrase of improv. “Yes ANDing” is a skill that requires practice and, for many, a big mindset shift. 

The knee-jerk reaction during meetings tends to be either “Yes, BUT,” or a flat out “NO,” followed by all the reasons why a given idea isn’t feasible or isn’t based on adequately strategic thinking. 

  • “We tried that last year. It didn’t work.”
  • “Sounds good but have you thought about …”
  • “There’s no way we could get _______ to sign off on something like that.” 

While making someone else wrong might seem to represent discernment and critical thinking skills, the real impact is a gradual, or sometimes a swift, shut down of further contributions.

The objective of “Yes ANDing” is to validate, to be open to another perspective -- a Plan B or C -- to collaboratively build something together by adding to it.  

Here are some sample “Yes AND” responses:

  • “Interesting. I hadn’t thought about that, and this could be a good foundation for ...”
  • “We tried something like that last summer. That was when the market was very different  / or we didn’t do X, Y, and Z.”


The challenge, before shutting them down, is to help build out ideas, even if you don’t fully understand them or it wasn’t what you had in mind. For any number of reasons, the idea might not ever take shape, but taking the time to listen and learn, builds both productivity and relationships. 

Rule #2: Build up. Don’t break down. Keep it moving.

With improv, the second someone gets invalidated, the scene dies. A similar dynamic plays out in meetings when participants go quiet and they silently say to themselves:  “OK you figure this one out.”

Too often, poor participation and long silences stem from this kind of a dynamic.

The genius of great improv is the pace. 

We don’t need to measure up to the lightning-fast wit of the improv pros from the likes of the TV show “Whose Line is it Anyway,” which ran from 1998 through 2007, but silence can kill the energy of a meeting, just as it does with improv comedy. Encourage participation and build from it.

Rule #3:  Don’t ask questions. Contribute new information. 

This one can be a challenge to put into practice. The standard is to expect participants to defend their ideas or lead them into realization that their ideas will not hold water. 

Avoid the expectation that only fully thought out suggestions are allowed to be voiced. 

Instead of:

  • “How could we ever expect the dev team to take this on?”

How about:

  • “I was talking with Deborah in dev the other day and she seemed really eager to try some new things. This might be right up her alley.”
  • “Let’s talk further about how we can get the dev team on board with us on this.”

Rule #4:  No Wrong Answers

We’re all familiar with the “no bad ideas” premise of brainstorming and the objective of a free-flow of lots ideas that spark other ideas, as a few “best” ideas start to emerge. 

Rules of improv are also built upon an understanding that making people wrong is wildly unproductive. The difference is that brainstorming is inherently focused on a quantity of ideas with the assumption that the vast majority of them will never see the light of day. Sometimes, brainstorming is exactly what’s needed, but improv is a bit different. It’s about co-creation and collectively building something together as a team.

Another difference: with brainstorming in general, it’s possible for some participants to sit back and others to dominate. Improv -- similar to Promet's Human-Centered Design workshops -- draw in the whole group.
 

Rule #5: Everyone participates and brings their A game.

Improv rises and falls on the dynamic of the group. It’s not about who has the best ideas or who is the smartest. It’s about knowing each other’s strengths and how to best leverage them. We can bring this same principle into our meetings along with the expectation that everyone who has been invited to the meeting is there for a reason. 

With improv everyone is expected to bring their A Game, stay in curiosity, let go of their ego, take risks, and have some fun.  

Try injecting some rules of improv into your next meeting! First, inform your group of how it works and see how following these practices can actually enhance and motivate your team to have more participation, provide more ideas, and work together to create some new possibilities.

Interested in witnessing first-hand the impact of our collaborative energy on discovery session outcomes? Contact us today. 
 

Jan 19 2021
Jan 19

As a designer and front-end developer, the infamous designer-developer handoff has often been between me and myself. Having spent a lot of time in both roles, as well as having worked closely with other designers and developers, I’ve learned a few practices that help me to answer developer questions right from the start.

Responsive Design

The first question to think about in the visual design stage is how a design will translate from a static idea to something people will use. In the real world, people are using all kinds of devices to interact with a website. There are a number of different use cases to think about here. For example, mobile users may be accessing a webpage without internet access, making an autoplaying video a concern for data usage. However, the most common and notable case to think about here is simply different screen sizes.

It’s pretty common to see mobile, tablet, and desktop designs handed off to a developer. If done well, these are generally enough for defining most of a website. Developers usually are working from 320px up, so it’s important to create mobile mockups at this size. From there we widen the browser to make sure the website still looks correct at the sizes in between what was provided in the mockups. The design for the mobile will be applied all the way up to one pixel below tablet size, and the tablet design will be applied up to one pixel below desktop (you may want to specify this for your developer).

For the most part, we want a consistent experience for each of these devices. If, for example, a user opens the website on an external monitor instead of their laptop, it shouldn’t look like a different website. That said, with some layouts the right breakpoint (browser width at which a component changes) is not right at one of the defined device sizes. As you’re designing, check if any of your components or page layouts need to switch at a more specific browser width. A good test of this is to create an artboard that’s a tiny bit smaller than tablet, and put everything in the mobile layout at that width. If anything looks off, consider defining a different breakpoint for that particular component.

Another case to consider is when the website gets extra wide. The last thing you want is to present the final website to your stakeholders and find the components in disarray on a big TV. Generally I’ll define up to two widths for this. One is the content maximum width, and the other is the website maximum width.

The content maximum width is the size at which the components (such as text or an image) on the website stop increasing in width but the backgrounds (such as a background color or image) keep going. If your content maximum width is particularly large, keep in mind how all your components look stretched to that width. For readability and accessibility of any text on the website, remember that optimal line length is 45-75 characters. 

This width may be all you need, but you can also define a website maximum width if you want something like an image background or full width slideshow to stop growing at a wider point. This may just apply to those full width components that are using images, or (less common in modern design) to the whole website. When deciding on whether or not full width components should keep stretching infinitely wide, think about how you want images to look on very large screens. Unless it’s a background image that is matching the height of that component, the wider an image gets, the more vertical space it will take. Also consider if you want large images to look clear at very large sizes or load quickly at normal and smaller sizes. Limiting the width an image component can reach is one way to strike a balance.

One last thing to define is the padding on the sides between tablet and desktop. When the width gets close to your content maximum width, how much padding stays on the sides as the content begins to shrink? I usually leave 16px between mobile and tablet, and 32px between tablet and the content maximum width (technically the content maximum width plus 64px so I don’t lose the padding too early).

Other common responsive considerations are typography and hover states. For typography, you’ll likely want to define heading sizes for mobile, tablet, and desktop. Also pay attention to line height, as well as spacing above and below a heading. For hover states, just remember that a mobile or tablet user can’t hover, so make sure none of the functionality is lost because of this.

Other tips

This covers most of the important points to keep in mind, but here are a few others:

Try to use a consistent base for sizing, preferably based on the body text size. I usually make my base font size 16px and then try to make typography and spacing stick with multiples of 4px.

Never type with caps lock. Always type in lower or sentence case and use your design software to transform the text to uppercase. This will help if you need to change that style without having to retype, and it allows developers (depending on your method of sharing designs) to copy and paste your text rather than retyping it. It also can be a good reminder to the developer that they should be using css to make text uppercase for accessibility (screen readers read text typed in all caps one letter at a time).

Make sure your images and text are flexible. If you have an image that perfectly lines up with the text overlaying it, be aware of how that component might be used and if the content editors will be changing the image or text. Similarly, be aware of the amount of text a content editor might add to any component. Character counts can always be limited, but it won’t hurt to supply that or show how the component should respond to having more text, especially if that text area is highly dependent on browser width.

One thing that can be easily overlooked is hover and focus states for any interactive elements of your website. For a website to be accessible, it has to be navigable with a keyboard. Focus states are what you see if you tab through a page, and if the difference isn’t notable it will be difficult to do this. Often, hover and focus states can be the same, but there may be some cases where you want to separate them. A form, for example, is an important place to have focus states defined, but you may not need hover states to work the same. Focus states that aren’t specified will generally be automatically provided by the browser, resulting in different appearances between browsers.

One last thing to establish while working with developers is a shared language. A paragraph or a block may mean something different to you as a designer then to a developer working in a content management system. Work together to make sure you have a common understanding of what some of these terms mean. A design system, or even a component library, is a great way to document this. We usually use Invision DSM to share a design system between designers and developers.

Summary

To review, remember the following things as you’re designing:

  • Design mobile at 320px
  • Define a content and website maximum width
  • Create font styles for mobile, tablet, and desktop
  • Use a consistent base for sizing, based on your body text size
  • Get in the habit of using your UI to transform your text to uppercase
  • Make images and text flexible whenever possible, and show components with varying amounts of content
  • Provide hover and focus states
  • Establish a shared language

When working with developers, it’s important to keep in mind the gaps between design and development when creating a website. While small design details may be obvious to you, a developer may be less aware of pixel distances and small color variations, focused instead on building the website in the best way possible. Ideally, design handoff is not one moment in a months long process, but a continual collaboration. Getting developer feedback while in the design process can save you from wasting time going down an unfeasible pathway, and getting across clear design patterns can ensure a developer makes the right assumptions from the beginning. Understanding a little of each other’s world can help make the whole process a lot smoother.

Jan 19 2021
6
Jan 19

Selecting the right SEO goals is a critical first step in your digital marketing campaign. As with any long-term endeavor, knowing your marketing end goals and working directly toward them saves time, money, and stress.

Great SEO cannot be done in a vacuum. It depends on business goals, the needs of the sales and customer support team, and intimate knowledge of the competitive landscape in which you work. Engage the critical stakeholders in each area of your business and work together to come up with a list of needs. You may be surprised at how SEO can help each team meet its objectives.

It’s important to identify and select the right goals before implementing any SEO strategy and get continual buy-in from your team. Combine and categorize ideas to find the ones that digital marketing is well suited for. If possible, pick some “easy” objectives and start stacking up quick wins with your team. This buys you time for longer-term strategies that SEO is suited for.

If you’re struggling to get buy-in from team members, or they don’t have enough knowledge to understand how SEO can help their department, it may help to bring some ideas into the conversation to get the creative juices flowing.

Let’s look at seven different SEO Goals and how they can impact your business.
 

seo goals lead generation Hand with another hand on each fingertip.SEO Objective #1: Lead Generation and Direct Marketing

Build customers and revenue, one form-pop at a time.

If you are a lead-driven business, it’s likely your customers require at least one personal contact from your company before they buy. You may have a higher-than-average purchase price, or your solution involves customization. The key to a thriving lead generation SEO campaign is the conversion rate.

CRO (Conversion Rate Optimization) is almost always the best place to start when you are looking for more leads from your website. It’s easier to make direct changes that can dramatically increase your lead flow.

Implement A/B testing to try different approaches that make it easier for your customers to convert. Here are several ways to make an impact right away:

  • Shorten your forms. Do you really need 2 different phone numbers and a full mailing address on the very first customer interaction? Try getting by with only what you need to start the interaction.
  • Let your visitor know precisely what will happen when they submit the form.
  • Don’t use the word “Submit” on your form buttons (Who wants to submit, anyway? It sounds painful.)

Once your on-page conversion rate is at least 5% (or hopefully much higher), you can turn your attention to increasing targeted traffic. You can accomplish this by creating excellent customer-focused content — and don’t be afraid to ask for the conversion within the content. Consider offering a valuable freebie for newsletter signups and then market to your newsletter to create demand.

Capturing their information is only the first step. Make sure you use a good marketing automation tool and CRM to keep in touch with your customers.
 

seo goals raw traffic Crowd of people walkingSEO Objective #2: Increase Raw Traffic to Your Website

Traffic for traffic’s sake.

This is just what it sounds like. Get as many click-throughs to your content and try to keep them on your site as long as possible. You want to use this objective when you can monetize traffic without actions or financial transactions. If for example, your site is sponsored or ad-driven, this is an excellent place to start.

Concentrate your efforts on great content and conduct keyword research to find topics that are of high interest to your target audience. Make sure to use those keywords in your content.

There are several online tools to help you find questions that people ask and then write a series of blog posts to answer them. This will earn traffic on long-tail Google queries. Make sure your articles are easy to share and optimized for viral spreading by employing share buttons. A few of our favorites tools (paid and free) are SEMRush, ahrefs, Answer the Publicoth SEMRush and ahrefs offer free trials

However, be cautious about using clickbait or fake news to drive adrenal-based clicking. People are becoming savvy to this kind of egregious traffic generation, and you could set yourself up to tarnish your brand for a short-term gain. Focus instead on helpful, interesting, or timely content that truly provides value to your target audience. Provide follow-up content and give them a reason to stay. Bounce rate is an important SEO ranking factor so do what you can to increase the time that visitors spend on your site.
 

SEO Objective #3: Increase E-commerce Salesseo goals ecommerce hand with credit card coming out of computer screen

Focus on driving relevant traffic to your online store and boost transactional sales.

About 21% of the retail sales in the USA comes from e-commerce. Only about half of that is Amazon, which means there are millions of other websites competing with you for your customers’ clicks and purchases. Leveraging SEO can create long-term, competitive advantages for any business in this hyper-competitive space.

When you have transactional products and/or services for sale on your site, do not overlook the funnel in your keyword strategy. Generally speaking, this means the more precisely a visitor is searching for a product, the closer they are to making a purchase.

  • Industry words (“vacuum”) are top-of-the-funnel. They require a lot of information, are looking broadly for a solution, and may not even be looking for the product that you offer.
  • Generic product names (“vacuum cleaner”) can be considered top or mid-funnel. They know they need a solution but don’t necessarily know what. Provide comparative information, and show your product in many different scenarios.
  • Longer tail generic phrases (“robot vacuum” or “automatic robot vacuum cleaner”) could be considered mid to low in the funnel. They know what they want and are looking to compare similar products to help them make a decision.
  • Branded searches usually are considered lowest in the funnel, especially when combined with buy words (“buy roomba vacuum” or “discount roomba vacuum”).
  • Specific part numbers can be a good indicator that someone is looking to buy right this minute. Maybe its a replacement or refillable part, or that they know exactly what they want. You will find the more specific the keyword, product name, or even part number, the more likely your visitors will purchase. Optimize content for the problems that your product solves; create very focused content that builds confidence and leads your customer through the purchase.

Once you’ve identified your audience and keywords, focus on making the transaction as easy as possible with conversion rate optimization (CRO). The objective of CRO is to increase average conversion value. A good way to test the efficacy and potential ROI of keywords and phrases is to conduct a pay-per-click campaign to discover if they are providing traffic and conversions.
 

seo goals branding Surprised cowSEO Objective #4: Branding

Increase customer awareness and lower resistance to future transactions.

Branding is often an overlooked, but mission-critical, part of an ongoing marketing campaign.

If you’re just starting to build your brand with your target market, branding eases future conversations by creating space for you in your customer’s mind. It’s easier to engage with a known company than a new, recently found entity.

For established brands, ongoing branding protects your domain and builds trust. Ranking well for industry terms around your business can create awareness of new solutions and gain a quick customer while lesser brands struggle. Leverage your brand by making your presence known in keyword searches that involve competitive words and products. Make sure you are part of every conversation.

SEO gets consumers participating and interacting with your brand. Your keyword focus becomes straightforward as you will be targeting your company and product name so you will achieve more with less intensive effort. Make sure your site is accessible with good link structure and focus on links from high-quality sources that legitimize your brand. These high-quality links are valuable to Google as an indicator of the importance of your website.
 

seo goals reputation management Lego man surrounded by star wars storm troopers.SEO Objective #5: Reputation Management

Protect your brand.

We get it. Everybody makes mistakes. In the Internet era, every mistake is magnified and can stick around hurting your brand for months or years.

When you are trying to protect your brand from having a negative reputation or change an existing negative image, SEO can be a huge help in achieving this perspective shift.

First, own your brand name in all its forms. You want to have 10 out of 10 branded search results in Google in your control. This involves optimizing pages on many different domains so you can “own” complete pages of search results. Create presences on Facebook, Linkedin, Github, Reddit, Twitter, etc. and run branded SEO campaigns on those pages. When you own the top 10, don’t relax. Keep steady pressure with additional unique content and links relevant to your brand.

Then, focus on keywords that are highly relevant to your brand. It could be your legal business name, personal name, brand name or a popular variant. Use public relations, press releases, social media profiles, links from networks of sites you may own or control.

Do not underestimate the power of a personal response from the founder or CEO to an online complaint. However, if you aren’t experienced or comfortable doing this, consider using outside professionals, because responses must be carefully crafted. Quick, unconsidered comments can be seen as flippant, out-of-touch, uncaring, or worse: defensive and angry. However, an appropriate word can diffuse a situation and actually increase customer loyalty in the long run.

Even if you don’t have a negative situation, consider starting now to protect your brand. Reputation management is one of the most challenging SEO practices when done in an emergency. Plan ahead, build your reputation, and be ready when an emergency does happen.
 

seo goals customer service Hands holding a sparkler.SEO Objective #6: Customer Service

Your customers are asking questions on Google. Make sure the answers come from you.

If you want long-term relationships with your customers, be there when they need you. That means anticipating their needs after the sale and providing answers to questions that they have at each stage of the ownership cycle of your product. Each interaction is an opportunity to reinforce your brand in their mind, control negative impressions, and build a relationship that will last.

Find content ideas by mining your customer service logs, online support requests, or looking at other companies in your industry. Answer questions with a blog post, video, or instructional document and then link to it from relevant places on your website. That’s just the beginning.

Another tactic for acquiring new customers is to create content that answers questions about competitor’s products! Help them without reservation, and gently guide them to your solution.
 

seo goals targeting Smiley face surrounded by frowning faces.SEO Objective #7: Target a Specific Person or Company

Reach out and touch someone.

One last SEO objective to consider is the Internet’s unique ability to target specific individuals with your content. Say that a salesperson has been trying to break into a company with your product. But, try as they might, they can’t get past the gatekeepers for a phone call. Email isn’t working, and cold calling is a non-starter. Should you give up? Hardly.

There is an entire marketing sub-industry around the idea of marketing to the individual. It’s called Account Based Marketing (ABM). ABM is a strategic approach to business marketing in which an organization communicates with individual prospects or customer accounts as markets of one. Although it’s typically employed in enterprise level sales organizations, companies of any size can use these techniques to make key account acquisition easier.

The first step is to clearly identify the exact people you need to market to. The list is usually relatively short, 25-100 people. You can then combine SEO practices—like buying their name on Google Adwords or Linkedin and running a simple ad which leads to a personalized landing page—with the best of ABM and create unique solutions to help you reach new customers.
 

Final Thoughts

This stuff isn’t easy. If it were, business wouldn’t need marketing professionals like yourself to figure out these objectives and implement them. There is no cookie cutter approach to marketing. Every company has different customers, products, and competitive pressures, so be careful when applying these objectives to your situation. Nothing can replace genuine conversations and openness.

And these are just some of the top objectives of SEO. Here are several secondary objectives that I’ve seen over the years:

  • Increase the number of product pages in Google SERPs
  • Reduce leads from low-budget customers
  • Reduce customer service calls
  • Apple/Android App Store SEO
  • Amazon product listing SEO
  • Educate the consumer
  • Measure coupon use
  • Event-specific SEO
  • Drive retail sales
  • Reduce returns
  • Ego

Whether your objectives are on this list or not, Volacci stands ready to help you create the best possible online presence for your business. If you’d like a quick leg-up on your Drupal SEO, take a look at our SEO Kickstart Plans and give us a call us today. Whatever your objectives, Volacci can help.

Jan 19 2021
Jan 19

Drupal's toolbar second level of menu options and dropdown not showing? Look for "Uncaught DOMException: The quota has been exceeded." errors, as viewable in the Firefox web console. If you see them, the problem is likely due to sites sharing a top-level domain—which is likely if you are using a local development environment like DDEV, and you working on way too many sites at once—combined with a pretty bad Firefox bug that will be fixed in the next release.

To quote Nathan Monfils:

  1. Everything from your public domain (abc.tld) counts against your quota, even if it is in a seemingly unrelated subdomain (e.g. my-app.example.com and intranet.example.com).
  2. The quota is not recomputed properly, requiring a firefox restart after clearing your data on other subdomains

Note this may affect all sorts of applications, not just Drupal, when you have them running on multiple subdomains of the same top-level domain. So this isn't just about local development environments (and i dislike that DDEV shares their own top-level domain across all the instances you are working on, and while it can be changed i've accepted its way of doing things so i'm on the same page with other developers by default).

Sure, closing more tabs and restarting Firefox could (predictably) have fixed this—and a lot else that's wrong with me, according to everyone i know—but why do that when i can open more tabs and learn precisely how broken everything around me really is?

A drawing of a laptop with open tabs extending outside of the laptop as horizontally tiled windows.

I am very happy the bug is fixed and this blog post will be obsolete in mere days! Usually this sort of technical noodlings get relegated to our raw notes, currently hosted through GitLab, but figured at least a few other Drupal developers would want to know what has been going on with their toolbars.

Image credit: "Too Many Tabs" by John Markos O'Neill is licensed with CC BY-SA 2.0.

Jan 19 2021
Jan 19

“Update before you get outdated”. 

PHP 8 is here and is now supported in Drupal 9.1 and its dependencies! November 2020 saw the big release of PHP 8. We call it a big release because of the exciting new features and optimizations it comes loaded with (which we will be talking about shortly). 

Drupal 8.9 and 9.0 are however marked incompatible with PHP 8. They are still compatible with PHP 7.3 and PHP 7.4 – which happens to be the last major PHP update. PHP 7.4 will stop receiving active support from the community from November 2021. And thus, updating your website to Drupal 9.1 will be a good idea now.

Drupal 10, which is scheduled to release in June 2022, will mandate compatibility with PHP 8. Read on to find out about the amazing features PHP 8 has to offer and how you can check if your Drupal version is compatible with PHP 8.

Drupal 9.1 Compatibility with PHP 8

 

What’s new with PHP 8 (Notable Changes)

    1. JIT Compiler

JIT stands for just-in-time compilation. Starting from PHP 5.5, Zend VM became part of PHP. But 8.0 introduced JIT to address some long struggling PHP performance issues. For better performance PHP was based on OPCache using OPCode. This is precompiled code given to the processor as commands. However, it is not very native to the machine language. On the other hand, JIT provides actual machine code with a mechanism to work together with OPCache. JIT does not work automatically. We need to configure this in the php.ini file.

    2. The null safe operator

You must be familiar with the null coalescing operator (??) which worked as:

  
$value = $var1 ?? $var2

It checks for the null value of $var1 and returns it. If it is not null, it returns $var2. But it does not work with method calls. Here, the null safe operator comes into the picture.

  
$value = $obj->getData()?->getValue();

Here you can call the getValue() method; even if no method $obj->getData() returns null, the code will not crash. It will return null. On the other hand, using the null coalescing operator:

  
$value = $obj->getData()->getValue() ?? null; 

..will throw an error.

    3. Named argument

PHP 8 allows you to now pass named arguments to functions. It does not depend upon the argument order. Instead, you can pass the argument name.

  
function named_arg_example(String $arg1, $string $arg2, $string $arg3) {}

named_arg_example(
      arg1: ‘arg1 value’,
arg3: ‘arg3 value’,
arg2: ‘arg2 value’,
);

    4. Match expression

Match expression is like the switch statement, except that it does not require a break statement.

  
$value = match($check) {
0 => ‘Value is zero’,
  1, 2, 3 => ‘Value is non zero and less than 4’’
}

There are many other great new features added to PHP 8 like the constructor property promotion, Attributes, Constant type errors for internal functions, Saner string to number comparison, etc. More details can be found here.

How to perform a Compatibility Check with PHP 8 on Drupal

You can use this method to check if your version of Drupal is compatible with PHP 8 or not. For that, you will need to first make sure you have the required package – phpcompatibility. For more information on this, visit here.

Next, you should already be having Drupal installed. If not, you will need to install Drupal 9 in your system. Using composer to install Drupal is the recommended way. For information about composer installation please refer this document

STEP 1: Drupal Installation

Use this Composer command to install recommended version of Drupal

  
composer create-project drupal/recommended-project [my_site_name_dir]

You will need to change [my_site_name_dir] with the folder name you want to install Drupal into.

STEP 2: Installing the required Package

After installing Drupal, you will have composer.json in your Drupal root directory. Open it in text editor and add the following code:

  
"require-dev": {
    "phpcompatibility/php-compatibility": "*"
},

If you already have require-dev section in your composer.json file, just add

"phpcompatibility/php-compatibility": "*"  to the list.

Next, you need to provide location info to the PHP code sniffer by adding the following lines to composer.json

  
 "scripts": {
    "post-install-cmd": "\"vendor/bin/phpcs\" --config-set 
installed_paths vendor/phpcompatibility/php-compatibility",
    "post-update-cmd" : "\"vendor/bin/phpcs\" --config-set 
installed_paths vendor/phpcompatibility/php-compatibility"
}

And then run:

  
 composer update --lock

It will install phpcompatibility and other required packages.

STEP 3: Compatibility Check

Now, use this command to check PHP compatibility for the project 

  
vendor/bin/phpcs -p [directorypath] --standard=PHPCompatibility 
--runtime-set testVersion [php version] --extensions=[file extensions] 
--report-full==[path/to/report-file]

You need to replace the directory path with the directory path that the test will run on. In our case it is ‘.’ because we want to run the test in current directory (All Drupal files and folder). You should also replace the [php version] with the version you want to check compatibility with - which in this case will be 8.0. Replace the [file extensions] with file extensions like php, module, inc, install, etc. The report-full gives you the flexibility to store the report log in a file. So you will need to provide the path for the log file.

So, for our case, the command will be: 

  
vendor/bin/phpcs -p . --standard=PHPCompatibility --runtime-set 
testVersion 8.0 --extensions=php,module,install,inc 
--report-full==./drupal9-php8-compatibility.txt

It will take a few minutes and you will get a drupal9-php8-compatibility.txt file, where you can check the reported log.

Jan 19 2021
Jan 19

19 Jan

Nick Veenhof

A new year also means some new predictions. When it comes to innovation in the web technology industry, innovation is, as always, moving faster than expected.

In this blog I will share a couple of items that we should keep an eye out for in the next 12 months within the web development world. As with any prediction, I can’t see in the future - so judge for yourself. :-)

Cloud IDE’s will disrupt local development flows

One of the first major innovations that I see happening in 2021 is the adoption of Cloud IDE’s. Cloud what? In short, a development environment that doesn’t need anything on your local computer to make changes to a specific project.

Let’s take Drupal as an example, Drupal requires PHP, A form of database like MySQL, Caching technologies like Redis or Memcached, Reverse Caching technologies like Varnish and to top it of, indexing technologies like Apache Solr or Elasticsearch. Next to that, it also requires in many cases “xdebug” as a means of stepping through the code. And it isn’t finished yet, as we also need an editor or also known as IDE. Some very common IDE’s are PHPStorm or Visual Studio Code.

For someone that is just starting out, this is a very daunting task, and most often requires help from senior profiles to get you started. Translate this to classroom tasks and you can see why more often than not, this kind of complexity is not taught. It would take more time to set it up on the variety of laptops around then the actual teaching. I’ve seen this firsthand myself, when I did some guest lectures.

Luckily there are solutions out there that try to make local development easy, such as Dropsolid Launchpad, DDEV or LANDO but all of them still require certain knowledge and at the very least a powerful computer that can run Docker.

Disruption wouldn’t be called disruption if this model could see itself being threatened. Cloud IDE’s are this disruption. Imagine logging in to your development platform and be able to click edit on the respective environment you would want to work upon. This button opens up a window with an IDE, tuned to your preferences and with all the extensions you need, and with all the connections already setup. You are able to make a change, enable debugging and go through the issue step by step, make a change, commit it and deploy. All within the browser and with the compute power greater than any consumer laptop.

Some might say this will never take off - but then again, people said the same of video game streaming services like Stadia. Stadia is outperforming many local gaming rigs today at a performance level that has never been seen. If this works for games, I’m certain it works for development environments as well.

Only time will tell.

Jan 19 2021
Jan 19

We set up an internal ask me anything session with Nat, the Drupal core maintainer that works at TAG that we sponsor to contribute to Drupal core every day and let our engineering team ask him anything they wanted. We got into some very deep topics and had learned some things that quite surprised us. Below is a transcript of the most interesting bits of the conversation. 

Read on for insights into Drupal 8 and 9!

How do you decide what to work on?

I start my day, and really spend all my time, on the Ready and Tested By the Community (RTBC) queue on Drupal.org. Typically there are always 40-100 issues waiting to be committed. I think it’s been empty just once in the past five years. Some of the issues are small and some of them are huge 200k patches. So really at 9 AM I get on the queue and work the issues, kicking some back for additional refinements and committing some to core.

At the end of the day, there might be more in the queue than when I started. It’s a bit Sisyphean.

In addition, I believe it’s crucial as a Core Maintainer to do client work because you need that perspective from using Drupal in the wild for real client uses. I think that informs our work on core better. I spend roughly half of my time doing client work for these reasons. So it does happen that something that annoys me on a client ticket I will look at improving it in core.

I’m also jointly responsible with xjm for the release schedule. This means keeping an eye on issues that we’re hoping to get done for the next minor release, as well as identifying blockers (and sometimes unblocking) for Drupal 10, which means trying to plan a year or three ahead. This could be features, critical bugs, or dependencies like Symfony.

Is working on Core really just like an issue queue for a contributed module, just bigger?

Essentially. There are always core initiatives happening, some of which have their own teams and funding, so function more like a contributed project within a project. But, at the end of the day, all of that work ends up as an issue in the queue that I work on. Every change in core needs to be worked on by at least three different people (the patch or merge request author, a reviewer, and a committer), so there is no directly committing code for core maintainers, it’s always a collaborative process whether you have commit access or not.

How do you handle strategic long term concerns, when things could go in two different philosophic directions, and conflict?

We don’t have an official guidance document or anything; we really just try to hash things out. There are long-running ones. Often with these big decisions we make a meta issue and hash it out there, and at some point, consensus starts to push it in one direction or the other.

Events versus hooks is a good example of a major issue that as yet has not been resolved. In Drupal 8 we added a Symfony events system because it was needed by core functions like routing. We then started adding events in Drupal Core that contributed modules could take advantage of. We also kept the hook system in place, in parallel.

Some people want to deprecate hooks entirely and use only events. Others, like me, prefer to modernize the hook system and drop the event system entirely. We don’t yet have a consensus on this issue, but I’m confident at one point we will. Until then we’re stuck with both, but while this might be an annoyance sometimes, it’s not really broken.

When there are important bug fixes that are also blocked on architectural changes things can become a bit more urgent, although this doesn’t always mean they’re resolved faster. Having said that, it’s rare that architectural disagreements are what holds an issue up for very long. What tends to take most of the time is ensuring that changes in one system don’t break another and that people are able to move from old APIs to new ones smoothly - more like city planning than architecture.

What are the shortcomings of turning ideas in the issue queue into Drupal functionality?

It’s better than it used to be. In Drupal 6 and 7, it was challenging because the release cycle was 3-4 years and no new features could go into Drupal 6 or 7 after their first stable release. So if new functionality didn’t make it into Drupal 7, that was often kicked back or punted to Drupal 8.

With our six-month release cycle, we now have a clear, quick process to get new functionality into the next release of Drupal or set it on a clear path for a future release, no more than a year away usually. With experimental modules, it’s also a lot easier to introduce things in stages, while keeping the overall system working

We have a lot of technical debt in core so there have been some occasions where two groups of people will work on different issues, not knowing the other issue exists, and not knowing that these two issues are actually duplicates. Work can get wasted, buried in those unknown duplicates.

There is a new initiative called Bug Smash that is trying to address this, cleaning out old issues and cleaning up the past. It’s been a great success so far to reduce technical debt in Drupal, but it’s still resolved hundreds of issues in a backlog of thousands.

Getting more people involved in core is great, but it’s required to add more structure to how issues progress. I think this speeds up throughput overall since it’s easier to see at what stage any particular issue is at, what’s left to be done, what should be tackled in a follow-up or parallel issue etc., but at the cost of additional steps for each individual issue compared to core development say ten years ago.

What are your favorite things to come out of Drupal 8 & 9?

The two major ones for me are the Entity System and the caching layer.

The Entity System changes in Drupal 8 compared to 7 have been great. It actually is a coherent system now. We added automated Entity schema updates late in Drupal 8, which introduced upgrade path bugs at the time but made the system much more powerful. It feels solid and complete now.

Cache tags and context, the new caching layers in Drupal 8, was one of the first things I worked on in core. Lots of people implement the system wrong, I notice this in client work, but when you implement it right you have a really powerful, granular caching system at your disposal that works with edge caching layers.

What is the right way to use cache tags?

When you add stuff to the cache system you have a cache ID (like an Entity ID). A unique identifier for the thing that you are caching. The context, when you are rendering, is not the identifier for the thing, but things that come from the request, like the current user, or time zone, etc. So even if you’re rendering the same content teaser, contextual links may or may not show up depending on permissions, or the author name may or may not link to their user profile depending on whether you’re allowed to access it. The combination of cache ID and cache context affects which actual cache object the render API will retrieve when building a page.

Cache tags are stored with the cache items. So a list of ten nodes might have cache tags for each node in the list, as well as the authors of each node and any media items. When a node is updated, we invalidate its cache tags, and the next time that list of nodes is rendered, the tags are checked and it’ll be a cache miss. The list of nodes has to be rerendered, the node we updated has to be rerendered, but the other nine nodes in the list will usually be retrieved from the cache because they don’t have that cache tag.

The combination of cache contexts and cache tags means you’re showing the right thing to the right people at the right time.

Where people tend to get it wrong are areas like access checks. For example, if I’m implementing an access check depending on the author of a node, someone could come along, edit the node, and change the author, and my access check is still based on the old author. These bugs can be hard to track down because by the time a developer goes to look at the information being displayed, the cache may have been invalidated for some other reason.  By using RefinableCacheableDependencyInterface :addCacheableDependency($node);, when the node is updated, the access result cache will be invalidated too via cache tags.

Another area that people get wrong, or rather often don’t know exists, is placeholdering. So if you have something that is per user, ideally you want to placeholder that and we have a Placeholder API in the render system. If you have 200,000 users on a site, you don’t want to cache your entire site header 200,000 times - you want to cache as much as possible once, and their username separately, even though it’s rendered as part of the header. You can take advantage of the placeholdering API almost for free - it just requires using a #lazy_builder callback in a render array for the content that is per-user, instead of putting everything in there directly, then the render API will figure out that this is content which needs placholdering almost by itself.

Jan 18 2021
Jan 18

What I needed to do

I develop and maintain several Drupal websites. I do some development on a server running cPanel (in a Linux account that is totally isolated from the account running any production sites), most notably theming work.

I wanted to develop a custom subtheme of the Drupal base theme Barrio (a Bootstrap implementation). Because I like using Sass as a CSS pre-processor, to give me maintainable source files, I wanted to use the Barrio SASS Starter Kit theme as a starter. (It is itself a subtheme of Barrio).

That starter kit uses Gulp to generate the final stylesheets.

So, to do any theming work from a cPanel account, I had to find out how to run Gulp scripts from within cPanel. Gulp runs on node.js.

What I'm about to describe will work with other Drupal themes that use Gulp, and will also work for Drupal themes that need other tools (such as Grunt).

The Red Herring

For cPanel hosting, I have used Veerotech for several years. They are excellent and I highly recomend them. Technical support, when needed, is timely day or night. You talk to actual techs employed by Veerotech themselves (never outsourced). As someone who is fairly competent in web hosting (having run servers myself using various control panels, and no panel), if I need help I'll ask a question that is phrased in the correct technical terminology. Unlike some other providers, they engage me on that level, read and understand the actual question asked, and almost always resolve first time.

In particular, they offer two things, that I thought might have been enough. 1. With only a helpdesk ticket and a five minute wait, any account can have console / shell access. 2. Their CloudLinux setup includes the tool to create a Node application within the cPanel UI, including allowing you to run it from an external (sub)domain if you want an actual website powered by Node.

I don't need public access, but I hoped that this access to Node might give me a way to run the Gulp script from my Barrio subtheme.

Alas, no. The cPanel / CloudLinux Node application system assumes you'll be running Node only from within the directory where you create your app. If I tried to run the Gulp script for my theme, it couldn't see dependent modules (like PostCSS). So this was not the answer.

But I found a solution that works, and it's really quite easy when you know how. In fact, it's elegant and cleaner than creating a Node application that is accessible (but does nothing) from the public internet. Here's how:

Node Version Manager

Node Version Manager is a package that, in its own words, "a version manager for node.js, designed to be installed per-user, and invoked per-shell. nvm works on any POSIX-compliant shell (sh, dash, ksh, zsh, bash), in particular on these platforms: unix, macOS, and windows WSL."

The important bit is "per-user". It is installed by the user wanting to run it, in the shell they wish to use. Root permissions are not needed.

Step 1: Install Node Version Manager

The docs tell you to run one of these two commands.

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash

Personally, I never pipe curl or wget straight into a shell command. Should the download be corrupted or fail to finish, you could accidentally run half a script and leave things in an unstable state. So I did this:

wget https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh
bash install.sh

The version number (0.37.2) was current at the time I ran the install script. Obviously, use the download current when you run it.

This will install Node Version Manager into a directory within your home named .nvm , and attempt to append lines to your .bashrc file that sets up the environment and path for future use. It also prints to screen how to run those commands yourself, in case you don't wish to log back into the shell (or source .bashrc).

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Step 2: Install Node.js

In theory, you just run

nvm install node

I tried that first, but hit a problem. The gulp script for the Barrio subtheme calls node-sass.

In particular, it called version 4.14.1 of node-sass, which threw an error because that version does not support 15.x releases of Node.js. By the time read this, a different version of node-sass may be called (5.0.0 does support Node.jx 15). So you may be able simply to run the command above.

In my case, I had to look at the release notes for node-sass 4.14.1, and see that the highest supported version of Node.js was 14. I then went to the table of releases for Node.js where I saw that meant installing Node.js 14.15.4. That should be possible with

nvm install 14.15.4

but for some reason that hung without completing. The release table also told me that 14.15.4 was the current long-term support version, so I ran this command without any trouble:

nvm install --lts

Step 3: Install the required modules for the project

I was now able to call the commands on the Barrio SASS project page. Install both Bootstrap Barrio and Barrio SASS, run the command included with Barrio SASS to create your own subtheme, navigate to the your custom theme directory, and run these two commands:

npm install --global gulp-cli
npm install

Step 4: Call gulp

Now, you just go to your custom theme directory and run:

gulp

That will pick up gulpfile.js in the project directory and compile the theme resources. It will then stay running, because the gulpfile includes gulp-watch, which means it will watch for when you change any of the .scss files and instantly rebuild the theme. So you may prefer to run

gulp &

to keep it in the background.

The Gulp script will also think you're running a full version of Node.js, which means it will attempt to launch a web serving process listening on a particular port on the localhost interface. None of that will work in a shared hosting environment. That's OK - you don't need it to. You just need Gulp to assemble the css files for your theme, which it will do.

Jan 18 2021
Jan 18

But in this post I'd like to talk about one of the disadvantages that here at Wunderkraut we pay close attention to.

A consequence of the ability to build features in more than one way is that it's difficult to predict how different people interact (or want to interact) with them. As a result, companies end up delivering solutions to their clients that although seem perfect, turn out, in time, to be less than ideal and sometimes outright counterproductive. 

Great communication with the client and interest in their problems goes a long way towards minimising this effect. But sometimes clients realise that certain implementations are not perfect and could be made better. And when that happens, we are there to listen, adapt and reshape future solutions by taking into account these experiences. 

One such recent example involved the use of a certain WYSIWYG library from our toolkit on a client website. Content editors were initially happy with the implementation before they actually started using it to the full extent. Problems began to emerge, leading to editors spending way more time than they should have performing editing tasks. The client signalled this problem to us which we then proceed to correct by replacing said library. This resulted in our client becoming happier with the solution, much more productive and less frustrated with their experience on their site. 

We learned an important lesson in this process and we started using that new library on other sites as well. Polling our other clients on the performance of the new library revealed that indeed it was a good change to make. 

Jan 18 2021
Jan 18

A few years ago most of the requests started with : "Dear Wunderkraut, we want to build a new website and ... "  - nowadays we are addressed as "Dear Wunderkraut, we have x websites in Drupal and are very happy with that, but we are now looking for a reliable partner to support & host ... ".

By the year 2011 Drupal had been around for just about 10 years. It was growing and changing at a fast pace. More and more websites were being built with it. Increasing numbers of people were requesting help and support with their website. And though there were a number of companies flourishing in Drupal business, few considered specific Drupal support an interesting market segment. Throughout 2011 Wunderkraut Benelux (formerly known as Krimson) was tinkering with the idea of offering support, but it was only when Drupal newbie Jurgen Verhasselt arrived at the company in 2012 that the idea really took shape.

Before his arrival, six different people, all with different profiles, were handling customer support in a weekly rotation system. This worked poorly. A developer trying to get his own job done plus deal with a customer issue at the same time was getting neither job done properly. Tickets got lost or forgotten, customers felt frustrated and problems were not always fixed. We knew we could do better. The job required uninterrupted dedication and constant follow-up.

That’s where Jurgen came in the picture. After years of day job experience in the graphic sector and nights spent on Drupal he came to work at Wunderkraut and seized the opportunity to dedicate himself entirely to Drupal support. Within a couple of weeks his coworkers had handed over all their cases. They were relieved, he was excited! And most importantly, our customers were being assisted on a constant and reliable basis.

By the end of 2012 the first important change was brought about, i.e. to have Jurgen work closely with colleague Stijn Vanden Brande, our Sys Admin. This team of two ensured that many of the problems that arose could be solved extremely efficiently. Wunderkraut being the hosting party as well as the Drupal party means that no needless discussions with the hosting took place and moreover, the hosting environment was well-known. This meant we could find solutions with little loss of time, as we know that time is an important factor when a customer is under pressure to deliver.

In the course of 2013 our support system went from a well-meaning but improvised attempt to help customers in need to a fully qualified division within our company. What changed? We decided to classify customer support issues into: questions, incidents/problems and change requests and incorporated ITIL based best practices. In this way we created a dedicated Service Desk which acts as a Single Point of Contact after Warranty. This enabled us to offer clearly differing support models based on the diverse needs of our customers (more details about this here). In addition, we adopted customer support software and industry standard monitoring tools. We’ve been improving ever since, thanks to the large amount of input we receive from our trusted customers. Since 2013, Danny and Tim have joined our superb support squad and we’re looking to grow more in the months to come.

When customers call us for support we do quite a bit more than just fix the problem at hand. Foremostly, we listen carefully and double check everything to ensure that we understand him or her correctly. This helps to take the edge off the huge pressure our customer may be experiencing. After which, we have a list of do’s and don’t for valuable support.

  • Do a quick scan of possible causes by getting a clear understanding of the symptoms
  • Do look for the cause of course, but also assess possible quick-fixes and workarounds to give yourself time to solve the underlying issue
  • Do check if it’s a pebkac
  • and finally, do test everything within the realm of reason.

The most basic don’t that we swear by is:

  • never, ever apply changes to the foundation of a project.
  • Support never covers a problem that takes more than two days to fix. At that point we escalate to development.

We are so dedicated to offering superior support to customers that on explicit request, we cater to our customers’ customers. Needless to say, our commitment in support has yielded remarkable  results and plenty of customer satisfaction (which makes us happy, too)

Jan 18 2021
Jan 18

If your website is running Drupal 6, chances are it’s between 3 and 6 years old now, and once Drupal 8 comes out. Support for Drupal 6 will drop. Luckily the support window has recently been prolonged for another 3 months after Drupal 8 comes out. But still,  that leaves you only a small window of time to migrate to the latest and greatest. But why would you? 

There are many great things about Drupal 8 that will have something for everyone to love, but that should not be the only reason why you would need an upgrade. It is not the tool itself that will magically improve the traffic to your site, neither convert its users to start buying more stuff, it’s how you use the tool.  

So if your site is running Drupal 6 and hasn’t had large improvements in the last years it might be time to investigate if it needs a major overhaul to be up to par with the competition. If that’s the case, think about brand, concept, design, UX and all of that first to understand how your site should work and what it should look like, only then we can understand if a choice needs to be made to go for Drupal 7 or Drupal 8.  

If your site is still running well you might not even need to upgrade! Although community support for Drupal 6 will end a few months after Drupal 8 release, we will continue to support Drupal 6 sites and work with you to fix any security issues we encounter and collaborate with the Drupal Security Team to provide patches.

My rule of thumb is that if your site uses only core Drupal and a small set of contributed modules, it’s ok to build a new website on Drupal 8 once it comes out. But if you have a complex website running on many contributed and custom modules it might be better to wait a few months maybe a year until all becomes stable. 

Jan 18 2021
Jan 18

So how does customer journey mapping work?

In this somewhat simplified example, we map the customer journey of somebody signing up for an online course. If you want to follow along with your own use case, pick an important target audience and a customer journey that you know is problematic for the customer.

1. Plot the customer steps in the journey

customer journey map 1

Write down the series of steps a client takes to complete this journey. For example “requests brochure”, “receives brochure”, “visits the website for more information”, etc. Put each step on a coloured sticky note.

2. Define the interactions with your organisation

customer journey map 2

Next, for each step, determine which people and groups the customer interacts with, like the marketing department, copywriter and designer, customer service agent, etc. Do the same for all objects and systems that the client encounters, like the brochure, website and email messages. You’ve now mapped out all people, groups, systems and objects that the customer interacts with during this particular journey.

3. Draw the line

customer journey map 3

Draw a line under the sticky notes. Everything above the line is “on stage”, visible to your customers.

4. Map what happens behind the curtains

customer journey map 4

Now we’ll plot the backstage parts. Use sticky notes of a different color and collect the persons, groups, actions, objects and systems that support the on stage part of the journey. In this example these would be the marketing team that produces the prod brochure, the printer, the mail delivery partner, web site content team, IT departments, etc. This backstage part is usually more complex than the on stage part.

5. How do people feel about this?

Customer journey map 5

Now we get to the crucial part. Mark the parts that work well from the perspective of the person interacting with it with green dots. Mark the parts where people start to feel unhappy with yellow dots. Mark the parts where people get really frustrated with red. What you’ll probably see now is that your client starts to feel unhappy much sooner than employees or partners. It could well be that on the inside people are perfectly happy with how things work while the customer gets frustrated.

What does this give you?

Through this process you can immediately start discovering and solving customer experience issues because you now have:

  • A user centred perspective on your entire service/product offering
  • A good view on opportunities for innovation and improvement
  • Clarity about which parts of the organisation can be made responsible to produce those improvements
  • In a shareable format that is easy to understand

Mapping your customer journey is an important first step towards customer centred thinking and acting. The challenge is learning to see things from your customers perspective and that's exactly what a customer journey map enables you to do. Based on the opportunities you identified from the customer journey map, you’ll want to start integrating the multitude of digital channels, tools and technology already in use into a cohesive platform. In short: A platform for digital experience management! That's our topic for our next post.

Jan 18 2021
Jan 18

In combination with the FacetAPI module, which allows you to easily configure a block or a pane with facet links, we created a page displaying search results containing contact type content and a facets block on the left hand side to narrow down those results.

One of the struggles with FacetAPI are the URLs of the individual facets. While Drupal turns the ugly GET 'q' parameter into a clean URLs, FacetAPI just concatenates any extra query parameters which leads to Real Ugly Paths. The FacetAPI Pretty Paths module tries to change that by rewriting those into human friendly URLs.

Our challenge involved altering the paths generated by the facets, but with a slight twist.

Due to the projects architecture, we were forced to replace the full view mode of a node of the bundle type "contact" with a single search result based on the nid of the visited node. This was a cheap way to avoid duplicating functionality and wasting precious time. We used the CTools custom page manager to take over the node/% page and added a variant which is triggered by a selection rule based on the bundle type. The variant itself doesn't use the panels renderer but redirects the visitor to the Solr page passing the nid as an extra argument with the URL. This resulted in a path like this: /contacts?contact=1234.

With this snippet, the contact query parameter is passed to Solr which yields the exact result we need.

/**
 * Implements hook_apachesolr_query_alter().
 */
function myproject_apachesolr_query_alter($query) {
  if (!empty($_GET['contact'])) {
    $query->addFilter('entity_id', $_GET['contact']);
  }
}

The result page with our single search result still contains facets in a sidebar. Moreover, the URLs of those facets looked like this: /contacts?contact=1234&f[0]=im_field_myfield..... Now we faced a new problem. The ?contact=1234 part was conflicting with the rest of the search query. This resulted in an empty result page, whenever our single search result, node 1234, didn't match with the rest of the search query! So, we had to alter the paths of the individual facets, to make them look like this: /contacts?f[0]=im_field_myfield.

This is how I approached the problem.

If you look carefully in the API documentation, you won't find any hooks that allow you to directly alter the URLs of the facets. Gutting the FacetAPI module is quite daunting. I started looking for undocumented hooks, but quickly abandoned that approach. Then, I realised that FacetAPI Pretty Paths actually does what we wanted: alter the paths of the facets to make them look, well, pretty! I just had to figure out how it worked and emulate its behaviour in our own module.

Turns out that most of the facet generating functionality is contained in a set of adaptable, loosely coupled, extensible classes registered as CTools plugin handlers. Great! This means that I just had to find the relevant class and override those methods with our custom logic while extending.

Facet URLs are generated by classes extending the abstract FacetapiUrlProcessor class. The FacetapiUrlProcessorStandard extends and implements the base class and already does all of the heavy lifting, so I decided to take it from there. I just had to create a new class, implement the right methods and register it as a plugin. In the folder of my custom module, I created a new folder plugins/facetapi containing a new file called url_processor_myproject.inc. This is my class:

/**
 * @file
 * A custom URL processor for cancer.
 */

/**
 * Extension of FacetapiUrlProcessor.
 */
class FacetapiUrlProcessorMyProject extends FacetapiUrlProcessorStandard {

  /**
   * Overrides FacetapiUrlProcessorStandard::normalizeParams().
   *
   * Strips the "q" and "page" variables from the params array.
   * Custom: Strips the 'contact' variable from the params array too
   */
  public function normalizeParams(array $params, $filter_key = 'f') {
    return drupal_get_query_parameters($params, array('q', 'page', 'contact'));
  }

}

I registered my new URL Processor by implementing hook_facetapi_url_processors in the myproject.module file.

**
 * Implements hook_facetapi_url_processors().
 */
function myproject_facetapi_url_processors() {
  return array(
    'myproject' => array(
      'handler' => array(
        'label' => t('MyProject'),
        'class' => 'FacetapiUrlProcessorMyProject',
      ),
    ),
  );
}

I also included the .inc file in the myproject.info file:

files[] = plugins/facetapi/url_processor_myproject.inc

Now I had a new registered URL Processor handler. But I still needed to hook it up with the correct Solr searcher on which the FacetAPI relies to generate facets. hook_facetapi_searcher_info_alter allows you to override the searcher definition and tell the searcher to use your new custom URL processor rather than the standard URL processor. This is the implementation in myproject.module:

/**
 * Implements hook_facetapi_search_info().
 */
function myproject_facetapi_searcher_info_alter(array &$searcher_info) {
  foreach ($searcher_info as &$info) {
    $info['url processor'] = 'myproject';
  }
}

After clearing the cache, the correct path was generated per facet. Great! Of course, the paths still don't look pretty and contain those way too visible and way too ugly query parameters. We could enable the FacetAPI Pretty Path module, but by implementing our own URL processor, FacetAPI Pretty Paths will cause a conflict since the searcher uses either one or the other class. Not both. One way to solve this problem would be to extend the FacetapiUrlProcessorPrettyPaths class, since it is derived from the same FacetapiUrlProcessorStandard base class, and override its normalizeParams() method.

But that's another story.

Jan 18 2021
Jan 18

If you're a Drupal developer who designs information architecture (IA) for your organization and/or clients, then hopefully by now you're thinking in terms of entities, bundles, and fields, not limiting your thinking to only content types.

This article isn't going to dive into a lesson explaining what entities, bundles, and fields are as there is plenty of great documentation about that.

Back in the Drupal 7 and earlier days, it was common to look at an organization's data and map it almost exclusively to only content types (maybe a few vocabularies as well). With Drupal 8's and 9's Entity API now fully mature, it's time to check yourself and make sure you take into account all of the amazing entity types that are available in both Drupal core and well-used and -maintained contributed modules. 

With that in mind, the next time you are designing the information architecture for a Drupal site, be sure to consider the following entity types.

  1. User (core) - one of the original core entity types - still fieldable, but still not bundleable. For that, use…
  2. Profile (contrib) - this useful module allows you to create various "profile types" that can be associated with each user. Examples include "author" profiles, "contributor" profiles, and "VIP" profile.
  3. Vocabulary (core) - another original core entity type (if it ain't broke…)
  4. Content type (core) - the original and still the best, but often overused. 
  5. Block type (core) - new in Drupal 8, replaces Drupal 7 modules like Bean and Boxes that provided custom, fieldable block types. Block types are great for lightweight, reusable content that doesn't need a dedicated path on your site. Block types are great for supporting content. 
  6. Media (core) - starting with Drupal 8.4, media entities are now part of Drupal core. These are incredibly useful fieldable entity types if your site includes things like PDF files or videos (both locally-hosted and remote). For example, no longer do you need to create a "Document" content type to upload documents that are related to various other entities on your site. 
  7. Paragraphs (contrib) - this popular and well-maintained contributed module allows authors to mix and match various "paragraph types" (fieldable entities) in an effort to create custom layouts of (often) nodes. In this author's opinion, Paragraphs module is best used as a WYSIWYG replacement for the body field, and not as an overall page layout tool. The power of Paragraphs module lies in the fact that a site designer can create and style various paragraph types that site authors can then utilize to provide creative layouts for their content. 
  8. Drupal Commerce (contrib) - another extremely well-maintained contributed module provides several entity types related to ecommerce, including product types, orders, and more. 
  9. Comment types (core) - new to Drupal 8, allows your site to have different types of comments. This can be very useful, but in our experience, not used all that often.
  10. Contact forms (core) - new to Drupal 8 and similar to the Drupal 7 Entityform module. The idea was to create a Webform-like entity type, but in our experience, Webform still continues to be a better solution in the vast majority of use cases.

While this list isn't exhaustive, we believe these are the ones that most Drupal developers will most likely utilize. 

Drupal Career Online, our 12-week, twice-a-week, online Drupal training program teaches not only most of all of these entity types, but also how to figure out when to use each one. We also focus on how to work with various project stakeholders in validating the IA design early in the development process in order to keep costs and future changes to a minimum. 
 

Jan 18 2021
Jan 18

Websites have entered a new playing field now, at least compared to what they used to be a few decades ago. They are not one-dimensional anymore. They represent a multitude of different business agendas that are essential for growth and visibility.

Websites are not just limited to words, their world has widened progressively. From animations to social media integration, websites today can do it all. A major reason for these advancements in websites and their build is the software they are built on. And that is going to be the highlight of this blog.  

We will talk about the Content Management Systems and the Static Site Generators and shed light on their uses, their suitability and whether they can work in sync or not? So let’s begin. 

Understanding a CMS 

There is a time line showing the emergence of various open source CMSs.Source: Opensource.com

Commencing with the veterans, CMS or a Content Management System have been around for almost two decades (Drupal, one of the world leaders in web content management, was initially released on 15th January 2001). Despite being that old, the conventions they are built on and the features they have been added with over the years have resulted in CMSs being as modern as modern as can be. 

From easing the workload off of the bloggers’ shoulders to making newspaper editors happy; from catering for corporations and their digital marketing team to aiding numerous government departments online and transparent, a CMS has a wide audience. 

If I had to define a CMS, I would simply call it the one-stop destination for all your website’s content needs. It manages, organises and publishes web content. What is more impressive is that content authors can create, edit, contribute and publish on their own, they do not need to be dependent on developers for that. A CMS offers a collaborative environment to build and present websites, allowing multiple users to work with it at once. Terms like Web Content Management and Digital Experience Platform are being thrown around today and they are nothing, but a modern variant of a CMS. 

Getting into the meaning of CMS a little further, you would hear two versions of it and they are essentially its break down. 

  • First would be the Content Management Application. This makes marketers, merchandisers and content creators self-reliant. They can do the contextual heavy-lifting on their own with a CMA without the requirement of a code, so, none of the guys or girls from IT would be needed. 
  • Next is the Content Delivery Application. This is basically the foundation for your content; the back-end aspect that placed your content into templates to be further presented as one website. So, what your audiences see is provided by the CDA. 

Both of these together make a CMS whole for your use. 

Moving further, after the meaning, it is time to get a brief understanding of the various categories of a CMS. Based upon different categorisations, there are seven in all.

Based on the CMS’ role 

Traditional 

Most often, a traditional CMS is used on really simple marketing sites. I have used the term simple to describe it because it is just that, be it the layout or general functionality. You can create and edit your content using a WYSIWYG or HTML editor and it would display the content as per the CSS you have used.

With a traditional CMS, your entire site is encompassed by one software. The frontend and the backend are closely connected through it, hence, it is also referred to as a Coupled CMS. 

Decoupled 

Unlike its traditional counterpart, the decoupled CMS separated the frontend from the backend. This means they work independent of each other and a change in the presentation layer does not necessarily affect the backend repository. Through decoupling, you get the features of more than one software to base your site’s architecture on. 

Headless 

A headless CMS is more or less similar to a decoupled one. When you take up a headless CMS, your content would always remain the same, however, each of your clients, be it an app, a device, or a browser, would be obligated for the presentation of the content. 

The code in this instance is not in the CMS, rather it is an API that is used for communication and data sharing amongst the two software. This way developers can consume content through an API and content authors can start adding content at the same time. If you are looking for the ‘one size fits all’ approach, this is where you will find your answer. 

Based on cost and ownership 

Open source 

Open source CMSs are the ones that are free of cost, at least initially. You do not need to pay for any license fee for its installation; however, there can be costs that you may incur for add-on templates and more such features. 

Open Source CMSs are pretty popular today, the reason being their thriving community of developers. This results in the veterans redistributing and modifying the code, which not only leads to perpetual software improvements, but also helps the newbies in making progress. 

Proprietary 

A proprietary CMS is the exact opposite of an open source CMS, meaning it is commercial and mandates a licensing fee along with annual or monthly payments. In return for the payments, you would get an out-of-the-box system to meet all your companies requirements, continuous support and built-in functionality.

Based on the location 

On premises 

As the name suggests, this is a CMS that has a physical presence within the company’s premises. The high degree of control it offers to its users is the reason for its popularity. However, the humongous investment and the chances of human error dampen its potential. 

Cloud-based 

The name gives it away. Such a CMS is hosted on the cloud and delivered through the web. It is essentially the combination of web hosting, web software components and technical support. It provides fast implementation and deployment along with accessibility from across the globe on any device.

Why choose a CMS? 

Moving further, let’s now delve into the multitudinal features that are packed inside a CMS making it a suitable choice for you and your organisation’s virtual needs.

If I had to broadly categorise all the features of a CMS, I would end up with three major categories, which will sum up the true potential of this software. 

Content and its production needs

Producing content is the primary reason anyone takes on a CMS. It is true if you are a blogger and it is also true if you work for an educational institution and its online persona. It is the content that speaks for itself, when it comes to your site and it needs to be pristine, for lack of a better word. And CMSs help you achieve a level of control over your content production that you desire.

  • Starting with the edits, the WYSIWYG editor could be deemed as the heart and soul of a CMS. It provides you formatted text in paragraphs with quotes, superscripts, underlines as well as images and videos. Your authors would not have to work around codes for sure. 
  • Focusing on the media, images are an important part of it. Every CMS has room for them, they can be uploaded directly from your computer or archives, either within the content or you can add them in the page itself. The same is true for pdfs, animations and videos. Videos also have the option of being embedded through Youtube. 
  • Furthermore, CMSs also support multilingual and multi-channel sites. This eases the pressure off of the content authors and makes localised projects easy to run. 

Content and its presentation needs

Presentation is all about design, how it is done and how it would be showcased to the end user. There are a lot of design considerations that a CMS can help you with. 

  • A CMS would have you sorted with the right font and its size and the right colours and contrast. 
  • A CMS would have your sorted with the right responsiveness for your site. 
  • A CMS would have you sorted with the right URLs and URL logic. 
  • A CMS would have you sorted with the right templating tools to change your layout. 
  • A CMS would have you sorted with the right hierarchy for your site as well as provide the right prominence to the aspects that need it. 
  • Finally, a CMS would have your site sorted for all the right accessibility protocols to make it universally accessible. 

Content and its distribution needs

Once the content is produced, its distribution comes into play. This has a direct impact on your site's visibility. And CMSs ensure that you get the most out of it. 

  • The foremost part of distribution needs is metadata. This helps in tagging, categorising and describing your content. It includes everything from keyword insertion to identifying the distribution channels and placing access restrictions on the content. 
  • Secondly, CMSs also come equipped with automated marketing tools like analytics and A/B testing that help you understand user behaviour and help you capitalise it. You would just have to define the parameters and the automation would do the rest, be it publishing on your site or email marketing. 

Content and its management needs

Then comes the management of your content, it is a perpetual process that helps in providing an ease to the editors and developers that streamlines the builds and updates of a website. 

  • For one, a CMS helps you plan and execute the publishing of your content. You can actually schedule when and what to post and where to post it. You can also decide when something would be available for the audience to see and when it won’t be like an events’ post. Once the event has happened, it won't need to be on your site anymore and a CMS helps with that. 
  • CMSs also help you to figure out user roles and implement them. This helps in ensuring that sensitive information is only accessible to the users who have the clearance. A manager and a director are going to have different roles, so does a premium member and a regular member of your site. 
  • Finally CMS helps you in avoiding instances where you delete something important and its recovery becomes impossible. Version control and revisions are a feature that has to be in your CMS, if you want the powers to bring back the lost content. 

Apart from these main categories, CMSs are also renowned for their security, their scalability and user friendliness. There is one more thing to add and that is the fact that a CMS can go above and beyond it capabilities by integrating itself to third-parties and combining their features with its own, a headless CMS is an example of the same. Drupal is one of the most popular CMSs, when it comes to going headless. Read our blog, Decoupled Drupal Architecture to know more about it.

Understanding a new vogue: Static Site Generators 

Before understanding a static site generator, let’s shed some light on static sites, since these are what it builds. A static site is the one that is designed in a way that it remains static, fixed and constant, during its design, its storage on a server and even upon its delivery to the user’s web browser. This is the attribute that differs it from a dynamic, it never changes, from the developers desktop to the end user’s, it remains as-is.

Coming to Static Site Generators or SSG, in the most basic of terms they apply data and content to templates and create a view of a webpage. This view is then shown to end users of a site. 

Now let’s get a little technical, you know that an SSG will only create static sites, it does so by creating a series of HTML pages that get deployed to an HTTP server. There would only be files and folders, which points to no database and no server-side rendering.

Developers using an SSG, create a static site and deploy it to the server, so when a user requests a page, all the server has to do is find the matching file and route it towards the user. 

If I talk about the difference between an SSG and a conventional web application stack or a CMS, I would say that it is in the view of webpages. While an SSG keeps all the views possibly needed for a site at hand well in advance, a traditional stack waits until a page has been requested and then generates the view.

Why did SSG come along?

Static Site Generators act differently than a CMS, they are more aligned with the needs of static sites. However, their emergence has a bigger story to tell. 

Yes, CMSs are quite popular today, yet there is a drawback to that. With the rising acclaim of CMSs, some of them have become more prone to cyberattacks. The lead in security hacks goes to WordPress, with almost 90% of all hacks being experienced by it as reported by ITPRO reports of 2020. But, Drupal is considered the most secure CMS as can be seen in Sucuri’s 2019 Website Threat Research Report.

Then there is the issue of performance. CMS sites operate mainly upon their servers, meaning they do the heavy-lifting. If a request is sent, it would mean the server taking the charge of the page assembly from templates and content every time. This also means that for every user visiting your site, the PHP code would have to be run to start up, communicate with the database, create an HTTP response based on the recovered data, send it to the server and then finally, an HTML file is returned to the user’s browser to display the content after interpretation. All of this may impede the performance of the site built on CMS when compared to the one powered by a static site generator. But, it’s not like CMSes give you low-performance websites. They do have provisions for delivering high performance websites. It depends upon which CMS you go with. If web performance is your concern, Drupal can be your go-to option.

An SSG is a solution to these two conundrums, hence, it emerged with a bang. 

What can a Static Site Generator do for you?

there is clock in the middle with the benefits of a CMS written around it.

Static Site Generators solve a lot of the issues that a CMS cannot, consequently they can provide you a lot for your site’s well-being. 

SSG means better security 

In an SSG, the need for a server is non-existent and this is the reason it provides more security. As we have already established that an SSG is rendered well in advance and its ready-to-serve infrastructure helps remove any malicious intent upon your site. This infrastructure essentially eliminates the need for servers, they do not need to perform any logic or work. 

Apart from this, with SSG, you would not need to access databases, execute logical operations or alter resources for each independent view. As a result, there is an easy hosting infrastructure as well as an enhanced security because of the lack of physical servers required for fulfilling requests. 

SSG means elevated performance 

A website’s performance is concerned with its speed and request time, and SSG provides in this area as well. Whenever a page is requested, it involves a whole bunch of mechanism to get it displayed for the visitors. There is the distance it has to cover, the systems it has to interact with along with the work that those systems do. All of these take up time, shadowing your performance. 

Since an SSG site does not mandate such a lengthy iteration per visitor request, it reduces the travel time. This is done through delivering the work directly from a CDN, a distributed network of caches, which aids in avoiding system interaction. Resultantly, your performance soars 

SSG means higher scalability 

When an SSG builds a site, it is often considered pre-built. I mean that is what building all the views in advance of an actual request could be defined as, right? So, with a pre-built site, you have less work on your hands. For instance, a spike in traffic would not mandate you to add in more computing power to handle each additional request, since you have already done all the work beforehand. You would also be able to cache everything in the CDN and serve it directly to the user. As a result, SSG sites offer scalability by default. 

When should you choose a Static site generator?

Now that you know how an SSG can benefit you, it is time to understand the scenarios that would mandate taking up a static site generator and all its advantages. 

When building complex site is the goal 

If you want your website to deliver more complexity, in terms of the kind of features it provides, SSG becomes a good choice. There are many that come equipped to provide you client-side features that are ready to go. 

When creating and displaying content is the only goal

Here SSG is a suitable choice because it would generate pages and URLs for you. And these pages would give you a 100% control over what is being displayed, meaning the output would always be in your hands; content pages need that. 

When generating numerous pages is the goal 

A static site generator can create pages at a great speed. It might not be seconds, but it is quite fast. So, when creating websites that would need a lot of pages to be created, SSG’s speed comes in quite handy. 

When templating needs are complex as well 

An SSG is a powerful software, it has the ability to assess your site’s visual style and content along with its behaviour and functionality. This feature becomes fruitful, when building a website with diverse templating needs. Vue and React based SSGs would definitely help you get the versatility you need on your website, along with the standard use of concept of code reuse on your site. 

I would like to add just one more thing, and that is the fact that your team must be familiar with the static site generator that you are going to end up using. There are a lot in the market. If your team is familiar with .net, use and SSG powered with it. On the other hand if it finds JavaScript more familiar territory, go with an SSG based on that. Let your development team be a part of the discussion, when the suitability of a static site generator is being decided. 

Are Static Site Generators always the right option? 

Coming from the suitability, you would think that an SSG is a great choice. Don’t get me wrong, it is. However, it isn’t a universal software. There are instances when it may not be the right choice. So, let’s delve into these scenarios.

Not when you do not have development experience 

Static Site Generators become a tad bit difficult for amateur developers. Your developers ought to have experience to reap all its benefits. The building process is considered to be more difficult than that of a CMS, something that finding plugins for pre-built pages acn become a chore. Furthermore, there isn’t a huge community out there to help you in the development part, if you are a beginner. 

Not when you need a site built urgently 

You have to understand the urgency and SSGs are not the best of friends. From learning the build process to developing the template code, everything needs time. 

There are development scripts to be me made;
There is the complication of customised them;
There is the additional process of creating and setting Markdown files;

All of these account to more time requirements for the development process. Think of it like this, you are going to be doing all the grunt work beforehand, and that would necessitate more time. 

Not when you need server-side functionality 

When partnering with an SSG, you would be parting with some, if not many, interactive functions on your site. For instance, user logins would be difficult to create, so would web forms and discussion forums. However, there are certain options like lunr.js search and Disqus commenting to help you with your sites interactivity. I would say that these options are pretty limited.

Not when your site has to have hundreds of pages

You might think that I am contradicting myself, however, I am not. Static site generators can create a website with a thousand pages, yet the process can become tedious and awkward. For a thousand or so pages, the content editing and publishing would be cumbersome. Along with this real-time updates could get delayed and like I mentioned before build times rise consequently.

Not when website consistency is a priority 

Lastly, SSG sites offer a lot of flexibility. That should be a good thing, however, it does have a side effect and that is on your site’s consistency. This is because anything that is found in the Markdown files can be rendered as page content. Consequently, users get the chance to include scripts, widgets and other undesired items. 

Can a CMS and an SSG work together? 

Yes, a CMS and an SSG can work together and pretty efficiently at that. However, that partnership is only possible in a headless CMS. This is because a headless CMS gives room for other frontend technology to come and play and in this case that technology is found in static site generators. 

A headless CMS is pretty versatile, choosing a static site to go as its head could help you get most of the benefits that both, the static site and headless CMS, come along with. This partnership indeed has a lot to offer. Let’s find out what that is. 

Two hands shaking can be seen on the left, with the benefits of a CMS and static site generators' partnership.

Proffers easy deployment via APIs

SSGs are quite straightforward to use, especially with an API, which is the connecting force between the SSG and the CMS. Pulling data from an API for generating and deploying a static PWA to any web host or Content Delivery Network is a breeze. 

Proffers ease to the marketing team 

When you work only with an SSG, you would face difficulties as it puts a lot of boundations on the marketing team. This isn’t a problem when you partner with a CMS. 

Proffers easy editing and workflow 

Conventionally, SSGs do not have a WYSIWYG editor or workflow capabilities for the tracking and collaboration of content. You might think that it is only needed for dynamic sites, but that isn’t the case. Static sites also need that. Since CMSs have that capability, they become ideal for content before actually running the SSG; the perfect contextual partnership. 

Proffers easy updates to sites 

With a CMS, you can easily change and update the content. With an SSG, the same changes can be pulled up through the APIs and a new static site can be generated every time they are incurred. All the developers have to do is set a tool up for content pulling and generation. As a result, your site would always be up-to-date and the users would not need to be processed whenever they visit your site. 

To check out some examples of how CMS and SSG can come together, read how Drupal and Gatsby can be leveraged for developing blazing fast websites. You can also go through the benefits of going ultra-minimalistic with the combination of Metalsmith and Drupal.

Conclusion 

In the end, all I want to say is that both a CMS and an SSG have their own set of features and capabilities that make them excellent at what they do, making their users more than happy. However, when it comes to getting the best out of both of them, there is only one kind of CMS that can help you reap the benefits of this dynamic. It is up to you to decide whether you want to use them together or individually.  
 

Jan 18 2021
Jan 18

Human-centered design is a concept that gained traction in the 1990s as an approach  to developing innovative solutions based on a laser-sharp focus on human needs and human perspectives during every phase of a design or problem-solving process. Building upon the principles of human-centered design, Promet Source has served as a pioneer and leading practitioner human-centered web design. 

At the core of our approach to human-centered web design is a deep level of inquiry that questions all assumptions and engages key stakeholders in various exercises that call for letting go of individual preferences and moving toward an empathetic focus on optimizing the experience for the user. The results reveal new possibilities on multiple levels.

With an overarching emphasis on empathy, we look to open new opportunities by understanding the needs and expectations of the people who actually use the website. Sometimes this sparks a mindshift, that reorients the site architecture away from an organization’s internal structure, and focused instead on user journeys.
Too often, websites are architected from the perspective of insiders -- organized by department, without stepping back to ask: 

  • Who visits the site? 
  • What kinds of information are they seeking? 
  • How can we align the navigation of the site around what makes sense to users? 

The best web experiences leverage empathy, and begin with human-centered design processes that dig deep and question any all assumptions about how users’ interactions with the website can it be designed to ensure that they and easily find the information they need and that their experience of visiting the site is both engaging and value added. 

At Promet Source, we approach human-centered web design as a seven-step process.

 

1. Build empathy with user personas

The first and most essential question: For whom are we building or redesigning this site? Following the identification of the key persona groups, we proceed to dig deep, asking “why” and “how” concerning every aspect of their motivations and expectations.
 

2. Assess what user personas need from the website

Understanding of and empathy for user personas dovetails into an analysis of how they currently use the site, how that experience can be improved, and how enhancing their experience with the site can drive a deeper relationship. 
This level of inquiry at the front end might feel excessive or out of sync with what many are accustomed to, but as Tom Gilb, noted in Principles of Software Engineering Management, getting it right at the outset pays off tenfold over the cost of fixing after the site is released.

Ensuring that projects get off to an excellent start is at the core of what human-centered design is all about.

 

3. Map their journeys through the site to key conversions

Just as user groups do not all fit the same mold, what they are looking for from your site will vary, depending on what phase they are in relative to their relationship with your organization – what we refer to as the user journey. 
Too often, website design focuses on one aspect of the user journey. It needs to be viewed holistically, taking the perspectives of all user groups into account.

 

4. Identify Obstacles in their path.

Next step: identify challenges. We map user journeys through every phase, aiming for seamless transitions from one phase to the next.
This step calls for continuous inquiry along with a commitment to not defend or hold on to assumptions or previous approaches that may no longer be optimal, while pursuing answers to questions such as:

  • What have we heard from clients? 
  • Where have breakdowns occurred in conversions and in relationships?
  • How can we fix it with the messaging, design, or the functionality of the website?  
     

5. Brainstorm objectives

Our facilitated workshop setting is structured to build upon a productive flow of ideas via several exercises that draw upon stakeholder perspectives and expertise from multiple angles.

6. Prioritize solutions

While there are “no bad ideas in brainstorming,” in the real world of budgets and time, questions such as “how,” “what’s the cost,” “where to begin,” and “what will have the best impact,” need to be considered. 

As ideas are synthesized, these answers will begin to take shape.  

7. Create a roadmap for development

Too often, web design and development begins at this step. 
With human-centered web design, a depth and breadth of research, persona development, empathetic insights, journey mapping, solution gathering, collaborative energy, and excitement about what’s to come have already been invested when we get to this point. 
As a result, clients have the advantage of moving forward with a high degree of alignment among stakeholders, along with a conviction of ownership in an outcome that will enhance both the experiences and relationships with the humans who visit the site. 

Human-Centered Design Activities

The above steps help to define the “What” of human-centered web design. The “How” of human-centered web unfolds during facilitated workshops. Here are some of the activities that we leverage in the process of bringing human-centered web design to life.

Persona Development

Persona development example

Identifying individual personas helps to define the range of differing user needs and expectations, for purposes of tailoring solutions accordingly. 

Giving every identified persona a name helps to humanize the exercise and reinforces empathy for the actual users of the site. It also serves as a ready reference point or shorthand for further conversation for questions such as: 

  • What else is Joshua going to expect from this page?
  • Will this navigation make sense to Alexis?

Rose-Thorn-Bud

This exercise is designed to quickly gather a significant amount of data in response to specific and essential questions. Adopted from a Luma Institute collection of exercises, participants are given brightly colored Post-It® notes and asked to write everything that they view as an advantage or a plus on a pink (Rose) Post-It. Challenges or downsides are to be written on a blue Post-It (Thorn). Green

Post-Its are for collecting input on potential or emerging for opportunities (Bud). 
Every participant’s opinion ranks equally as responses are gathered and grouped on a white board according to identified categories. 

Affinity Clustering

Affinity cluster example

During this next step, the “Rose-Thorn-Bud” input is organized according to agreed-upon groupings, to reveal patterns, surface priorities, bring order to complexity, and spark productive conversation.

The use of different colored Post-Its is particularly useful in revealing that within a particular category there might be a mix of challenges, opportunities, or advantages. Participants might also have differing opinions as how to characterize a particular attribute.

For example, some stakeholders might view the current site architecture as a Plus (Rose), others might view it in terms of the inherent opportunity or potential (Bud), while others might be largely focused on the challenges of the and ways that the site’s architecture falls short (Thorn).  

In all cases, this exercise sparks engaging conversations and reveals new opportunities for achieving consensus.

Stakeholder Mapping

Stakeholder mapping results in what is essentially a network diagram of people involved with or impacted by the website. Typically, there are considerably more stakeholders than originally thought, and stakeholder mapping evaluates all the possible users of a system to then identify and prioritize needs and expectations. 

Abstraction Laddering

During this exercise, we guide teams through the process of deconstructing a goal as dig deeper into questions concerning “How” and “Why” for purposes of advancing toward greater clarity and specificity. 

Let’s take the example of the statement: “We need to get more visitors to sign up for a demo?” which on its own does not offer much context to develop an action plan. 

During a human-centered design workshop, we’ll move up the ladder going at least three deep to record answers to “Why” and down at least three deep recording answers to “How.” 

Importance / Difficulty Matrix

importance difficulty matrix

Inevitably, some of the ideas that emerge will spark excitement for the strategic leap forward that they could represent. The required time and resources to move forward with them, however, might exceed current capabilities. Other ideas might fall into the category of Low Hanging Fruit -- initiatives that can be achieved quickly and easily.

Plotting every idea on an Importance / Difficulty Matrix is an essential group activity that sparks conversation and accountability concerning Who, How, and When -- transforming good ideas into action items.

In the current environment, organizations tend to be defined by their digital presence. The stakes for getting it right are high and the margin for error is low. Optimizing ideas and perspectives at the outset, and continuing to iterate with feedback creates a strong starting point that serves as a superior foundation for web solutions that are capable of heavy lifting over the long haul. 
Interested in learning more about the possibilities for a human-centered design workshop in your organization? Contact us today.

Jan 16 2021
Jan 16

Drupal's Problem With Decorative Images

Decorative images are those that should not be described to assistive technology like screen readers. A simple example is a fancy image of a decorative border that you insert at the end of a news article.

Supporting decorative images in Drupal is quite straight forward. Images fields can be set to collect alternative text but not require it. When left blank, Drupal will output an empty alt attribute for the image element, indicating to screen readers the image should be ignored. Editors that want to convey that an image is decorative can then simply leave the alt text blank.

The problem with this approach is that it might encourage editors to leave alt text blank even if the image is not really a decorative. It's easy to pass right by the alt text field without even thinking about it. This is especially true for those that are completely unfamiliar with how important alternative text is for accessibility.

There's a small effort underway to resolve this problem in Drupal core. After some great discussions, particularly with Andrew Macpherson, a leading voice in Drupal accessibility, we landed on a potential solution (thanks Andrew!).

A Potential Solution

Instead of simply leaving the alt text field blank to the image is decorative, a checkbox labeled "Decorative" is introduced beneath the field. This checkbox must be checked if the editor wants to leave the alt text blank. This effectively makes the choice explicit rather than implicit, forcing the editor to pause for a second and consciously affirm that the image is truly decorative.

To let this solution incubate and evolve a bit, I contributed it as small module called Decorative Image Widget. It's quite flexible as instead of providing a brand new image widget, it modifies any image widget that is based on the default one provided by Drupal core.

Check it out and please provide feedback in the module's issue queue!

Jan 15 2021
Jan 15

20 years ago, the Drupal project started in a dorm room—today it is a billion dollar industry.

PORTLAND, Ore., U.S.A and LOCAL AREA HERE, January 15, 2021—Drupal, the world’s leading open source digital experience platform (DXP), celebrates 20 years of community-driven innovation. Since its founding 20 years ago, Drupal has touched millions of lives. One in 30 sites on the web is powered by Drupal, and that means most users of the web have experienced Drupal—even if they don't know it. 

Drupal has pioneered the evolution of content delivery across multiple channels. Whether powering conversational user interfaces (CUI) for smart devices, pushing content to digital signage for New York Metropolitan Transportation Authority (MTA), or serving as the core content store for augmented reality experiences, Drupal’s sophisticated architecture and platform stand ready for the future of digital content. 

Redefining digital experiences

7 years ago—on the eve of Drupal's birthday—Drupal founder and project lead, Dries Buytaert, laid out his belief that the web was entering a new era. 

Mobile had transformed the web, but I believed this was just the beginning. The mobile web was the first example of a new web defined by digital experiences that conform to a user's context and devices,” says Buytaert. “Since then, Drupal has defined itself as the leading platform for ambitious digital experiences, and as channels and devices proliferate, Drupal will continue to lead the open source DXP market.

Powered by a global community of innovation

As part of this 20 year milestone, we celebrate our community of more than 100,000 contributors who made Drupal what it is today,” says Heather Rocker, executive director of the Drupal Association. “Success at this scale is possible because the Drupal community exemplifies the values of open source and proves that innovation is sustained by healthy communities. One of our key goals at the Drupal Association is to convene the resources necessary for continued project innovation, and we do that through the collaboration of a global community that continues to grow year after year.

In fact, Drupal contribution increased by 13% in a year when many industries contracted due to the COVID-19 pandemic. Drupal's open source model has built a robust and thriving ecosystem of individual contributors, professional service providers, and end-user organizations that is well positioned to capitalize on the next 20 years of digital innovation. 

Drupal continues to evolve, serving needs around the globe and expanding into new markets.  Future-looking priorities include a continued positive impact on the Open Web, the cultivation of a diverse and inclusive open source community, and an increased focus on editorial experience and usability—to make the power of the Drupal digital experience platform even more accessible.  

2021 will be marked with year-long celebrations happening around the world with particular focus at DrupalCon in April. Related 20th birthday events can be found on social media through the hashtag #CelebrateDrupal and at CelebrateDrupal.org.  

About Drupal and the Drupal Association

Drupal is the open source digital experience platform utilized by millions of people and organizations around the world, made possible by a community of 100,000-plus contributors and enabling more than 1.3 million users on Drupal.org. The Drupal Association is the non-profit organization focused on accelerating Drupal, fostering the growth of the Drupal community, and supporting the Project’s vision to create a safe, secure, and open web for everyone.

 
###
 
For more information or interview requests contact Heather Rocker,  [email protected]
 

Jan 15 2021
Jan 15
Birthday cup cakes

On January 15, 2001, exactly 20 years ago, I released Drupal 1.0.0 into the world. I was a 22 years old, and just finished college. At the time, I had no idea that Drupal would someday power 1 in 35 websites, and impact so many people globally.

As with anything, there are things Drupal did right, and things we could have done differently. I recently spoke about this in my DrupalCon Europe 2020 keynote, but I'll summarize some thoughts here.

Why I'm still working on Drupal after 20 years

Student roomMe, twenty years ago, in the dorm room where I started Drupal. I'd work on Drupal sitting in that chair.

I started Drupal to build something for myself. As Drupal grew, my "why", or reasons for working on Drupal, evolved. I began to care more about its impact on end users and even non-users of Drupal. Today, I care about everyone on the Open Web.

Optimizing for impact means creating software that works for everyone. In recent years, our community has prioritized accessibility for users with disabilities, and features like lazy loading of images that help users with slower internet connections. Drupal's priority is to continue to foster diversity and inclusion within our community so all voices are represented in building an Open Web.

Three birthday wishes for Drupal

Dries giving a presentation on DrupalMe in 2004, giving my first ever Drupal presentation, wearing my first ever Drupal t-shirt.

Drupal's 20th birthday got me thinking about things I'm hoping for in the future. Here are a few of those birthday wishes.

Birthday wish 1: Never stop evolving

Only 7% of the world's population had internet access when I released Drupal 1 in 2001. Smartphones or the mobile web didn't exist. Many of the largest and most prominent internet companies were either startups (e.g. Google) or had not launched yet (e.g. Facebook, Twitter).

A timeline with key technology events that impacted Drupal. Examples include the first mobile browser, social media, etc.A list of technology events that came after Drupal, and that directly or indirectly impacted Drupal. To stay relevant, Drupal had to adjust to many of them.

Why has Drupal stayed relevant and thrived all these years?

First and foremost, we've been focused on a problem that existed 20 years ago, exists today, and will exist 20 years from now: people and organizations need to manage content. Working on a long-lasting problem certainly helps you stay relevant.

Second, we made Drupal easy to adopt (which is inherent to Open Source), and kept up with the ebbs and flows of technology trends (e.g. the mobile web, being API-first, supporting multiple channels of interaction, etc).

The great thing about Drupal is that we will never stop evolving and innovating.

Birthday wish 2: Continue our growing focus on ease-of-use

For the longest time I was focused on the technical purity of Drupal and neglected its user experience. My focus attracted more like-minded people. This resulted in Drupal's developer-heavy user experience, and poor usability for less technical people, such as content authors.

I wish I had spent more time thinking about the less technical end user from the start. Today, we've made the transition, and are much more focused on Drupal's ease-of-use, out-of-the-box experience, and more. We will continue to focus on this.

Birthday wish 3: Economic systems to sustain and scale Open Source

In the early years of the Open Source movement, commercial involvement was often frowned upon, or even banned. Today it's easy to see the positive impacts of sponsored contributions on Drupal's growth: two-thirds of all contributions come from Drupal's roughly 1,200 commercial contributors.

I believe we need to do more than just accept commercial involvement. We need to embrace it, encourage it, and promote it. As I've discussed before, we need to reward Makers to maximize contributions to Drupal. No Open Source community, Drupal included, does this really well today.

Why is that important?

In many ways, Open Source has won. Open Source provides better quality software, at a lower cost, without vendor lock-in. Drupal has helped Open Source win.

That said, scaling and sustaining Open Source projects remains hard. If we want to create Open Source projects that thrive for decades to come, we need to create economic systems that support the creation, growth and sustainability of Open Source projects.

The alternative is that we are stuck in the world we live in today, where proprietary software dominates most facets of our lives.

In another decade, I predict Drupal's incentive models for Makers will be a world-class example of Open Source sustainability. We will help figure out how to make Open Source more sustainable, more fair, more egalitarian, and more cooperative. And in doing so, Drupal will help remove the last hurdle that prevents Open Source from taking over the world.

Thank you

Areal photo of DrupalCon Seattle 2019 attendeesA group photo taken at DrupalCon Seattle in 2019.

Drupal wouldn't be where it is today without the Drupal community. The community and its growth continues to energize and inspire me. I'd like to thank everyone who helped improve and build Drupal over the past two decades. I continue to learn from you all. Happy 20th birthday Drupal!

Jan 15 2021
Jan 15

Open-source has the power to change the world, but, as we depend on it for democratic innovation, open-source also depends on us to thrive. At Axelerant, we know and own this; hence we’re constantly engaging in different open web communities, including Drupal’s.

Why are we writing this? First of all, we are always keen to shine a light on our team members because our people-first culture makes Axelerant succeed. Second, in a knowledge sharing spirit, we are willing to put out what has worked for us (and what we struggle with) regarding contributing and our community involvement.

We are celebrating Drupal’s 20th Anniversary, and we are proud of being part of that history for over a decade. What better way to celebrate than recognizing and sharing the stories of the people involved, the makers that keep the ball rolling.  

Hussain Aabbas

Hussain Abbas
Director of Drupal Services

"Celebrating our people and the community has been among our values since the beginning. Drupal’s 20th anniversary is one of those occasions where both of these values come together in demonstrating Axelerant’s commitment to be a productive part of the amazing Drupal community through its team."

Here, we want to share a few stories from team members who recently contributed and inspired us with their Drupal journey.

Lessons learned in our Monthly Contribution Meetups

We started Monthly Contribution Meetups in 2019 to foster a culture of mentoring and giving back. Our goal is to get more people contributing to Drupal consistently and provide the tools to those who want to do it for the first time. These meetings are an excellent space to seek out support, share findings, learn, and bring the opportunity to know other team members, their Drupal journeys, and motivations. From these sharings, we continue to grasp the familiar obstacles people encounter when contributing, ideas on how to surpass them, and the benefits that come with getting involved. 

screenshot of Axelerant team's zoom meeting

November’s monthly contribution meetup

Thirst for learning overcomes time constraints

Hansa-Pandit

Hansa Pandit
Frontend Engineer - L2

“I was first introduced to Olivero reading about it on different blogs. That caught my eye. I read the documentation, got my set up ready, jumped right into a coding sprint, and assigned myself an issue. I wanted to work on a feature, so when the theme went into the core, I would be able to say: that is the part I built.”

Hansa has been on Drupal.org for over two years, and besides other contributions, she’s been actively involved with the Olivero theme initiative

Time management was a big challenge for Hansa, especially since she gave Olivero the same priority level as other work-related projects. But the logic was clear; she knew that if she was investing her time towards contribution, she needed to benefit from it by learning.

And she declares the experience made her technically stronger, “I learned a lot of new skills. Other projects I worked on supported specific client's needs. Still, for Olivero, we had to make sure we were theming every single module supported by Drupal while making sure we met all the accessibility standards.”

And Olivero is now in core, we are proud of Hansa, and we celebrate her and everyone involved in this achievement.  

Find the right initiative, and don’t do it for the credit

mohit-aghera

Mohit Aghera 
PHP/Drupal Architect - L1

It is important to focus on learning and exploring instead of doing it for the credits: “I decided to focus on this initiative because I was interested in learning about writing test cases for Drupal Core. It was a quick way to get introduced to this, and also a great opportunity to explore almost every feature of the core, instead of focusing on a specific module.”

Mohit is one of our most experienced Drupal engineers and contributors; hence he’s continuously mentoring the team. In our last meetup, he explained his motivations and experience with the Bug Smash Initiative; “it’s a great initiative to devote energy to, because it is well managed. Maintainers do an excellent job triaging issues,” he argued. We often hear that not knowing where to start or feeling overwhelmed by the issue queue translates into demotivation within weeks. Counting on careful planning and mentoring makes life easier for everyone, which is why finding the right initiative becomes essential.  

A second factor to consider while contributing is the right motivation. We always remind ourselves of the opportunities that come with contributing for personal branding, sharing your work, showcasing a visible portfolio, and “ultimately if you want to learn Drupal Core, contributing is the best way to do it” he insists. 

Clear expectations help first-time contributors

Abhay-Saraf

Abhay Saraf
PHP/Drupal Engineer - L2

When asked what could be done differently to motivate others to join these sprints, he told us, “being clear about expectations and providing resources that display a step by step before the event would make the experience less intimidating.”

As founding members of the Drupal India Association, we also look to align our mentoring and contribution efforts with India’s larger Drupal community. Organizing and hosting monthly contribution weekends is one way to boost a sustainable contribution culture, and Abhay recently joined this initiative for the first time. From his experience, we confirmed that meeting folks, running into smiling faces, and having the space to give back without the pressure of getting lost or making a mistake is fundamental to onboard newcomers. “I had a good experience because I already had a list of prioritized issues. I could work with a free mind since I knew that I'd get the guidance needed if I had any doubts. Also, I liked the flexibility of this event, it goes on for a day, you can dedicate any amount of time you can, even if it is just an hour, it would still be worthwhile,” he shared.

Contribution = Recognition = More contribution

Gaurav-Kapoor

Gaurav Kapoor 
PHP/Drupal Engineer - L2

Gaurav's efforts were rewarded with a scholarship to attend DrupalCon Amsterdam 2019. Through this contribution journey, he gained vast Drupal knowledge, “now I focus on mentoring and sharing knowledge, so others can also leverage all you can gain from contributing,” he says. 

Gaurav’s Drupal journey started right after college when he decided to leverage his spare time by joining a two-person startup. After learning Drupal, he soon realized that contributing to the community would build the company’s reputation as trusted experts, and that was the initial driver. Eventually, what sparked a community spirit was getting noticed and recognized. He’s been ranked among the top 30 contributors and recognized in Dries’post about Who sponsors Drupal development? for the past three years.

Events and the power of networking

kunal-kursija.jpg

Kunal Kursija
PHP/Drupal Engineer - L3

Kunal has the habit of surfing through different channels that list upcoming events (DrupicalDrupal.orgDrupal Slack), so when we found out about BADCamp 2020’s call for papers, he decided to go for it. A two-way process started, “I began to review everything I had learned recently or topics I wanted to learn about”, from there Kunal came up with a list of topics and submitted them.

 

Speaking at events has many benefits, especially to those interested in being seen as an authority in their fields. Presenting sessions nourishes the community with knowledge and best practices and builds the speaker’s reputation and network. That was certainly the case for Kunal. “I first heard about BADCamp while attending DrupalCamp London. Someone I met there told me BADCamp is one of the best Drupal events. That image struck me and has stayed with me since then.” 

 “Of course, it was exciting to learn my session had been selected. I was disappointed I couldn’t attend the event in person. However, I enjoyed getting introduced to other BADCamp speakers, and it was great to participate in such a big and important event.”

To many more years of Drupal

We recognize our monthly meetups serve the purpose of keeping an ongoing conversation around contributions, inspire and support team members and promote those who actively get involved. Our team works with a contribution-first approach, and this practice grants us a place at the top of the ranking of organizations supporting Drupal. And yet, there's more we need to do to build up a sustainable contributing culture. We still find that most people that haven't contributed before can judge the onboarding process as too arduous, and time constraints follow soon after. Even with mentorship support available, the steep learning curve poses a hurdle to conquer.

We are continually discussing and exploring initiatives to encourage contribution, from creating a role for a full-time contributor to gamification aspects around tracking contributions or mentoring team members on the bench between projects. 

Today we introduced a selected few stories, evidence that sustains again and again that the key ingredient and the strength of this 20-year-old open-source project are people.

We are excited to be part of this celebration and would love to hear about your contribution strategies and ideas. What’s your preferred way to give back to Drupal?

Don’t forget to join the celebration on social media!

P.S. See you at the Global Contribution Weekend happening 29-31 January 2021.

Jan 15 2021
Jan 15

As expected, Drupal 9.1 was released on schedule at the closure of 2020. We have already talked about the Drupal 9 release and how it’s a testament to the predictable and reliable nature of the Drupal release cycle. Drupal 9.1 takes a step forward by adding more features and releasing them as predicted.

In this blog, we will be discussing the new improvements and more that will follow. 

Is it worth upgrading?

The Drupal 9.1 stable release was out as expected on Dec 2nd, 2020. We previously advocated that if you are on Drupal 8.9, you needn’t hurry to upgrade to Drupal 9.0 as you would not see many new features. But that’s changed.

Drupal 9.1 adds exciting features and updates along with support for PHP 8 (we have previously written about making Drupal 9 compatible with PHP 8).

It’s also worth upgrading as Drupal 9.1 brings significant changes in the user interface for both sighted users and assistive technology.

New features

Olivero theme

The much-awaited beta experimental frontend theme Olivero has been added to the Drupal core. As a replacement to Bartik, this is a modern and clear theme planned to become the new default Drupal theme later.

This particular theme is named after Rachel Olivero (1982-2019), the head of the organizational technology group at the National Federation of the Blind. She was a well-known accessibility expert and a Drupal community contributor.

Additions to the Claro theme

Claro was added as an experimental theme in Drupal 8.8. And now, Drupal 9.1 has added designs for various key pages like the extensions administration page, views administration, and status report. Also, the media library received Claro styled designs too.

Composer 2 and PHP 8 support

Drupal 9 fully works with Composer 2 and it is strongly recommended to update. Many of the popular plugins have also been updated. If the one you use doesn’t have updates, please help the plugin author with a PR to add the support (it’s quite easy). The new release comes with a significant improvement in performance and also reduces memory usage.

Drupal 9.1 has added support for PHP 8. PHP 8 brings in a lot of newer languages and even though Drupal core isn’t using any of them (it still supports PHP 7.3), you could use features like union types and more in your custom code. Further, it’s likely that PHP 8 could be a requirement for Drupal 10, due to release in 2022.

Additionally, the user experience has been improved by making the content load faster as the images rendered by Drupal with known dimensions will now be set to lazy-load automatically. 

How to update from a previous version of Drupal

Now, this begs an important question: how will the current users of Drupal 7 or 8 migrate to Drupal 9.1? And also, if users have already migrated to Drupal 9, is there anything for them to execute with this release?

Every version of Drupal demands a different approach to migration. The idea is to pick the right Drupal migration strategy. Let’s look at how to migrate from different versions in this section. 

Upgrade from Drupal 7

Drupal 7 users can easily continue to migrate to Drupal 8.9 or migrate to 9.0 or 9.1 directly. Migrating directly to Drupal 9/9.1 will help them skip a step. The upgrade path for multilingual sites remains stable in Drupal 8.9, 9.0, and 9.1!

For more on how to upgrade from Drupal 7, check out the ultimate guide to Drupal migration

Upgrade from Drupal 8

For Drupal 8 users, there’s still time to step up to the latest 8.9 version until the end of Drupal 8, i.e., in November 2021. The bug fixes will continue and the next one is scheduled for January 6, 2021. 

Sites on Drupal 8.8 will no longer receive security coverage. This means moving to Drupal 8.9/9 becomes crucial from this update onwards. 

According to Drupal.org, of the top 1000 most used drupal.org projects, 85 percent are updated for Drupal 9, so there is a high likelihood that most of the modules and themes you rely on are compatible.

Upgrade from Drupal 9

Drupal 9.1 is a minor release of Drupal 9. It can be updated from Drupal 9 versions for utilizing these new features without breaking backward compatibility (BC) for public APIs. While Drupal 9 will keep requiring Symfony 4, Drupal 9.1 has adjustments required to support Symfony 5 already. 

All these updates are underway to make Drupal 9 forward-compatible with Symfony 5 and 6 (not yet released). And also, as Drupal 10 is planned for mid-2022, these new upgrades target an excellent growth curve.

Running the update

We will only talk about updating from Drupal 8.9 or Drupal 9 in this section. Updating multiple versions is possible but needs additional care and consideration, which we won’t cover in this section.

  • First of all, if you are already using the Olivero theme in your project, remove that by running this command. We need to do this as Drupal 9.1 includes Olivero in the core.

$ composer remove drupal/olivero

  • To begin an upgrade from Drupal 8.9 or Drupal 9, run the following command:

$ composer require drupal/core:^9.1
drupal/core-composer-scaffold:^9.1 --update-with-dependencies

  • If your project is using drupal/core-recommended, use that instead of Drupal/core in the command above. Also, for the above, your project must be using the recommended Drupal Composer template. It is quite likely that the command might throw some dependency related errors. 

Since there are a wide variety of possible dependency issues, we won’t cover everything here. But to get started, try replacing the --update-with-dependencies flag with --update-with-all-dependencies flag in the command above and try again.

Drupal 9.1 seems to be a promising update for users ready to take the plunge. If you are still not sure, give us a chance to convince you why upgrading to Drupal 9 is crucial now.

Share your Drupal 9 experience with us and watch this space for more insights!

Jan 15 2021
Jan 15

Twenty years ago today, Drupal was founded by Dries Buytaert. Looking back twenty years, into a dorm room at University of Antwerpen, where the Drupal story began, a lot has been achieved. 

In the world of technology and open source environment, where changes are inevitable and happen fast it's a great achievement to reach the age of twenty. Over the years the Drupal project has developed from a simple version of CMS system to an open source digital transformation system that millions of people around the world use on a everyday basis.

One of every thirty websites in the world are built with Drupal

In the last 20 years Drupal has become one of the leading open source frameworks in the world, where the Drupal community, companies and end users have created a story that is nowhere near ending. During the history of Drupal It’s always been a priority to solve problems for the end user, reacting fast to new technologies and adapting to the Drupal project. 

Looking at Drupal as an open source project where the focus is on making it easy for new users to start using Drupal it has proved its case. In a modern world, where use companies and governments wants to own their projects and have the freedom of choosing whom to work with, it is necessary to provide good quality software with the aim of lowering cost by avoiding vendor lock-in.

At 1xINTERNET everything revolves around Drupal. Our business model is based on Drupal the technology and our employees are truly dedicated Drupalists. We take part in the community work and we do not only have ambitions for 1xINTERNET but also for Drupal as a project. We care about the future of  the Drupal ecosystem and its our wish that together we can build an even stronger community with a growing number of contributors, companies like us at 1xINTERNET and the end-users that we service on a daily basis. With all of us becoming makers, it will be interesting to see where the next decade takes us.

We strongly believe in the power of the extraordinary innovative Drupal community and we are proud every day, when meeting new clients or onboarding new employees for being part of the Drupal universe.

Celebrating 20 years of Drupal

During the year 2021 we will be focusing on highlighting our work at 1xINTERNET and our solutions made with Drupal. We call this series “Celebrating 20 years of Drupal” where we will highlight 20 projects through the year that we have been involved in and where Drupal has been used. Every month we will feature case studies, introducing our latest projects as well as launching product lines from 1xINTERNET. So make sure you follow us on our social media to get the news hot and fresh! 

Transgourmet

Today, to kick off the year of Drupal for 20 years celebration,  we are highlighting a case study for Transgourmet, one of our great clients that we built a multi-site solution for last year. Transgourmet is a food wholesaler in Germany, for gastronomy, hotels and bulk consumers.

1xINTERNET was asked to review all websites of Transgourmet and their brand Selgros Cash and Carry and asked to create the same technical requirements and standards for all of them. The task was to create a consistent and flexible solution that would enable the relaunch of all websites of the company. Therefore a robust, secure and efficient CMS needed to be used, whose development and maintenance can be decoupled in time. 

For a company like Transgourmet a project like this is an essential part to complete the digital strategy. 1xINTERNET created a Drupal distribution on which all their websites can run smoothly. The front end was integrated into a design system from Patternlab

This case study won the Enterprise category at the German Splash Awards 2020 which was held in October 2020.

Jan 15 2021
Jan 15

First of all, happy twentieth birthday to Drupal. Yes, you heard that right. It is Drupal’s 20th birthday! Two decades ago, an idea was conceptualised to improve the cost efficiency of an internet connection by sharing it among a group of friends. That idea has now turned out to be one of the biggest open source projects in the entire world!

People holding up placards reading 'Happy 20th Birthday' and Drupal's logo


On the occasion of Drupal’s 20th birthday, let’s look back at how Drupal has evolved organically in the past two decades to become a sustainable community over the years, one that holds immense capacity to keep thriving despite all odds.

Drupal’s growth over the years

Drupal 1.0 was launched as an open source project, drop.org, in 2001. Dries based it off Slash, a modular CMS, the first version having 18 modules one could work with. Notably, there was no bar on who could contribute to the software. 

This is what it looked like -

Black and white screen of Drupal 1 website


Isn’t it substantial, how far we’ve come?

When Drupal was upgraded, Drupal 2.0 promised a feature where one could translate or overwrite their site in a different language. This laid a major mark in expanding but also bringing together the Drupal community. Other updates included user ratings, user permission system and sections for stories and user groups.

In the third major version, nodes were made the main unit of content in Drupal - in comparison to web pages, nodes provided the much needed flexibility in the Content Management System. Every category of content - whether an article, a news report or a forum - was created as a node and subsequently managed by a node module. Thus, Drupal became more convenient to use for everybody.

Drupal 4.0 was significant for the fact that it saw expansion like never before - armed with an e-commerce module in Drupal 4.4 and an WYSIWYG (What You See Is What You Get) editor, the fourth version of Drupal lay all its doors open. Web writers without a coding background could now use Drupal too, explaining the following surge in its usage after the release of the complete fourth version. 

Following its popularity, the first ever Drupal Conference was held in Belgium in 2005. Here’s Dries Buytaert’s ID from the event:

White ID card with Dries written on itSource : Dries Buytaert's blog

This is how Drupal started transitioning into a global community in the truest sense, with people from all walks of life, across the globe using and contributing to it.

By the time Drupal 5.0 was released on Drupal’s sixth birthday, the number of contributed modules had gone up to 2500 and that of contributors was 492! Version 5.0 simplified web development by incorporating jQuery, a javascript library that made HTML way easier. Also included was a provision of pre-created but customisable Drupal packages and improved CSS (Cascading Style Sheets) management for greater speed on the sites. 

The sixth version of Drupal saw a sitewide growth and expansion - 7000 contributed modules were already in place in addition to 34 core modules and 600 custom themes. Drupal 6.0 added a rewritten menu structure, a ton of drag-and-drop features, even better security etc

With Drupal 7 and 8, customisation and personalisation had come into play in the digital sphere, and Drupal adapted accordingly. Drupal 7 provided URL handling, integration with e-commerce, and custom fields that could be brought to use across content types and users. Using installation profiles, companies could now systematically distribute their website. 

This is a snapshot of Drupal 7. Drupal had now started to look like its modern day successor, hadn’t it?

Blue and white screen showing Drupal 7's websiteSource : Drupal.org

Drupal 8 rode the personalisation tide and responded aptly to the emerging needs of its user base, adding 200 essential features, one of those being adaptability of a website to the several devices it was accessed from. Personalised feeds and suggestions also came into play as businesses started to increasingly focus on User Experience. 

Called the ‘easiest upgrade in a decade’ by Drupal, Drupal 9 hit the market in the midst of a pandemic (which started making waves soon after Drupal’s nineteenth birthday), to cater to the needs of the worldwide user base stricken by it. Drupal 9 removed deprecated code and updated third party dependencies to curate digital solutions compatible with most businesses and individuals. Well, all your burning questions about Drupal 9 answered here.

Dupal 10 is slated to release in 2022 with a bunch of new features and upgrades!

OpenSense Labs and Team love Drupal! 

We at OpenSense Labs have been working with and loving Drupal for years now. Minimal learning curve, the support of a widespread community, and customisable components are some facets of Drupal that our developers are especially fond of. As Drupal turns 20, here’s what our in house Drupalists have to say about Drupal -

Pictures of 6 developers with text above reading what they say about Drupal


Once again, a very happy 20th Birthday, Drupal! Here’s to many more years of growth and innovation!

Jan 15 2021
Jan 15

It’s true that execution translates visions of the organisations into reality. Larry Bossidy and Ram Charan’s ‘Execution: The discipline of getting things done’ corroborates the same. In the software industry, it often translates to efficacious project management. Usually, a framework and specific methodologies are followed for the successful execution of a project. While the framework and methodologies are pivotal for project management, the human aspect of it can’t be sidelined.

A vector image with a human face and brain to represent human psychology in project management


Think of a Drupal project that is being undertaken by a project manager. He or she has a mix of experienced members and newbies in the team who would help in the speedy completion and timely launch of the Drupal website. Amongst everything else, the human factor here is very important to be considered. The psychological aspects of the individuals, both the project manager and the team members, can well be the decisive factor for a project to be a success or a failure. Their perceptions, emotions, problem-solving skills, decision-making processes among others can have an astronomical impact on the way project is being handled and executed.

Key competencies in project management

A heptagon formed by circles and text inside it to represent human factor in project managementSource: Project Times

Project management methodologies constitute technical and procedural factors like scoping, scheduling, budgeting, quality assurance, risk, communications and procurement. And, they all very well established frameworks. But, it’s the people who act as the core of project management. In a study titled ‘Human factor skills of project managers derived from the analysis of the project management processes’, emphasises that people, not objectives and processes, make the project successful.

bar graph showing statistics on human psychology in project managementImportance of project manager skills | Source: ResearchGate

Creating and managing the psychological contract between leadership and team is also a must. Project managers need a set of skills to perform at his or her best. These set of skills can be put together in the ‘Eye of Competence’ model, states the research paper titled ‘The psychological contract and project management as a core competence of the organisation’. They are:

  • Technical competencies
  • Behavioural competencies
  • Contextual competencies
pie chart in green showing textual information on human psychology in project managementSource: ScienceDirect

All the skills needed by the project manager related to project life cycle (initiate, plan, execute control, close) comes under technical competencies. The personal competence elements of project managers like attitude, abilities and behaviour come under behavioural competencies that help in dealing with different team-related challenges during the project lifecycle. Aligning project management with the organisational aspects of the company falls into contextual competencies.

The psychology of project leadership

Animated picture of a man and a woman talking to each otherHelping shoppers actually helps in developing great facilitation skills | Source: UXmatters

Brett Harned, Author of ‘Project management for humans’, in one of the chapters, recalls his own experience of working in retail. As the salesman, he was incented to make sales for a commission. He recounts a particular incident when a couple came into the store and were looking for buying a gift for a family member. They started off with five pairs of sunglasses and zeroed in on two of them.  Because Brett wanted to make the sale but didn’t know the person who was to receive the gift, he shared everything he knew about the sunglasses ranging from facts about the glasses to a lot of ridiculous questions.

Eventually, they decided to buy the one they both agreed upon and were satisfied with it. They thanked him for helping them with the decision-making. This incident helped Brett understand what actually helped customers to make a purchasing decision. More importantly, experiences like this helped him understand the importance of ‘human factor’ behind the success of organisations. In organisations, it’s the people who can make projects difficult and it’s the people themselves who can make projects easier. More often than not, a project manager’s role becomes that of a facilitator because part of keeping a project on track is keeping the people on track.

flowchart with boxes connected by arrows showing human psychology in project managementMental decision process | Source: ResearchGate

The proper analysis of the human factor in project management can be done if we know how the decision-making process is actually taking place.

To start off with the psychology of project leadership, look for the objective measurement of skills and knowledge, abilities, attitudes, personality traits and educational achievements using psychometric analysis. To do this, Myers Briggs or an assessment tool from McQuaig Institute can be helpful.

Emotional intelligence (EI) is also an important element to be considered for project managers. It is basically the ability to recognise one’s own and other people’s emotions. HBR defines it as:

“From a scientific (rather than a popular) standpoint, emotional intelligence is the ability to accurately perceive your own and others’ emotions; to understand the signals that emotions send about relationships; and to manage your own and others’ emotions. It doesn’t necessarily include the qualities (like optimism, initiative, and self-confidence) that some popular definitions ascribe to it.”

A table with different coloured columns showing human psychology in project managementSource: Harvard Business Review

Daniel Goleman, Author and Psychologist, states that there are five important components of EI:

  • Self-awareness
  • Self-regulation
  • Motivation
  • Empathy for others
  • Social skills

In the conference paper, Complex project management: towards a theory of cognition for ill-structured tasks, Michael Kilpatrick says that the hurdles encountered by project managers tend to be ill-defined and open to several interpretations. The project managers have to understand the internal dynamics of the team and stakeholders.

Moreover, we need to understand that project management is both cognitive conscious (planned forms of activity) and cognitive unconscious (critical thinking skills). So, project managers need analytical, organisational, interpersonal and intrapersonal skills.

a rectangle with two diagonal lines inside it explaining human psychology in project managementSource: ResearchGate

The human side of team members and project managers

Consider the following pointers to get the highest level of productivity out of your team members in addition to making sure of their mental and physical well-being:

As a project manager, eliminate the usage of the term ‘resources’

Calling team members as ‘resources’ is the worst you can do as project managers. Because it’s not about using people to just get things done. It’s more about asking them to solve problems that are presented in your projects.

While talking to Project Managers and Scrum Masters at OpenSense Labs about this subject, I understood why the term ‘resource’ occurs in the first place. They observed that with mutiple projects, both small-scale and large-scale, being undertaken by the organisation, they, as project managers, have to be on their toes to ensure proper team effort and timely deliveries. Juggling between a multitude of projects and focussing an awful lot on deadlines, they have shown proclivity to see their team members as so-called resources. With so much going on, they agree that it does get tough sometimes to see the emotional side of a team member, but they know it themselves when things get too hectic and it’s time to put a personal touch so that everyone is at ease and takes it upon himself/herself to finish the tasks.

As a team member, choose product thinking over project thinking

One of the toughest challenges that project managers (or organisations for that matter) face is to try and elevate thinking and culture from a project level to a product level. The focus of project thinking is delivery. This could be specific features of a web application or revamp of an entire website. In contrast, product thinking enables you to focus on outcome rather than on output.

Instead of focusing on timelines and dates, there is an emphasis on the goal you want to achieve or the job to be done. So, it becomes much more difficult to put time constraints around the delivery, at least up front. Regardless of how we try and get there, we ensure that we get to the outcome more efficiently.

The project managers at OpenSense Labs encourage their team members to leverage product mindset instead of project mindset. They have observed it’s practically not possible to do micro-management of team members when involved in multiple projects. So, they expect them to show maturity and act on the tasks at hand with the product thinking approach. Because if they just focus on deliverables and finish off the tasks assigned to them, it becomes tougher and tougher for the project managers too to ensure the best result. They would rather want their team members to proactively work on tasks and come up with their own unique solution too. And, when the project managers look stressed when the deadline approaches, just hearing ‘We will take care of it, mate’ from at least one of their team members puts their mind at ease knowing that there’s a collective effort going on and it’s not just the project manager who is dedicated and concerned.

Make sure that the team is not overbooked and prevent developer burnout

Keeping your team members busy and working on tasks is a tricky thing. You need to create a balance in the amount of work that is being undertaken by your team members. This will enable you to confidently commit to deadlines on projects knowing that your team is actually available to do the related work.

Communicate about staffing as much as you can. In an organisation that is continuously handling change, you will know that it’s a tough target to hit. Nevertheless, make sure to stay ahead of the resource crunch. Your team will be appreciative of your efforts in protecting their work-life balance and work-life harmony.

Well, our project managers have always seen that the mental well-being of team members plays a crucial role for long-term planning. Constant communication and transparency in discussions with each and every member about how he or she is feeling mentally helps them understand whether or not a person is feeling overworked or overbooked. They have encouraged them to take a half day leave or even a full day leave when they are feeling low on spirits for whatever reason it can be. They have also focussed on assigning less critical tasks to less experienced members before moving on to give them the more important and complex tasks. This has helped in making a team member progress through the ranks, learn at his or her own pace and finally working on business-critical tasks when they themselves feel confident about it.

Connect with your team

Matching skills to your projects is a whole new task in itself. Connecting with your team and understanding what motivates them is crucial. Find out what your team members’ interests are. Get to know each and every team member’s work. With changing project schedules, plan how you will fill someone’s time with other work. Asking people to plan holidays and vacations in advance would help you plan ahead. Humans are hale and hearty one day and bedridden the next. So, you have got to be ready with a back-up plan.

Covid-19 pandemic affected OpenSense Labs in different ways and we found ways to cope with it. We made sure open-ended leaves are given to ones who contracted coronavirus for them to recover and be back at work when they feel completely okay. A lot of elders especially were more vulnerable during these times. And, one of our team members looked very worried about his father’s deteriorating health, so we made sure he is given some time to be with his father and the financial benefits are provided without any deductions in monthly income for his long absence from work. We have also seen that reallocating tasks to certain individuals have helped them in their learning process. For instance, we have assigned more HTML and CSS related tasks to the guys who wanted to learn frontend development. We have also ensured that we do not shout at anyone or humiliate anyone in a group call for lack of productivity. One-on-one conversations have helped us to communicate things in a proper way, understand someone’s personal setback or realise how someone’s not happy about his or her marriage-related discussions happening within the family. And, sometimes project managers, involved in several projects simultaneously, have to deal with upset clients for different reasons and our team members understand that. When the PM isn't able to join a meeting with a client, one of the team members gives assurance for filling in for him or her.

Here's how OpenSense Labs shifted to remote working environments during Covid-19 pandemic.

Consider the stakeholders as decision-makers

It’s of utmost importance to understand that no one gets trained formally or is taught at some place to be a good client, stakeholder or project sponsor. But it’s not like they don’t know how to. They do know the fact that they have to be polite and nice to a project manager. It doesn’t have to be drilled into their heads by some means. What matters the most is that they are also, at the end of the day, humans and show their emotions while working on several projects with several people at one time. Life as a client can be difficult. As a project manager, you have to help them plan their time appropriately and communicate properly.

A lot of the times our project managers would have to deal with frustrated clients. Not because of any kind of problems with our work. But because of the fact that the client's boss would be putting some pressure on him or her and asking for an update on some of the crucial tasks. Our PMs have to understand their emotions and communicate things in a way that there is a mutual understanding of each other’s emotional well-being. We have also put a particular emphasis on finishing off different tasks much earlier than deadlines for the client’s satisfaction even if it was not that urgent. And, there was an instance where one of our new guys couldn’t deliver any task for over a month. But our project manager communicated with the clients accordingly as he saw that the guy showed intent and gave enough time and space to prove that he can start delivering. His daily tasks were internally supervised and managed and it worked eventually. Sometimes, we have to deal with a situation where a guy, who has worked late hours and has given his everything to the project’s success, has to suddenly attend to his family crisis when the project is nearing deadline. We have always strived to show sympathy in such situations and provide any help to our guys we can. Our project managers have amicably discussed such situations with clients to figure out pushing the deadline to a different date or trying out another guy in place of him.

Once you have understood the importance of human factor in project management, it's time to start your next Drupal development project the right way, learn how to handle complex Drupal projects and understand why to choose Drupal for a smooth web development experience.

Conclusion

Technology will always keep evolving and change the methods by which projects are completed. Projects themselves will keep changing in nature and scope. What doesn’t change? Human factor. Ethical behaviour, consideration of others, principles of communication and a quest for knowledge and excellence are some of the examples of those invariable elements. It’s important to learn and practice ways of optimising human interaction, to build trust and confidence and to efficaciously interact with team members, internal and external stakeholders, individual in positions of authority. All these considerations will ultimately pave the way for efficient project management.

Pages

About Drupal Sun

Drupal Sun is an Evolving Web project. It allows you to:

  • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
  • Facet based on tags, author, or feed
  • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
  • View the entire article text inline, or in the context of the site where it was created

See the blog post at Evolving Web

Evolving Web