The new Era
of Full-Stack

A Hitachi Group Company

Volodymyr Vyshko

Plan

  • The full-stack 10y ago vs now
  • Is full-stack in demand on the market
  • Is it worth it?
  • Trends
  • Quiz

A Hitachi Group Company

A Hitachi Group Company

Quiz gift!

Full-Stack

10 years ago

A Hitachi Group Company

A Hitachi Group Company

2012

A Hitachi Group Company

2012

A Hitachi Group Company

2013

A Hitachi Group Company

2023

A Hitachi Group Company

2023

A Hitachi Group Company

2023

A Hitachi Group Company

A Hitachi Group Company

Be flexible and adaptable

Network with other IT professionals

Keep up with the latest trends

A Hitachi Group Company

Trends 2024

A Hitachi Group Company

Repetetive tasks / code generation

A Hitachi Group Company

A Hitachi Group Company

A Hitachi Group Company

A Hitachi Group Company

SSR - Server Side Rendering

A Hitachi Group Company

// routes/index.js
import { useLoaderData } from "remix";
import prisma from "~/lib/db.server";

export const loader = async () => {
  // Fetch all the users from the Prisma SQL DB
  const users = await prisma.user.findMany();
  // Return the users as the loader data
  return users;
};

// Add an action that handles the POST request
export const action = async ({ request }) => {
  // Get the form data from the request
  const formData = await request.formData();
  // Get the values from the form data
  const name = formData.get("name");
  const email = formData.get("email");
  // Create a new user in the Prisma SQL DB
  const user = await prisma.user.create({ data: { name, email } });

  // Redirect to the same route with a success message
  return redirect(request.url, {
    headers: { "X-Message": `User ${user.name} created successfully!` },
  });
};

export default function Index() {
  // Use the loader data in the component
  const users = useLoaderData();
  return (
    <div>
      <h1>Users</h1>
      <ul>
        {users.map((user) => (
          <li key={user.id}>
            <p>{user.name}</p> <p>{user.email}</p>{" "}
          </li>
        ))}
      </ul>
      <form method="post">
 
        <label htmlFor="name">Name</label>
        <input type="text" id="name" name="name" required />
        <label htmlFor="email">Email</label>
        <input type="email" id="email" name="email" required />
        <button type="submit">Create User</button>
      </form>
    </div>
  );
}

A Hitachi Group Company

Custom AI interface

Site index / Training data

Generate model

Open AI API

Perform Open AI call with custom model

const response = await openai.createChatCompletion({
  model: "skt-1234abcd",
  messages,
  max_tokens: 150,
  temperature: 0,
});
const { Configuration, OpenAIApi } = require("openai");
const fs = require("fs");

const configuration = new Configuration({
  apiKey: "sk-XXXXXXXXXXXXXXXXXX",
});

(async () => {
  const openai = new OpenAIApi(configuration);
  const response = await uploadfile(openai);
  console.log("response ::: ", response.data);
})();

function uploadfile(openai) {
  return openai.createFile(fs.createReadStream("mydata.jsonl"), "fine-tune");
}

A Hitachi Group Company

BFF

A Hitachi Group Company

Best Friends Forever

Backend For Frontend

A Hitachi Group Company

BFF

Frontend dev

Backend dev

?

A Hitachi Group Company

BFF vs SSR

vs Gateway API

A Hitachi Group Company

Serverless

A Hitachi Group Company

A Hitachi Group Company

A Hitachi Group Company

NestJS + Serverless + Lambda + AWS

import { Handler, Context } from 'aws-lambda';
import { Server } from 'http';
import { createServer, proxy } from 'aws-serverless-express';
import { eventContext } from 'aws-serverless-express/middleware';

import { NestFactory } from '@nestjs/core';
import { ExpressAdapter } from '@nestjs/platform-express';
import { AppModule } from './app.module';

const express = require('express');

const binaryMimeTypes: string[] = [];

let cachedServer: Server;

async function bootstrapServer(): Promise<Server> {
 if (!cachedServer) {
    const expressApp = express();
    const nestApp = await NestFactory.create(AppModule, new ExpressAdapter(expressApp))
    nestApp.use(eventContext());
    await nestApp.init();
    cachedServer = createServer(expressApp, undefined, binaryMimeTypes);
 }
 return cachedServer;
}

export const handler: Handler = async (event: any, context: Context) => {
 cachedServer = await bootstrapServer();
 return proxy(cachedServer, event, context, 'PROMISE').promise;
}
sls deploy -v
service:
 name: nest-serverless-lambda-demo

plugins:
 - 'serverless-plugin-typescript'
 - serverless-plugin-optimize
 - serverless-offline

provider:
 name: aws
 runtime: nodejs12.x

functions:
 main: # The name of the lambda function
   # The module 'handler' is exported in the file 'src/lambda'
   handler: src/lambda.handler
   events:
     - http:
         method: any
         path: /{any+}

A Hitachi Group Company

Serverless SSR BFF Application

A Hitachi Group Company

A Hitachi Group Company

Full-Stack

Cloud

BFF

SSR

Serverless

Devops

Low-code

A Hitachi Group Company

opportunities

A Hitachi Group Company

Search interest

A Hitachi Group Company

SelaRY

A Hitachi Group Company

  • More opportunitiesĀ 
  • Can launch a product on your own
  • Getter general understanding of web

Pros

  • Maintain skills of backend/frontend
  • multiple backend stacks
  • too many frameworks/libs

Cons

Full-stack

A Hitachi Group Company

A Hitachi Group Company

ROADMAP

A Hitachi Group Company

A Hitachi Group Company

A Hitachi Group Company

Full-stack

Solution

architect

Manager

Own business

Specialize

DevOps

A Hitachi Group Company

QUIZ

A Hitachi Group Company

Join quiz!

Win a prize!

Thank you

A Hitachi Group Company

Made with Slides.com