Skip to content
vishwak.dev

Hi, my name is

Vishwak Thatikonda.

I design large-scale systems for retail, fintech, and mobility.

Large-scale systems architect and full-stack engineer with 12 years of experience. Currently consulting through SDH Systems on enterprise master data, event-driven serverless infrastructure, and operational intelligence.

Vishwak Thatikonda

01.About

I build the data and workflow infrastructure that large enterprises run on. Over the past 12 years I have architected master data platforms, event-driven serverless systems, and omnichannel contact center software across retail, fintech, mobility, and geospatial SaaS. I currently consult through SDH Systems, leading architecture and full-stack work on enterprise platforms.

Most of that work sits where operational data has to stay correct at scale. Assortment models and store attributes that thousands of retail locations read as their source of truth. The hard part is rarely the algorithm. It is the seams between systems, and what happens to them under load and over years.

I've previously led engineering at Kyte, Credit Sesame, and Airworks. Earlier, at Arizona State University, I wrote software for the Mastcam-Z science payload aboard the Perseverance Mars rover alongside the team at NASA JPL. I contribute regularly to open source, with merged work in TensorFlow, the AWS CDK, AWS Lambda Powertools, and GraphiQL.

Currently

Enterprise master data architecture, event-driven serverless platforms on AWS, and making operational data usable by AI systems.

Education

Master of Science, Computer Science
Arizona State University, 2016 to 2018
Bachelor of Technology, Computer Science
Amrita University, India, 2011 to 2015

Certification

AWS Certified Solutions Architect Associate, 2020

Download my resume

02.Experience

  1. 2023 to present

    Full-Stack Developer and Systems Architect at SDH Systems

    Architecture and full-stack lead on enterprise platform engineering. Delivered the master data core that thousands of retail locations read as their source of truth, covering the assortment model, dynamic store attributes, and the sellable item metadata that downstream ordering, pricing, and personalization systems consume. Designed the cascade delete and override controls that closed off a class of silent corruption across product hierarchies. Contributed to an omnichannel contact center platform handling roughly 10 million calls a year, and to payments infrastructure operating at Fortune 1 retail scale with millions of transactions a day.

  2. 2022 to 2023

    Lead Full Stack Developer at Kyte

    Led the domain migration that lifted organic traffic 13x overnight and cut marketing spend with it. Shipped a guest checkout that raised monthly bookings 33%, and a template driven integration path that took online travel agency onboarding from three months to two weeks, an 85% reduction in engineering effort. Introduced the content management system that let the team publish two SEO pages a day without engineering involvement, lifting site traffic 12%.

  3. 2021 to 2022

    Senior Full-Stack Developer at Credit Sesame

    Set technical direction for the banking team and led the UI revamp across mobile and web. Drove the white labeling effort that took the credit building platform to multiple financial institutions under PCI compliance, and shipped rent payment reporting into members' credit utilization.

  4. 2019 to 2021

    Full-Stack Developer at Airworks Solutions

    First engineer on the web application team, joining at pre-seed and building the product through the company's Series A. Owned it from architecture through maintenance: the AWS platform from scratch, Stripe for payments, subscriptions, and billing, and the geospatial data layer behind the map product. Built the error reporting pipeline that cut both time to resolution and time to detection across the image processing stack.

  5. 2018 to 2019

    Full-Stack Developer at Augmate Corp

    Built the API behind an IoT wearable environment manager and the dashboards clients used to track connected devices across their warehouses. Piloted an asset tracking application for UPS on Hyperledger Fabric.

  6. 2016 to 2018

    Software Developer at Arizona State University, School of Earth and Space Exploration

    Developed the Mastcam-Z science payload software component aboard the Perseverance Mars rover in conjunction with the team at NASA JPL. Built the microservices carrying scientific data to and from the Martian rovers, and extended the tooling scientists use to run operations and transformations on returned imagery.

03.Speaking

