SWS Alternatives

This page contains some alternatives to SWS.

You are liklely reading this page because you are trying to decide if SWS is right for your organization. Let’s look at what you would do if you did not have SWS. There are a few alternatives to our SWS solution. Let’s see how they compare.

Bespoke Web Services

The main alternative to SWS is to create a bespoke web service for each client or vendor and each piece of data. This is the traditional way of doing things. It is expensive and time-consuming. It is also very inflexible.

If we take PeopleSoft Campus Solutions module as an example, a software vendor may need to integrate with Student Enrollment, Configuration data like Terms and other Academic Setup data, Student Bio data, Student Grades, and Invoices. This is a very common integration pattern.

With each new vendor, a custom bespoke web service may need to be created. You often may have very similar web services returning mostly the same data but with some slight variations.

SWS can run in any PeopleSoft database but our example here is focused on Campus Solutions.


left to right direction
skinparam sequenceArrowThickness 3
Title: The SWS Alternative! Web Service Sprawl!

Package "PeopleSoft" {


  rectangle "Terms" as rec.terms #FFD3B0
  rectangle "Student Bio data" as rec.students #FFD3B0
  rectangle "Student Grades" as rec.grades #FFD3B0
  rectangle "Student Enrollment" as rec.se #FFD3B0
  rectangle "Invoices" as rec.invoices #FFD3B0

  ' package "Bespoke Web Services" {
  rectangle "Terms\nWeb Service" as ib.rec.terms #FF6969
  rectangle "Student Bio data\nWeb Service" as ib.rec.students #FF6969 
  rectangle "Student Bio data\nWeb Service\nVersion 2" as ib.rec.students2 #FF6969 
  rectangle "Student Grades\nWeb Service" as ib.rec.grades #FF6969
  rectangle "Student Enrollment\nWeb Service" as ib.rec.se #FF6969
  rectangle "Student Enrollment\nWeb Service \nVersion 2" as ib.rec.se2 #FF6965
  rectangle "Invoices\nWeb Service" as ib.rec.invoices #FF6969
' }

  ib.rec.terms --> rec.terms
  ib.rec.students --> rec.students
  ib.rec.students2 --> rec.students
  ib.rec.grades --> rec.grades
  ib.rec.se --> rec.se
  ib.rec.se2 --> rec.se

  ib.rec.invoices --> rec.invoices

  ' rectangle "SWS - Web Service\n\n(Single Web Service)\nReplaces all " as ib.sws #limeGreen
  ' ib.sws -[#limeGreen,thickness=3,dashed]-> rec.terms
  ' ib.sws -[#limeGreen,thickness=3,dashed]-> rec.students
  ' ib.sws -[#limeGreen,thickness=3,dashed]-> rec.grades
  ' ib.sws -[#limeGreen,thickness=3,dashed]-> rec.se
  ' ib.sws -[#limeGreen,thickness=3,dashed]-> rec.invoices


}


rectangle "LMS Integration Partner" as client #A6D0DD
rectangle "Student Success\nIntegration Partner" as client2 #A6D0DD
rectangle "Payment\nIntegration Partner" as client3 #A6D0DD

client --> ib.rec.terms
client --> ib.rec.students
client --> ib.rec.grades
client --> ib.rec.se


client2 --> ib.rec.students2
client2 --> ib.rec.grades
client2 --> ib.rec.se2

client3 --> ib.rec.invoices

' client -[#limeGreen,thickness=3,dashed]-> ib.sws
' client2 -[#limeGreen,thickness=3,dashed]-> ib.sws
' client3 -[#limeGreen,thickness=3,dashed]-> ib.sws

If you are a Software vendor trying to integrate with a PeopleSoft customer then you might develop 5 unique web services for the five unique areas you are trying to integrate with if you are NOT using SWS.

  • You have a PeopleSoft application with 5 different web services.
  • Each web service is designed for a specific vendor or client.
  • Each client may have customizations that are hard to support in the traditional approach without access to the client’s PeopleSoft development instances or support from the client’s PeopleSoft development team.
  • Each client may have different data filtering requirements.
  • Code patches can take months to deploy to all clients and some clients may not be able to take the patch at all or they don’t have the resources to deploy the patch.

We have developed vendor solutions similarly and this is the reason we developed SWS. We wanted to make it easier for vendors to integrate with PeopleSoft and we wanted to make it easier for PeopleSoft customers to integrate with third-party vendors. You can read more in the SWS origin story

What is the cost of this approach?

