Subscribe to Drupal News feed
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 4 hours 59 min ago

KnackForge: How to update Drupal 8 core?

Sat, 03/24/2018 - 01:01
How to update Drupal 8 core?

Let's see how to update your Drupal site between 8.x.x minor and patch versions. For example, from 8.1.2 to 8.1.3, or from 8.3.5 to 8.4.0. I hope this will help you.

  • If you are upgrading to Drupal version x.y.z

           x -> is known as the major version number

           y -> is known as the minor version number

           z -> is known as the patch version number.

Sat, 03/24/2018 - 10:31

DrupalBASE: The information itself is useless

7 hours 16 min ago

The information itself is useless.

Quite original start for a web-published text, isn't it? Still the confirmation is true. Solutions don't demand information, solutions demand clearly organized data. No matter what is the domain – in every situation people tend to organize data in a readable well-understandable formats.

Multiple mechanisms of collecting and storing the data are developed, and technologies continue to progress. But the key question of data presentation often remains ignored.

Electric Citizen: Twig for Drupal 8 Development: Twig Templating Part 2 of 2

13 hours 2 min ago

In the recent post Twig for Drupal 8 Development: Twig Templating Part 1, we covered some Drupal Twig templating basics like debugging, custom templates, inheritance, variables, filters, attributes, and macros. This post will cover more advanced topics. You will learn about preprocessing variables, expanding the available templates with theme suggestion, Drupal 8 Views and Twig, and the Twig Tweak module.

Tim Millwood: Drupal Service ID Collectors

16 hours 45 min ago
Drupal Service ID Collectors

Since Drupal 8 we've had services. This also brought the concept of a service collector or tagged services. This allows services to be tagged with a specific tag, then a service collector can collect all services with the a given tag and use whichever service "applies".

As you could imagine loaded all of these tagged services when loading the service collector service can be a performance nightmare, which is why Drupal 8.4.0 brought us service ID collector functionality.

Tagging a service with the service_id_collector tag will pass all services with a given tag as the last parameter in the constructor. This will be an array of service IDs ordered by the priority. You will then need to use the ClassResolver service to lazily instantiate the collected service IDs.

my_module.services.yml
my_module.negotiator:
  class: \Drupal\my_module\MyModuleNegotiator
  arguments: {'@class.resolver'}
  tags:
    - { name: service_id_collector, tag: my_module_negotiator }
my_module.negotiator.foo:
  class:\Drupal\my_module\FooNegotiator
  arguments: {'@entity_type.manager'}
  tags:
    - { name: my_module_negotiator, priority: 100 }
my_module.negotiator.bar:
  class:\Drupal\my_module\BarNegotiator
  arguments: {'@entity_type.manager'}
  tags:
    - { name: my_module_negotiator, priority: -100 }
my_module.negotiator.baz:
  class:\Drupal\my_module\BazNegotiator
  arguments: {'@entity_type.manager'}
  tags:
    - { name: my_module_negotiator, priority: 0 }

MyModuleNegotiator.php
/**
 * The negotiator for my module.
 */
class MyModuleNegotiator {

  /**
   * The class resolver service.
   *
   * @var \Drupal\Core\DependencyInjection\ClassResolver
   */
  protected $classResolver;

  /**
   * The negotiator service IDs.
   *
   * @var array
   */
  protected $negotiatorServiceIds;
 

  /**
   * Constructs the negotiator.
   *
   * @param \Drupal\Core\DependencyInjection\ClassResolver $class_resolver
   *   The class resolver service.
   * @param array $negotiator_service_ids
   *   The negotiator service IDs.
   */
  public function __construct(ClassResolverInterface $class_resolver, array $negotiator_service_ids) {
    $this->classResolver = $class_resolver;
    $this->negotiatorServiceIds = $negotiator_service_ids;
  }
 

  /**
   * Run the negotiators.
   */
  public function runNegotiators() {
    foreach ($this->negotiatorServiceIds as $negotiator_service_id) {
      $negotiator = $this->classResolver->getInstanceFromDefinition($negotiator_service_id);
      if ($negotiator->applies()) {
        $negotiator->run();
      }
    }
  }
}

