Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 322845
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 12, 20262026-05-12T08:58:35+00:00 2026-05-12T08:58:35+00:00

The scope of the project I’m working on is being expanded. The application is

  • 0

The scope of the project I’m working on is being expanded. The application is fairly simple but currently targets a very specific niche. For the immediate future I’ve been asked to fork the project to target a new market and continue developing the two projects in tandem.

Both projects will be functionally similar so there is a very strong incentive to generalize a lot of the guts of the original project. Also I’m certain I’ll be targeting more markets in the near future (the markets are geographic).

The problem is a previous maintainers of the project made a lot of assumptions that tie it to its original market. It’s going to take quite a bit of refactoring to separate the generic from the market specific code.

To make things more complex several suggestions have been tossed around on how to organize the projects for the growing number of markets:

  1. Each market is a separate project, commonalities between projects are moved to a shared library, projects are deployed independently.
  2. Expand the existing project to target multiple markets, limiting functionality based on purchased license.
  3. Create a parent application and redesign projects as plugins, purchased separately

All three suggestions have merit and ideally I would like to structure the codeto be flexible enough that any of these is possible with minor adjustments. Suggestion 3 appears to be the most daunting as it would require building a plugin architecture. The first two suggestions are a bit more plausible.

Are there any good resources available on the pros and cons of these different architectures?

What are the pros and cons on sharing code between projects verses copying and forking?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-12T08:58:35+00:00Added an answer on May 12, 2026 at 8:58 am

    Forking is usually going to get you a quicker result initially, but almost always going to come around and bite you in maintenance — bug fixes and feature enhancements from one fork get lost in the other forks, and eventually you find yourself throwing out whole forks and having to re-add their features to the “best” fork. Avoid it if you can.

    Moving on: all three of your options can work, but they have trade-offs in terms of build complexity, cost of maintenance, deployment, communication overhead and the amount of refactoring you need to do.


    1. Each market is a separate project

    A good solution if you’re going to be developing simultaneously for multiple markets.

    Pros:

    • It allows developers for market A to break the A build without interfering with ongoing work on B
    • It makes it much less likely that a change made for market A will cause a bug for market B

    Cons:

    • You have to take the time to separate out the shared code
    • You have to take the time to set up parallel builds
    • Modifications to the shared code now have more overhead since they affect both teams.

    2. Expand the existing project to target multiple markets

    Can be made to work okay for quite a while. If you’re going to be working on releases for one market at a time, with a small team, it might be your best bet.

    Pros:

    • The license work is probably valuable anyway, even if you move toward (1) or (3).
    • The single code base allows refactoring across all markets.

    Cons:

    • Even if you’re just working on something for market A, you have to build and ship the code for markets B, C and D as well — okay if you have a small code base, but increasingly annoying as you get into thousands of classes
    • Changes to one market risk breaking the code for other markets
    • Changes to one market require other markets to be re-tested

    3. Create a parent application and redesign projects as plugins

    Feels technically sweet, and may allow you to share more code.

    Pros:

    • All the pros of (1), potentially, plus:
      • clearer separation of shared and market-specific code
      • may allow you to move toward a public API, which would allow offloading some of your work onto your customers and/or selling lucrative service projects

    Cons:

    • All the cons of (1), plus requires even more refactoring.

    I would guess that (2) is sort of where you find yourself now, apart from the licensing. I think it’s okay to stay there for a little while, but put some effort into moving toward (1) — moving the shared code into a separate project even if it’s all built together, for instance, trying to make sure the dependencies from market code to shared code are all one-way.

    Whether you end up at (1) or (3) kind of depends. Mostly it comes down to who’s “in charge” — the shared code, or the market-specific code? The line between a plugin, and a controller class that configures some shared component, can be pretty blurry. My advice would be, let the code tell you what it needs.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'd asked a very similar question earlier , but the project scope is quickly
Im currently working on a project that requires the following. I need to be
I am currently working in a project with developers working on three sites. One
Interesting problem. In a project scope change, I broke one application into two applications.
I am working on a project that is a customized and specific CMS. In
I've alluded to this project before, in this question, but the scope of redesign
Simple question: Is the scope of require_once global? For example: <?PHP require_once('baz.php'); // do
I have the following dependency specified in my project's POM: <dependency> <groupId>org.jboss.client</groupId> <artifactId>jbossall-client</artifactId> <scope>compile</scope>
in my project I need to work with device drivers, but have a hard
I am not sure the scope of this project exactly, I'm hoping someone here

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.