You can ask a developer to create a new web service for each user integration requirement. If a vendor commissioned the PeopleSoft application team to develop a new web service, the following process would likely be followed. This assumes you are a medium to large organization with a formal development process.

After years of developing web services for PeopleSoft customers, we have a good idea of the cost of developing a new web service and even wrote a book about the topic.

Task Minimum Estimated Person Hours Maximum Estimated Person Hours
Gather Requirements 5 10
Write a technical specification 5 10
Technical Design Review 2 10
Create and unit test code 8 40
Functional Testing 8 40
Code Review 2 10
Code Migration 2 4
Bug Fixes 4 10
Totals 36 Hours - $3,600 @ $100/Hour 130 Hours - $13,000 @ $100/Hour
  • If you value your developer’s time at roughly $100 an hour. Then the cost to develop a new web service is somewhere between $3,600 and $13,000.
  • With SWS, that amount can be drastically reduced. In some cases, it can take just a few minutes to create a new web service and have it deployed in production.

Query Access Web Services

We have a KB article called Reporting Web Services: Using the REST Web Services to run a Query which demonstrates how you can make a “web service” out of a PeopleSoft query manager query. This can be an effective tool to generate web services.

However, the SWS offers many advantages over this delivered functionality.

  • You have better control over the field names in the output.
  • SWS offers more output encoding type
  • The PeopleSoft query tool imposes unneeded complexity with data security and query tree security that often just gets in the way.
  • SWS supports more advanced SQL and you are not forced into the SQL generated by query manager.

How does SWS Make it better?

  • SWS is a single web service that can be used for most integrations.
  • SWS is a single web service that can be used for all clients.
  • SWS is a single web service that can be used for all vendors.
  • SWS is a single web service that can be used for all data.

left to right direction
skinparam sequenceArrowThickness 3
Title: The SWS Alternative! Web Service Sprawl!

Package "PeopleSoft" {


  rectangle "Terms" as rec.terms #FFD3B0
  rectangle "Student Bio data" as rec.students #FFD3B0
  rectangle "Student Grades" as rec.grades #FFD3B0
  rectangle "Student Enrollment" as rec.se #FFD3B0
  rectangle "Invoices" as rec.invoices #FFD3B0

  ' package "Bespoke Web Services" {
  ' rectangle "Terms\nWeb Service" as ib.rec.terms #FF6969
  ' rectangle "Student Bio data\nWeb Service" as ib.rec.students #FF6969 
  ' rectangle "Student Bio data\nWeb Service\nVersion 2" as ib.rec.students2 #FF6969 
  ' rectangle "Student Grades\nWeb Service" as ib.rec.grades #FF6969
  ' rectangle "Student Enrollment\nWeb Service" as ib.rec.se #FF6969
  ' rectangle "Student Enrollment\nWeb Service \nVersion 2" as ib.rec.se2 #FF6965
  ' rectangle "Invoices\nWeb Service" as ib.rec.invoices #FF6969
' }

  ' ib.rec.terms --> rec.terms
  ' ib.rec.students --> rec.students
  ' ib.rec.students2 --> rec.students
  ' ib.rec.grades --> rec.grades
  ' ib.rec.se --> rec.se
  ' ib.rec.se2 --> rec.se
  ' ib.rec.invoices --> rec.invoices

  rectangle "SWS - Web Service\n\n*Single Web Service\n*Configuration Based\n* No Hard Coding" as ib.sws #limeGreen
  ib.sws -[#limeGreen,thickness=3,dashed]-> rec.terms
  ib.sws -[#limeGreen,thickness=3,dashed]-> rec.students
  ib.sws -[#limeGreen,thickness=3,dashed]-> rec.grades
  ib.sws -[#limeGreen,thickness=3,dashed]-> rec.se
  ib.sws -[#limeGreen,thickness=3,dashed]-> rec.invoices


}


rectangle "LMS Integration Partner" as client #A6D0DD
rectangle "Student Success\nIntegration Partner" as client2 #A6D0DD
rectangle "Payment\nIntegration Partner" as client3 #A6D0DD

' client --> ib.rec.terms
' client --> ib.rec.students
' client --> ib.rec.grades
' client --> ib.rec.se


' client2 --> ib.rec.students2
' client2 --> ib.rec.grades
' client2 --> ib.rec.se2

' client3 --> ib.rec.invoices

client -[#limeGreen,thickness=3,dashed]-> ib.sws
client2 -[#limeGreen,thickness=3,dashed]-> ib.sws
client3 -[#limeGreen,thickness=3,dashed]-> ib.sws