timmillwood Thu, 14/12/2017 - 09:29 Tags drupal planet drupal-planet drupal8 Add new comment

myDropWizard.com: CiviCRM secrets for Drupalers: Email Campaigns

Wed, 12/13/2017 - 21:14

We're Drupalers who only recently started digging deep into CiviCRM and we're finding some really cool things! This series of videos is meant to share those secrets with other Drupalers, in case they come across a project that could use them. :-)

Most Drupalers at one time have had to deal with either sending e-mail newsletters directly from Drupal, or integrating with a 3rd party tool like Mailchimp or Constant Contact.

CiviCRM has built in e-mail newsletter functionality, and if you add to it the WYSIWYG e-mail builder Mosaico you can build really rich, responsive e-mail campaigns!

Watch the video here:

Video of CiviCRM secrets for Drupalers #1: E-mail Campaigns

Some highlights from the video:

  • A sneak peek at Round Earth: our project that bundles Drupal 8 + CiviCRM
  • Drupal 8 + CiviCRM vs. "only" Drupal
  • A quick walk-through on how to quickly and easily create an email campaign
  • Plus, we mention a couple of current "gotchas" that could save you frustration!

Please leave a comment below!

Flocon de toile | Freelance Drupal: Apply a VAT rate on a product with Drupal Commerce 2

Wed, 12/13/2017 - 08:00

Drupal Commerce 2 now allows you to manage the various taxes and VAT to apply to an online store, regardless of its country and their respective rules in this area. Most of the contributed modules managing these elements on Commerce 1.x are therefore no longer necessary. Let's find out how to use the Drupal Commerce 2.x Resolver concept to set the VAT rate to apply to different products.

hussainweb.me: Applying composer patches fails silently

Wed, 12/13/2017 - 05:52
I came across an interesting bug with composer-patches plugin (it really is a git-apply bug/behavior). TL;DR, it is fixed in the latest version of composer-patches plugin as of this writing–1.6.4.

Vardot: Top 10 Free Bootstrap-based Themes for Drupal 8

Wed, 12/13/2017 - 05:14
Ahmed Jarrar December 13, 2017

An earlier post presents what we believed were the top 10 free Drupal themes at the time.

This post is an update of the previous post with two important changes to the evaluation criteria. First, the previous list includes themes for both Drupal version 7 and 8; the new top 10 list consists of free themes for Drupal 8 only. While Drupal 7 is still the most used Drupal version today, Drupal 8 is by far the most popular, and when it is finally time to upgrade, the vast number of Drupal 7 sites will need to replace their existing theme with one that supports Drupal 8.

 

The second reason for updating the list is that Bootstrap has emerged as the industry-leading front-end framework for developing responsive mobile-first websites. In fact, recent web analytics indicates that 16.3% of all websites are built with the Bootstrap framework. Bootstrap for Drupal is a base theme which implements the Bootstrap framework on the Drupal technology platform.The Bootstrap for the Drupal base theme has gained wide adoption and support in the Drupal community, including Tag1 Consulting, its maintainer.

Numerous Drupal modules have been implemented to enhance site building using the Bootstrap base theme. For instance, Views Bootstrap and Bootstrap Layouts are 2 modules that support site builders with theme component creation and layout respectively.

Vardot‘s own Drupal 8 distribution, Varbase, also supports the Bootstrap base theme. In addition, Vardot has contributed 2 modules to support the creation of View modes, Layouts, and Paragraphs using Bootstrap: Varbase Bootstrap Paragraphs and View Modes Inventory - Bootstrap Ready

In summary, to be considered for the new top 10 theme list, a theme must be: Free; Supported on Drupal 8; Bootstrap-based; General purpose - instead of industry-specific; and Responsive.  

 

 

1. Creative Responsive

