I am Faruk Aydin, a software engineer completing a Bachelor of Science in Computer Science at Southern New Hampshire University. I spent the last several years at startups shipping production software, and this degree is the formal grounding behind that work — algorithms, data structures, disciplined software design, secure coding, and the practice of communicating technical decisions for review. This capstone and ePortfolio are where those two halves meet: production experience sharpened by academic rigor.
I chose to build the entire ePortfolio around Fiyope, a live social platform I designed and deployed at fiyope.com. The artifact across all three enhancement categories is the same piece of real software — the Fiyope feed microservice — which I enhanced in three distinct, compounding passes. Using a production artifact meant every decision had to be defensible under real constraints: a real message bus delivering events, a real Redis instance backing sorted-set pagination, a real PostgreSQL schema already migrated multiple times. The enhancements had to be correct, not just submittable.
Collaborating in a Team Environment
Collaboration has been the central engineering discipline at every startup I have worked at — not a procedural step, but the place where design actually gets decided. Code review in particular is where reasoning gets tested against reviewers who come at the problem from different angles: backend engineers worried about downstream load, infrastructure operators worried about failure modes, frontend consumers worried about contract stability. That pressure shapes how I write code. Interfaces become public contracts. Commits become arguments. Comments exist for the next person rather than for me.
The enhancements in this portfolio carry that posture forward. When I added transaction boundaries in Enhancement Three, I did not just wrap the handlers — I wrote comments distinguishing single-statement atomic operations from multi-step handlers, so the next engineer would not have to reconstruct the reasoning. The code-review video for Milestone One is the same idea in a different medium: a walkthrough built so another engineer can watch once, see what the feed service does and where it is weak, and act on the plan without a second meeting.
Communicating with Stakeholders
Not every audience is another engineer. Part of the reason I
started Fiyope was to live with the full range of stakeholders
a real product has: users, investors, operators, and myself at
three in the morning debugging an incident. For technical
audiences I lean on precise structural communication — ASCII
architecture diagrams, complexity tables that name the
operation and its Big-O, index inventories that pair every
index with the query it accelerates. For non-technical
audiences I lean on the why — what user-visible
problem this solves, what the failure mode looks like when it
goes wrong, what the trade-off costs. The algorithms narrative
explains the cursor redesign both as "a two-command race
condition between ZREVRANK and
ZREVRANGEBYSCORE" and as "the bug where users saw
the same post twice or skipped the first post of the next
page."
Data Structures and Algorithms
Enhancement Two is the explicit DSA showcase, but algorithmic reasoning threads through every artifact. The program — CS 260 and CS 340 in particular — gave me the vocabulary to name the patterns I had been using intuitively, and to recognize the ones I was using poorly.
-
Set-based relevance scoring. Replaced
Array.filter + Array.includes(O(n·m)) with aSet.haslookup (O(n+m)) — a three-line change whose impact compounds across every audience member during fan-out. -
Score-based cursor pagination. Collapsed a
non-atomic two-command sequence into a single atomic
ZREVRANGEBYSCOREwith an exclusive score bound, eliminating a concurrency bug that caused duplicate or skipped items between pages. -
Bounded fan-out. Replaced unbounded pipeline
amplification with a deferred
DeferredFanOutRequestedEventprocessed by a background worker — converting worst-case O(A·(t+i)) on the feed service to O(1) while guaranteeing eventual delivery. -
GIN indexes for array overlap. Added GIN
indexes on
userEntity.interestsandactionEntity.topicsto support the&&operator, replacing sequential scans with posting-list intersections.
Software Engineering and Databases
Enhancement One (software design) and Enhancement Three
(databases) are where I demonstrate the structural thinking I
believe separates an engineer from a coder. Enhancement One
decomposed a 257-line monolithic
FeedManagerService into four services with clear
single responsibilities, a domain-specific error hierarchy,
structured logging, and a 36-test vitest suite across four
files. Enhancement Three moved down a layer to the PostgreSQL
schema: GIN and composite B-tree indexes tied to specific
queries, NOT NULL and CHECK
constraints that encode the application's enums at the storage
layer, a UNIQUE constraint on
(followerEntity.src, followerEntity.dst) to defend
against at-least-once event redelivery, reversible
down-migrations for every migration file, and PostgreSQL
transactions around multi-step event handlers using
AsyncLocalStorage-based context propagation. I
also found and fixed a subtle semantic bug in the
getUserFeed subquery where the "followed-by-user"
filter was effectively a no-op because the subquery was not
scoped to the current user — a good reminder that performance
work and correctness work are inseparable.
Security
Security was not an add-on — it was woven through each
enhancement as a defense-in-depth posture rather than a
checklist. CS 405 gave me the vocabulary to articulate this
formally. Specific improvements: removal of credential-leaking
debug logs that printed environment variables; typed validation
at every external boundary (InvalidCursorError
for malformed cursors, guarded new Ulid() on
event-bus payloads, per-command
pipeline.exec() result checking);
CHECK and UNIQUE constraints as
storage-layer defense against bad application state; a
data-access-control bug fix in getUserFeed; and
the fan-out threshold doubling as a denial-of-service
amplification mitigation. None of these were retrofitted after
the fact — they emerged from reading the code with the
adversarial question in mind: what is the worst thing that could happen here, and what is
the cheapest way to make it impossible?
Career Direction
My goal leaving this program is to use its foundation to start my own company. I spent most of my career so far building for other people's product visions, and the enhancements in this ePortfolio represent the kind of engineering I want to do next: deep, deliberate, and owned end-to-end. What follows — the code review, the three enhancement narratives, and the enhanced artifacts themselves — is the best evidence I can offer that I am ready to do it.