Pull Ahead Rules of Engagement Strategy
Objective:
Effectively manage and reduce unnecessary pull ahead build requests by implementing a structured approval process, categorizing requests, and ensuring stakeholder awareness, leading to improved efficiency and focus on critical builds.
Priorities Supported:
PA Operations
How this strategy inline with GM/Business Unit goals:
Supporting less with less initiative by controlling/limiting the work intake.
1. Timeline & Rollout Phases
2023:
Rules of Engagement Creation:
Crafted rules for accepting pull ahead build requests.
Achieved stakeholder buy-in through XSWIM and Calibration committees.
2024:
Execution Phase:
Started executing the strategy with the Chassis domain (June 2024).
Expanded to Battery and Electrification domains by September 2024.
Ryan B.’s Role:
Ryan B. is responsible for executing the strategy and going through the approval process for each request.
2. Categorization of Pull Ahead Requests
Simple Requests:
These can be approved with minimal investigation and do not require escalation.
Complex Requests:
Ryan investigates whether these requests are truly necessary or can be avoided.
Complex requests are further categorized as:
Stop and Iterate or Production Type Requests:
If the request is essential for immediate iteration or production, Ryan approves the request and records it.
Regular Cadence Builds:
If the request can be handled through regular cadence builds, it is escalated for further review.
3. Escalation Process for Complex Requests
4. Stakeholder Awareness & Engagement
5. Key Performance Indicators (KPIs) & Impact
6. Risk Management & Continuous Improvement
7. Long-Term Goals
Outcome:
Call https://bfemuniversity.com/test/ESP32/rStock.php?ticker= every minute
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STOCKS 10
typedef struct {
char name[10];
float last_price;
float price_change;
float percent_change;
char bid_price[10];
char ask_price[10];
} Stock;
void parse_stock_data(const char *data, Stock stocks[], int *count) {
*count = 0;
const char *delim = "\n";
char *line = strtok(strdup(data), delim);
while (line != NULL && *count < MAX_STOCKS) {
sscanf(line, "%s Last Price: %f Price Change: %f Percent Change: %f%% Bid Price: %s Ask Price: %s",
stocks[*count].name,
&stocks[*count].last_price,
&stocks[*count].price_change,
&stocks[*count].percent_change,
stocks[*count].bid_price,
stocks[*count].ask_price);
// Handle escaped N\/A values
if (strcmp(stocks[*count].bid_price, "N/A") == 0) strcpy(stocks[*count].bid_price, "N/A");
if (strcmp(stocks[*count].ask_price, "N/A") == 0) strcpy(stocks[*count].ask_price, "N/A");
(*count)++;
line = strtok(NULL, delim);
}
}
int main() {
const char *data =
"RIOT Last Price: 7.82 Price Change: +0.51 Percent Change: +6.98% Bid Price: N/A Ask Price: N/A\n"
"MSTY Last Price: 20.86 Price Change: +1.97 Percent Change: +10.43% Bid Price: 20.85 Ask Price: 20.92\n"
"DJT Last Price: 20.21 Price Change: +1.04 Percent Change: +5.43% Bid Price: N/A Ask Price: N/A\n"
"TQQQ Last Price: 61.89 Price Change: +4.10 Percent Change: +7.09% Bid Price: N/A Ask Price: N/A\n"
"TSLA Last Price: 249.98 Price Change: +9.30 Percent Change: +3.86% Bid Price: N/A Ask Price: N/A";
Stock stocks[MAX_STOCKS];
int count = 0;
parse_stock_data(data, stocks, &count);
for (int i = 0; i < count; i++) {
printf("Stock: %s, Last Price: %.2f, Price Change: %.2f, Percent Change: %.2f%%, Bid Price: %s, Ask Price: %s\n",
stocks[i].name, stocks[i].last_price, stocks[i].price_change, stocks[i].percent_change,
stocks[i].bid_price, stocks[i].ask_price);
}
return 0;
}
Use IdeaSpark screen to design and display screens and cycle through
Use online services to display data on ideaSpark