Creative Responsive occupies the top spot on the top 10 list with respect to the number of deployments on Drupal 8 websites as of November 2017. This theme supports the display of web contents in 3 columns: the main column, a left, and a right sidebar. Also, you can configure up to 16 block regions to organize information on a webpage. Last but not least, built-in support is provided to integrate with popular social media such as Facebook, Twitter, Google+, etc.

If you are looking for a reputable general-purpose theme with a modern look, Creative Response is a very strong candidate.

 

 

2. Business Responsive

Business Responsive and the aforementioned Creative Responsive are 2 themes created by the same parent company, Zymphonies.

Despite being the slightly older and scaled-down version of Creative Responsive, Business Responsive makes up for the lack of finesse by just working reliably. As an added insurance, you can purchase premium support for the theme from Zymphonies. If you want a no-frills corporate theme that just works out-of-the-box, you should definitely consider Business Responsive.

 

 

3. NewsPlus Lite

NewsPlus Lite is the free version of the NewsPlus Premium theme. The premium version is essentially a Drupal distribution which includes the free NewsPlus Lite theme.

Despite its name, this theme is at par feature-wise with the other top free themes. For some features, NewsPlus Lite is even better, e.g., it supports the 3-column layout. What sets NewsPlus Lite apart is the up-to-date online documentation database which is maintained by MoreThanThemes, its parent company, and a reputable Drupal theme vendor.

If you are building a news magazine website, and don’t have a lot of prior experience doing so, NewsPlus Lite is well worth your consideration.

 

 

4. Bootstrap Mint

Bootstrap Mint boasts the most flexible layout among the top 10 themes. It can lay out web content in up to 4 columns and 25 regions. Given that only higher screen resolutions can support the display of 4 columns, this theme is best viewed using a desktop or laptop. If the majority of your web audience visit your website via a desktop or laptop, you should definitely consider using this theme for its layout capability.

 

 

5. Showcase Lite

Showcase Lite is the free version of ShowcasePlus Premium, both created by MoreThanThemes which also owns the aforementioned NewsPlus themes. The Showcase Lite theme is designed with the creative enterprises in mind. Specifically, this theme supports the use of video galleries and sliders, critical features for a design studio business. If you are building an image-intensive website and require corporate technical support, Showcase Lite is not to be ignored.

 

 

6. Ice Magic

Ice Magic distinguishes itself among the top 10 themes by being the most color configurable. Most free themes only offer a very limited color scheme (e.g., 3 colors) that you can apply to a fixed set of theme elements. Ice Magic, on the other hand, includes a color module which allows you to specify colors from a color spectrum. Ice Magic should be on your radar if you are meticulous about color options on your website.

 

 

7. Robotic

Robotic is a highly customizable theme for even the technically challenged. You can customize the carousel, social media icons, and the interface colors. If you require the ability to fine-tune the look-and-feel of your website all without coding, you should look into Robotic.

 

 

8. Magazine Lite

Magazine Lite is the free version of the Premium Magazine+ theme distribution. It is a theme custom designed for news and magazine websites. If your goal is to build a stylish news and magazine website with a clean uncluttered look, Magazine Lite should be on your short list of themes.  

 

 

9. The One

The One is unique among the top 10 themes in that it supports the seamless single-page website design. Not everyone is a fan of the single-page design, but if you are, look no further than The One.

 

 

10. SOLID

Despite its name, the SOLID theme is one of the more visually appealing themes in the top 10 list. It’s simple but elegant and functional which makes it a multi-purpose theme suitable for general deployment.

 

 

Summary & Conclusion

Are you operating a Drupal 7 website, and planning an upgrade to 8 in the near future? Part of the upgrade will involve picking a theme that supports Drupal 8. If your requirements are well satisfied by a free theme, you should definitely consider selecting a Bootstrap-based theme from our top 10 list. Note that Varbase, Vardot’s custom Drupal 8 distribution, supports all themes on the top 10 list. If you have requirements that are beyond the capability of free themes or you need customization, please contact Vardot's professional services to inquire about the Varbase distribution.