04.Projects and open source

  • LambdaForge

    Hands-off algorithmic stock trading that runs entirely on AWS Lambda for about fifteen cents a month. Python on AWS SAM, with the Alpaca API for execution.

  • ASU Capstone mentorship

    Fall 2026 to Spring 2027

    Mentoring a senior capstone team at Arizona State University through a full project cycle, from architecture review to delivery.

Open source contributions

70 merged pull requests across 11 projects, covering machine learning runtimes, cloud infrastructure tooling, and developer platforms.

  • tensorflow/tensorflow · ★ 200.7k

    tensorflow-cpu on ARM64

    pip install tensorflow-cpu failed on Linux ARM64 and Apple silicon because the package was never published there. The existing ARM builds now also ship under the tensorflow-cpu name.

    #127825

  • aws-powertools/powertools-lambda-typescript · ★ 1.8k

    Concurrency safety on Lambda Managed Instances

    Tracer segments, the log buffer, and debug sampling all assumed one request per execution environment. Each is now scoped per invocation, so concurrent requests stop corrupting each other's traces and logs.

    #5444#5543#5544

  • aws/aws-cdk · ★ 12.9k

    WebSocket API permissions

    Reusing one Lambda integration across WebSocket routes granted invoke permission to the first route only, so the others failed at runtime with a configuration error.

    #38154

  • aws-powertools/powertools-lambda-typescript · ★ 1.8k

    Idempotency records that never complete

    If a handler mutated its input, completion and cleanup targeted a different key, leaving the record stuck in progress. Record identity is now fixed when the operation starts.

    #5717

