Progressivism fundamentally means, being opened to new changes, while conservatism is about maintaining the existing rules and values. However, in real life, progressives are actually just another group of conservatives.

Political parties or organizations are by nature, conservative. To maintain the integrity of the group, they’ll have to gatekeep. To fight for their best interests, they’ll have to attack opposing or competing organizations. Most importantly, to attract people to join or support, they’ll need to hold on to a certain value. These apply to all the political groups, with the only variable being the value they hold. Meaning, progressive parties are parties with their core value being those considered progressive for the current society. But are they open to new changes relative to their current stance? No. Will they progress themselves as the society progress? No. They’ll just keep on holding on the same values and trying everything to have a firmer grip on what they have.

It is basically like this:

package party

import (
	"context"
	"utils"
)

type PoliticalParty interface {
	GateKeep()
	ConserveValue()
	AttractSupporters()
	MaintainTerritory()
	GainNewTerritory()
}

type politicalParty struct {
	coreValue int
}

func (p politicalParty) AttractSupporters(ctx context.Context) {
	leftmostValue := coreValue - 3
	rightmostValue := coreValue + 3
	utils.SpreadPropaganda(leftmostValue, rightmostValue)
}

All parties have the same methods, and they all act like the same. The core value is merely an injected dependency that will not affect the core logic, abiding the dependency inversion principle.