Agiledrop.com Blog: AGILEDROP: Do not underestimate the difference between CEM & DEM

Wed, 12/13/2017 - 02:56
In my previous blog post, I discussed the meaning of the words ambitious and digital experiences both as singular and combined entities. I have dedicated the second part of this blog post to ambitious digital experiences, and will focus on some of the more specific elements of those digital experiences we can call ambitious. As Dries noted in one of his posts, ambitious aligns with flexibility, scalability, speed and creative freedom that Drupal provides. The projects can be ambitious because of their scale and complexity, security requirements, the number of sites, or specialized… READ MORE

Electric Citizen: Twig for Drupal 8 Development: Twig Templating Part 1 of 2

Wed, 12/13/2017 - 00:17

Twig is a PHP templating engine and the default templating engine for Drupal 8. Part of the Symfony Framework, Twig syntax compiles templates down to plain PHP when rendered in the browser.

Twig offers advanced features like template inheritance, automatic escaping, variable filters and macros to improve development workflow. Drupal 8's Twig templates are "html.twig" templates, which means that you can mix Twig into HTML easier than you could mix PHP and HTML in Drupal 7’s PHP templates.

Syntax in Twig is somewhat different than PHP, with three main kinds of delimiters:

  • {{ }} prints the content of variables or expressions. This is the equivalent of PHP’s print or echo.
  • {% %} executes "if" statements, variable definitions or for loops.
  • {# #} adds template comments that are not rendered in the page.

A very basic Twig structure to print a message using a variable might look like:
{%  set message = ‘Welcome to  my great website‘ %}
{{ message }}

Jacob Rockowitz: Who is creating add-ons to the Webform module?

Tue, 12/12/2017 - 17:51

As the Webform module progresses towards a stable release and developers are getting familiar with Drupal 8, some developers are starting to contribute some very cool add-ons to the Webform module’s ecosystem.

Drupal is about collaboratively creating robust, stable, and extendable APIs that developers can use to improve and customize Drupal's functionality. Drupal's core Form API (FAPI) is the backbone of the Webform module for Drupal 8. The Webform module would not exist without FAPI, so here is a shout out to all the past maintainers of Drupal FAPI and its current maintainers, Alex Bronstein (effulgentsia) and Tim Plunkett (tim.plunkett).

Because the Webform module Drupal 8 is an entirely new code base, the entire Webform related project ecosystem must be rebuilt from scratch. I see this as a challenge and an opportunity to rethink the functionality that the core Webform module provides and how it is extended.

I strongly feel that the Webform module must be a complete form building solution, which inspires the Drupal community to do what it does best, extend the heck out of powerful APIs

To encourage people to extend the Webform module I decided to track contributed modules within the Webform UI and on Drupal.org in a section that I am calling "Add-Ons."

Laurent is making it possible to analyze webform submissions

Laurent BARAN (lbaran)

Analysis and charts are one of the few features that were available in Webform...Read More

Drupal.org blog: What's new on Drupal.org - November 2017

Tue, 12/12/2017 - 16:40

Read our Roadmap to understand how this work falls into priorities set by the Drupal Association with direction and collaboration from the Board and community.

Announcements Clarifications to Drupal licensing policy

There have been some long-standing questions about Drupal project licensing policy. In collaboration with the Licensing Working Group and Dries, we have updated the official licensing policy with the following clarifications and changes:

  • We explicitly affirm that code with a GPL-compatible license can be included in a Drupal.org hosted project, but will be redistributed under our standard "GPL2 or later" policy.
  • We clarify that GPL-incompatible non-code assets may be packaged and/or distributed "in aggregate" with GPL code in Drupal.org projects, per the final stipulation of Sec 3-2 of the GPL, so long as the maintainer has the rights to do so.
  • We clarify that Drupal.org hosted projects can depend on and/or link to GPL-incompatible code (via composer, for example), but that Drupal.org cannot host or distribute those GPL-incompatible dependencies.
  • We explicitly affirm our interpretation of the GPL that a Drupal service provider's act of assembling a codebase while under contract to a client does not fall under the more restrictive terms of 'distribution' per the GPL.

You can find more detail about these changes in the Repository Usage Policy and Licensing FAQ.

Welcoming new staff members

We want to welcome two new members to the Drupal Association team. Brooke Candelaria who will be taking over as Conference Director, joins us from Houston, TX. Brooke has a background in PR and event management, and has worked with other open source communities in the past, for example working on LinuxWorld and, most recently, with the Python community. Brooke's focus will be on evolving DrupalCon to meet the needs of every persona within our community, and helping to make the Con more sustainable and scalable.

Rachel Lawson is taking on the role of Community Liaison. Based in the UK, Rachel has been a tremendous member of the community in her own right, participating in Camps, helping to organize Mentored Sprints, and serving on the Community Working Group. Rachel will be helping the community to understand the role and the functioning of the Drupal Association, while also keeping the Drupal Association more closely tied to all parts of our diverse community. We hope you'll welcome them!

DrupalCon Updates Launched new DrupalCon brand

We've just launched a new unified look and feel for DrupalCon, that will carry into all of our events moving forward. This will help give DrupalCon a stronger identity among OSS events, and also give us a place to put centralized content that applies to DrupalCon as a whole, rather than just a singular event.

Launched DrupalCon Nashville site

Alongside our new brand, we've launched the DrupalCon Nashville website, the first of the events to use the new unified look and feel. Registration is open now, as well as the call for papers. Take a look at some of the new tracks! \

We'll see you there!

Sponsorship makes DrupalCon possible - learn why you should be a part of it.

Drupal.org Updates Reminder: New issue shortcuts and friendly url structure

Last month we announced that we would be implementing some changes to the issue url structure, as well as some shortcuts to help users navigate to issues more easily on Drupal.org. These changes went live in November. Here's a primer:

URL Pattern for issues:

https://drupal.org/project/drupal/issues/2922626 When an issue is moved between projects the alias will be updated.

Shortcuts

The search bar will now automatically redirect you to a node if you enter its id directly: A new menu callback will help you get to issues with a shorter url string: https://drupal.org/i/

New individual member directory

We've been overhauling the Drupal Association membership experience, and as part of that process we now have a new directory of Drupal Association members. This new directory also includes new filters and sorting options so that you can see the latest community members to join the Association and filter by country, username, or first and last name.

In development: new organization member directory

We're working on a new directory of organization members as well. The current directory allows you to filter by organization type, and we will be adding a filter for Association membership as well. If you have feedback on this directory, please let us know!

———

As always, we’d like to say thanks to all the volunteers who work with us, and to the Drupal Association Supporters, who make it possible for us to work on these projects. In particular we want to thank:

If you would like to support our work as an individual or an organization, consider becoming a member of the Drupal Association. Follow us on Twitter for regular updates: @drupal_org, @drupal_infra

Freelock : A slick migration trick - convert columns to multi-value field with subfields

Tue, 12/12/2017 - 14:37

In the previous post on A custom quantity price discount for Drupal Commerce we created a compound field for price breaks, which was composed by two subfields. One for a quantity threshold, the other for the price at that threshold.

That post covered everything needed to get quantity discounts working within Drupal Commerce, but for this particular project, we also had to find a way to populate these price breaks through the integration with their Sage accounting system.

Drupal 8Drupal MigrationDrupal PlanetIntegrationERP

Drupal blog: Accelerate Drupal 8 by funding a Core Committer

Tue, 12/12/2017 - 11:44

This blog has been re-posted and edited with permission from Dries Buytaert's blog. Please leave your comments on the original post.

We have ambitious goals for Drupal 8, including new core features such as Workspaces (content staging) and Layout Builder (drag-and-drop blocks), completing efforts such as the Migration path and Media in core, automated upgrades, and adoption of a JavaScript framework.

I met with several of the coordinators behind these initiatives. Across the board, they identified the need for faster feedback from Core Committers, citing that a lack of Committer time was often a barrier to the initiative's progress.

We have worked hard to scale the Core Committer Team. When Drupal 8 began, it was just catch and myself. Over time, we added additional Core Committers, and the team is now up to 13 members. We also added the concept of Maintainer roles to create more specialization and focus, which has increased our velocity as well.

I recently challenged the Core Committer Team and asked them what it would take to double their efficiency (and improve the velocity of all other core contributors and core initiatives). The answer was often straightforward; more time in the day to focus on reviewing and committing patches.

Most don't have funding for their work as Core Committers. It's something they take on part-time or as volunteers, and it often involves having to make trade-offs regarding paying work or family.

Of the 13 members of the Core Committer Team, three people noted that funding could make a big difference in their ability to contribute to Drupal 8, and could therefore help them empower others:

  • Lauri 'lauriii' Eskola, Front-end Framework Manager — Lauri is deeply involved with both the Out-of-the-Box Experience and the JavaScript Framework initiatives. In his role as front-end framework manager, he also reviews and unblocks patches that touch CSS/JS/HTML, which is key to many of the user-facing features in Drupal 8.5's roadmap.
  • Francesco 'plach' Placella, Framework Manager — Francesco has extensive experience in the Entity API and multilingual initiatives, making him an ideal reviewer for initiatives that touch lots of moving parts such as API-First and Workflow. Francesco was also a regular go-to for the Drupal 8 Accelerate program due to his ability to dig in on almost any problem.
  • Roy 'yoroy' Scholten, Product Manager — Roy has been involved in UX and Design for Drupal since the Drupal 5 days. Roy's insights into usability best practices and support and mentoring for developers is invaluable on the core team. He would love to spend more time doing those things, ideally supported by a multitude of companies each contributing a little, rather than just one.

Funding a Core Committer is one of the most high-impact ways you can contribute to Drupal. If you're interested in funding one or more of these amazing contributors, please contact me and I'll get you in touch with them.

Note that there is also ongoing discussion in Drupal.org's issue queue about how to expose funding opportunities for all contributors on Drupal.org.

Droptica: Droptica: CKEditor in Drupal 8 Configuring and adding new options pt. I 

Tue, 12/12/2017 - 07:33
What is the CKEditor? It is one of many visual HTML editors. It allows you to easily enter text using an interface that resembles such editors as OpenOffice.  It makes text formatting easier through a set of buttons that serve, among others, for things such as: changing the font, text size, adding an image, making lists, and many others. The CKEditor is the default text editor in the Drupal 8 system. You do not need to add any libraries or modules in order to use it.  Enabled editor in the contend adding form By default, the editor is enabled for two text input formats:

ThinkShout: Meet Bene, an affordable, open-source website solution for nonprofits

Tue, 12/12/2017 - 06:00

Bene is based on a simple goal: Smaller nonprofits deserve websites that are designed to increase their impact and grow alongside them. Sounds simple enough, but achieving it has always been a major challenge from both the nonprofit and agency perspective.

Nonprofits have traditionally been forced to choose their digital solutions from two extremes on a spectrum. On the one side, you have low cost do-it-yourself solutions like SquareSpace or Wix. While inexpensive and easy to launch, these solutions serve such a wide array of use cases that they have nothing unique to offer nonprofits in terms of best practices. The content strategy and designs are not intended to tell a nonprofit’s compelling story and drive engagement. In addition, as the needs of a nonprofit grow, out of the box solutions may not flex to meet those needs, forcing an organization to start over with its digital strategy.

On the other end of the spectrum are custom websites conceived through a rigorous discovery process and built on open source platforms like Drupal and WordPress. If done right, this approach yields the best results: a gorgeous responsive website that provides powerful storytelling tools, increases fundraising, advocacy, and other types of engagement, and serves as the hub of an organization’s digital ecosystem. But these projects take time and money, typically 6-9 months and upwards of $200k.

As ThinkShout has grown, our business has focused more on those larger projects. But in the process, it’s become harder to work with the thousands of organizations who can’t afford the time and cost involved in building a completely custom website. We wanted to find a way to partner with grassroots organizations, as helping them succeed is core to who we are and what we do.

Bene is our answer to this problem: A low cost website for small nonprofits bundling content management, mission critical features, a tailored user experience, hosting, and strategic support. All built on an open source Drupal distribution that can grow alongside the organization.

We first conceived of Bene during an open source “sprint for good” event nearly 2 years ago. This month, we’re proud to launch our first website on the platform for Free Geek, with two more on the way over the next few weeks. We do recognize there are other efforts to address this need, from Drutopia to WordPress.com. We support all of them, as the growing number of organizations working to make our world a better place have a wide range of requirements, and they need all the help they can get!

Learn more about Bene and please get in touch if you think it’s a good fit for you, or have some ideas on how to improve it. We realize we’ve only taken the first step.

Amazee Labs: Defining work - Amazee Agile Agency Survey Results - Part 6

Tue, 12/12/2017 - 04:50
Defining work - Amazee Agile Agency Survey Results - Part 6

This is part 6 of our series processing the results of the Amazee Agile Agency Survey. Previously I wrote about team communication & process. This time let’s focus on defining work. Who is involved in defining work and which tools are essential for organising your work?

Josef Dabernig Tue, 12/12/2017 - 10:50 Defining work

When asked about who is involved in defining work, we asked about which roles would be included in different phases of the ticket process.

  • “Creating tickets” is performed by these roles ordered by a number of selections: “PM / PO Proxy”, “Any Developer”, “Lead Developer”, “Client / Product Owner”, “UX/Design” and finally “The entire team together”.

  • “Refining/grooming/specifying tickets” is performed mostly by “Lead Developer”, “Any Developer” and “PM / PO Proxy” rated equally high, then “Client / Product Owner” and “The entire team together” rated equally high and finally “UX/Design”.

  • “Estimating tickets” is done by “The entire team together” followed by “Lead Developer” or “Any Developer” rated equally often, then “UX/Design”, “Client / Product Owner” and finally “PM / PO Proxy.”

It looks like there is an apparent tendency for Developers or Lead Developers to be involved in all parts of defining the work. It also makes sense that Clients / Product Owners or the internal counterparts in the agency PM / PO Proxies do participate in defining the work but don’t participate in estimating.

For us at Amazee, having the entire team estimate is essential to make sure there is common knowledge about the problem space and that we can get multiple views to validate our understanding of the client’s requirements. Any of our developers can take a leadership position in a particular project, that person would then be tasked to specify tickets together with the Project Owner (PO) or the client directly, and get estimated by the team later on.

Survey contestants also shared some additional insights about defining work/tickets. I’d like to quote a few of them.

"We have in each team an estimation engineer, scrum master and an architect. Everyone is responsible for doing architectures and estimations, bit the QA goes through these roles. The scrum master is responsible for the 2 weekly process while also being part of the development team."

"Involvement across ticket lifespan evolves as project matures."

"Being the most verbose possible."

"You have not mentioned Acceptance Criteria. This is written in collaboration between our QA and Stakeholders client side, ideally the product owner."

"Again - depending on the project/the client and the PM. We had clients that created and defined tickets together with the PO at our side, so that they could be specified during planning and then estimated by the devs. Sometimes PM is doing it, and sometimes this is done by the lead dev (if PM/PO isn't able to do it). Estimation depends a bit on the time pressure and the team size. If possible we estimate with the whole team. But sometimes we only have the lead dev and the dev who is going to implement the feature estimate."

Organizing work 

We also asked which tools were how important when it comes to organizing work. As shown in the illustration above, the ones that had the most apparent tendency towards their importance were “Sprints”, “User stories”, “Acceptance criteria” and “Tasks”, whereas the graph looks more indifferent when it comes to “Epics”, “Definition of Done”, “Definition of Ready” and “Releases/Versions”.

For us at Amazee, two-week sprints are a crucial instrument for planning and deciding about the priorities of our work. We don’t use User Stories all the time but feel like they are a good way of allowing clients to explain their requirements to the team effectively. Acceptance criteria (AC) are a must for anything that the team will implement - this can be on the user story level or the task level. Our teams also follow a definition of done to make sure that everything is in the right place when it comes to browser testing or on which environment results should be available. Recently, we started using Epics to group requirements that we had earlier on put into components in Jira. This allows to easily track the progress per Epic which is a neat feature in Jira. Releases/Versions aren’t used too much in the teams I work with.

How do you define your work? Please leave us a comment below. If you are interested in Agile Scrum training, don’t hesitate to contact us.

Stay tuned for the next post where we’ll look at estimations.

   

Platform.sh: Watch your inheritance

Mon, 12/11/2017 - 16:39
Watch your inheritance Crell Mon, 12/11/2017 - 21:39 Blog

PHP 7.2 introduced a neat new feature called "type widening". In short, it allows methods that inherit from a parent class or interface to be more liberal in what they accept (parameters) and more strict in what they return (return values) than their parent. In practice they can only do so by removing a type hint (for parameters) or adding one where one didn't exist before (return values), not for subclasses of a parameter. (The reasons for that are largely implementation details far too nerdy for us to go into here.) Still, it's a nice enhancement and in many ways makes PHP 7.2 more compatible with earlier, less-typed versions of PHP than 7.0 or 7.1 were.

There's a catch, though: Because the PHP engine is paying more attention to parameter types than it used to, it means it's now rejecting more invalid uses than it used to. That's historically one of the main sources of incompatibilities between different PHP versions: Code that was technically wrong but the engine didn't care stops working when the engine starts caring in new version. Type widening is PHP 7.2's case of that change.

Consider this code: interface StuffDoer { public function doStuff(); } class A implements StuffDoer { public function doStuff(StuffDoer $x = null) {} }

This is nominally valid, since A allows zero parameters in doStuff(), which is thus compatible with the StuffDoer interface.

Now consider this code:

class A { public function doStuff(StuffDoer $x = null) {} } class B extends A { public function doStuff() {} }

While it seems at first like it makes sense, it's still invalid. We know that B is going to not do anything with the optional $x parameter, so let's not bother defining it. While that intuitively seems logical the PHP engine disagrees and insists on the parameter being defined in the child class, even though you and I know it will never be used. The reason is that another child of B, say C, could try to re-add another optional parameter of another type; that would technically be compatible with B, but could never be compatible with A. So, yeah, let's not do that.

But what happens if you combine them?

interface StuffDoer { public function doStuff(); } class A implements StuffDoer { public function doStuff(StuffDoer $x = null) {} } class B extends A { public function doStuff() {} }

There's two possible ways to think about this code.

  1. B::doStuff() implements StuffDoer::doStuff(), which has no parameters, so everything is fine.
  2. B::doStuff() extends A::doStuff(), which has a parameter. You can't leave off a parameter, so that is not cool.

Prior to PHP 7.2, the engine implicitly went with interpretation 1. The code ran fine. As of PHP 7.2.0, the engine now uses interpretation 2. It has to, because it's now being more careful about when you're allowed to drop a type on a parameter in order to support type widening. So this wrong-but-working code now causes a fatal error. Oopsies.

Fortunately, the quickfix is super easy: Just be explicit with the parameter, even if you know you're not going to be using it:

interface StuffDoer { public function doStuff(); } class A implements StuffDoer { public function doStuff(StuffDoer $x = null) {} } class B extends A { public function doStuff(StuffDoer $x = null) {} }

The more robust fix is conceptually simpler: Don't do that. While adding optional parameters to a method technically doesn't violate the letter of an interface, it does violate the spirit of the interface. The method is now behaving differently, at least sometimes, and so is not a true drop-in implementation of the interface.

If you find your code is doing that sort of stealth interface extension, it's probably time to think about refactoring it. As a stopgap, though, you should be able to just be more explicit about the parameters in child classes to work around the fatal error.

Enjoy your PHP 7.2!

Larry Garfield 13 Dec, 2017

Pages