All projects, by GitHub stars

  • tensorflow/tensorflow

    Kernel hardening, XLA compilation, numerics · C++

    200.7k GitHub stars28 merged

    Crash hardening

    • #123865

      Unbatch aborted the whole process when given a malformed batch_index. It now raises a catchable error, and a scalar index no longer produces a garbage error message.

    • #124050

      A ParallelConcat shape whose size overflows int64 crashed the process during graph optimization. The shape is now validated before the rewrite runs.(merged internally)

    • #125589

      GradientTape.gradient segfaulted when a composite target expanded to more tensors than the output_gradients supplied. The counts are now compared and a mismatch raises a clear error.

    • #126021

      A negative num_elements in BarrierTakeMany aborted the process. It is now rejected, matching the check the sibling DequeueMany kernel already had.

    • #126028

      The LSTM gradient kernels read out of bounds or aborted on mismatched input shapes. Every input's dimensions are now validated against the batch, cell, and time sizes.

    • #126542

      QR and SVD under XLA hit fatal checks for inputs of unknown rank. The kernels now validate rank and return an error.

    XLA correctness

    • #124874

      map_fn under XLA returned garbage when the mapped function changed the dtype. It now raises the same error eager and graph mode do.

    • #125167

      take_along_axis failed under jit_compile when a later op depended on its shape. The axis-swap branch is now resolved at trace time.

    • #126012

      Integer reduce_mean overflowed under XLA and returned negative means for positive inputs. The accumulator is now widened to match eager results.

    • #126676

      Slicing a dynamically shaped tensor (for example the output of tf.where) under XLA silently dropped data, and on Linux corrupted the heap. The slice now carries the correct output size.(merged internally)

    • #126677

      map_fn over an empty tensor failed to compile under XLA. Reads from a statically empty list are now allowed, since they never execute.

    • #127547

      Writing past a TensorArray's initial size under XLA silently truncated the result. It now emits a warning instead of failing quietly.

    Numerical correctness

    • #123867

      tf.experimental.numpy.isclose ignored rtol and atol for integer inputs. Tolerances are now applied, matching NumPy.

    • #126208

      A graph optimizer rewrote 1/y into a reciprocal op that is not exact on x86, so graph mode disagreed with eager. The rewrite is removed.

    • #127946

      xlogy, xlog1py, and xdivy returned -0 instead of 0 on the vectorized CPU path. They now return +0, matching the documentation and the XLA kernels.(merged internally)

    • #128034

      The GPU kernels for xlogy, xlog1py, and xdivy had the same -0 problem in separate code. They now return 0 too, so CPU and GPU agree.

    API validation and error messages

    • #125269

      tf.reverse accepted out-of-range axes in eager mode for scalar and empty inputs, while graph mode rejected them. Both now reject them.

    • #125591

      eigh_tridiagonal with select='i' or 'v' and no select_range failed with an opaque TypeError. It now raises a ValueError naming the missing argument.

    • #125594

      bincount silently returned a short result when maxlength was below minlength. Contradictory bounds are now rejected.

    • #125799

      Indexing a captured eager TensorArray with a symbolic tensor inside tf.function gave misleading advice. It now raises an error that describes the actual problem.

    Packaging, logging, docs

    • #127825

      pip install tensorflow-cpu failed on Linux ARM64 and Apple silicon because the package was never published there. The existing ARM builds are now also published under the tensorflow-cpu name.(merged internally)

    • #125002

      The GPU CheckNumerics kernel flooded stderr with a raw log line on every NaN or Inf, duplicating the error already returned. The log is now verbose-only.

    • #125697

      Added a security note that tf.io.gfile does not prevent path traversal or restrict symlinks, so callers must validate untrusted paths.

    • #127661

      Restored a word-scrambled Apache license header in a GPU kernel header.

    More

    • #128161

      Retrace tf.function for equal Python values of another type or sign

    • #127780

      Stop exporting the LLVM C API from libtensorflow_framework

    • #126161

      Reject SplitV size_splits overflow instead of aborting

    • #123864

      Reject malformed empty boxes and box_index in crop-and-resize kernels

    View on GitHub
  • graphql/graphiql

    GraphQL IDE and language server · TypeScript

    16.9k GitHub stars5 merged

    Editor and IDE

    • #4329

      The editor flagged valid SDL such as type Bar @baz (no field block) as an error.

    • #4332

      Image previews in the response pane fetched from the current site instead of the image's real host.

    • #4557

      Invalid JSON in the Variables or Headers pane now reports a plain message with line and column, and says the request was not sent.

    Language server packaging

    • #4328

      The GraphQL language server crashed on startup under strict pnpm installs because a runtime dependency was declared as a dev dependency.

    • #4331

      A type imported through a fragile re-export broke the CI type check. It now imports from the package that owns it.

    View on GitHub
  • aws/aws-cdk

    Infrastructure as code for AWS · TypeScript

    12.9k GitHub stars8 merged

    IAM and permissions

    • #37892

      TableV2 grants left out index ARNs when indexes were added after the table, so IAM denied queries against them.

    • #38154

      Reusing one WebSocket Lambda integration across routes granted invoke permission to the first route only, so the others failed at runtime.

    • #38365

      TableV2MultiAccountReplica rejected imported tables with partly tokenized ARNs as "same account" when they were not.

    Lambda bundling

    • #38022

      NodejsFunction rejected valid entry paths that contain .. inside a name, including pnpm file: dependencies.

    • #38447

      Local Lambda bundling on Windows failed under the AllSigned PowerShell policy with no workaround. The npm executable is now resolved directly, skipping the script shim.

    Bedrock models and docs

    • #38760

      Added the OpenAI foundation models on Bedrock to both model catalogues.

    • #38272

      Added the Claude Sonnet 5 foundation model identifier.

    • #38162

      Documented that RuleTargetInput.fromText JSON-encodes its input, and why.

    View on GitHub
  • adaltas/node-csv

    CSV parsing and generation for Node.js · JavaScript

    4.3k GitHub stars2 merged

    Parsing and stringify

    • #483

      trim now handles every Unicode whitespace character (such as the full-width space), with no slowdown on plain ASCII data.

    • #484

      New cast.null and cast.undefined options for stringify, so output can emit unquoted NULL or \N.

    View on GitHub
  • aws-powertools/powertools-lambda-python

    Observability and utilities for AWS Lambda · Python

    3.3k GitHub stars2 merged

    Tracer and metrics

    • #8367

      The tracer's in_subsegment_async was typed as a synchronous context manager, so mypy rejected correct async with code. The type is fixed.

    • #8403

      set_default_dimensions logged spurious "overwrite" warnings on the first call and on every flush after. Both causes are fixed.

    View on GitHub
  • aws-powertools/powertools-lambda-typescript

    Observability and utilities for AWS Lambda · TypeScript

    1.8k GitHub stars14 merged

    Concurrency on Lambda Managed Instances

    • #5444

      Overlapping invocations closed each other's X-Ray subsegments in the Middy tracer middleware. Segments are now stored per request.

    • #5543

      One invocation starting to buffer logs wiped the buffered logs of every other in-flight invocation. The log buffer is now scoped per invocation.

    • #5544

      A debug-sampling decision in one invocation changed the log level for all concurrent invocations. The effective log level is now scoped per invocation.

    • #5548

      Consolidated the per-invocation log level into the existing invocation store, following maintainer review.

    Logger and metrics

    • #5227

      critical() did not flush the log buffer the way error() does, so the most severe failures lost their debug context. Any level at or above ERROR now flushes.

    • #5228

      setDefaultDimensions() ignored regular dimensions when checking CloudWatch's dimension limit, so metrics could be silently dropped.

    • #5229

      Dimension limits are now enforced per dimension set, the way CloudWatch EMF counts them, instead of double-counting overlapping keys.

    Event handler (HTTP)

    • #5257

      Single-value headers that contain commas, such as Date and Expires, were split into multiple values on API Gateway v1 and ALB. Only known multi-value headers are split now.

    • #5267

      Valid CORS preflight requests without Access-Control-Request-Headers were rejected. They are now accepted, per the Fetch standard.

    • #5310

      The HTTP metrics middleware pulled the optional metrics package into every bundle, crashing functions at init when it was not installed. The runtime import is removed.

    Parser, idempotency, commons

    • #5295

      LRUCache with a max size of 0 permanently kept one stale entry after eviction.

    • #5666

      Malformed base64 in Kinesis events made safeParse throw instead of returning a failure, and surfaced as an unhandled rejection through parse().

    • #5717

      If a handler mutated its input, idempotency completion and cleanup targeted a different key, leaving the record stuck in progress. Record identity is now fixed when the operation starts.

    • #5749

      The REST API event schema stripped the custom context returned by a Lambda authorizer, which is usually the reason to use one.

    View on GitHub
  • aws-amplify/amplify-ui

    Authentication UI components · TypeScript

    1.1k GitHub stars3 merged

    Authenticator

    • #7083

      Signing out before the Authenticator rendered caused every prop passed to it to be ignored.

    • #7111

      A sign out during the initial current-user check was dropped, leaving a stale signed-in user.

    CI

    • #7086

      The issue-labeling workflow failed on every community comment on a pull request.

    View on GitHub
  • hetznercloud/hcloud-cloud-controller-manager

    Kubernetes cloud controller for Hetzner Cloud · Go

    931 GitHub stars1 merged

    Helm chart

    • #1258

      The Helm chart now ships non-root, read-only security defaults that pass the Pod Security restricted profile.

    View on GitHub
  • aws/graph-explorer

    Visual explorer for graph databases · TypeScript

    483 GitHub stars3 merged

    Queries and engine compatibility

    • #1800

      The neighbor count query crashed on Neptune 1.3.x. It is rewritten to work on both 1.3 and 1.4 engines.

    • #1769

      SPARQL queries using the ?s ?p ?o shorthand now render their results as a graph.

    • #1856

      Migrated class internals to runtime-enforced # private fields.

    View on GitHub
  • chaynHQ/bloom-frontend

    Chayn's platform supporting survivors of abuse · TypeScript

    72 GitHub stars3 merged

    Maintenance

    • #1823

      Content fetch errors are now reported to Rollbar instead of being lost in the console.

    • #1824

      Replaced hardcoded colors in a form with theme tokens.

    • #1825

      Replaced the Twitter icon with X in the footer, including labels and analytics.

    View on GitHub
View all merged pull requests on GitHub

05.Contact

LinkedIn is the most reliable way to reach me. I am also on the networks below, and my resume is available as a PDF.