[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"summary-scale-compose-nav-with-nested-graphs-and-state-lay-summary":3,"summaries-facets-categories":527,"summary-related-scale-compose-nav-with-nested-graphs-and-state-lay-summary":4932},{"id":4,"title":5,"ai":6,"body":13,"categories":499,"created_at":501,"date_modified":501,"description":34,"extension":502,"faq":501,"featured":503,"kicker_label":501,"meta":504,"navigation":509,"path":510,"published_at":511,"question":501,"scraped_at":512,"seo":513,"sitemap":514,"source_id":515,"source_name":516,"source_type":517,"source_url":518,"stem":519,"tags":520,"thumbnail_url":501,"tldr":524,"tweet":501,"unknown_tags":525,"__hash__":526},"summaries\u002Fsummaries\u002Fscale-compose-nav-with-nested-graphs-and-state-lay-summary.md","Scale Compose Nav with Nested Graphs and State Layers",{"provider":7,"model":8,"input_tokens":9,"output_tokens":10,"processing_time_ms":11,"cost_usd":12},"openrouter","x-ai\u002Fgrok-4.1-fast",6768,1765,14725,0.00221345,{"type":14,"value":15,"toc":493},"minimark",[16,21,25,28,106,109,185,188,191,224,228,231,234,259,288,300,303,307,314,370,373,402,405,409,432,471,489],[17,18,20],"h2",{"id":19},"nested-graphs-isolate-features-and-simplify-reasoning","Nested Graphs Isolate Features and Simplify Reasoning",[22,23,24],"p",{},"Flat NavHosts with dozens of composables become unmaintainable—files bloat, flows interfere, back stacks confuse, and refactors risk breakage. Instead, centralize ownership in one root NavHost that only defines major app flows (e.g., auth, main), then nest separate graphs per feature.",[22,26,27],{},"Root setup:",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-kotlin shiki shiki-themes github-light github-dark","@Composable\nfun AppNavHost(navController: NavHostController) {\n    NavHost(\n        navController = navController,\n        startDestination = Graph.AUTH,\n        route = Graph.ROOT\n    ) {\n        authNavGraph(navController)\n        mainNavGraph(navController)\n    }\n}\n","kotlin","",[36,37,38,46,52,58,64,70,76,82,88,94,100],"code",{"__ignoreMap":34},[39,40,43],"span",{"class":41,"line":42},"line",1,[39,44,45],{},"@Composable\n",[39,47,49],{"class":41,"line":48},2,[39,50,51],{},"fun AppNavHost(navController: NavHostController) {\n",[39,53,55],{"class":41,"line":54},3,[39,56,57],{},"    NavHost(\n",[39,59,61],{"class":41,"line":60},4,[39,62,63],{},"        navController = navController,\n",[39,65,67],{"class":41,"line":66},5,[39,68,69],{},"        startDestination = Graph.AUTH,\n",[39,71,73],{"class":41,"line":72},6,[39,74,75],{},"        route = Graph.ROOT\n",[39,77,79],{"class":41,"line":78},7,[39,80,81],{},"    ) {\n",[39,83,85],{"class":41,"line":84},8,[39,86,87],{},"        authNavGraph(navController)\n",[39,89,91],{"class":41,"line":90},9,[39,92,93],{},"        mainNavGraph(navController)\n",[39,95,97],{"class":41,"line":96},10,[39,98,99],{},"    }\n",[39,101,103],{"class":41,"line":102},11,[39,104,105],{},"}\n",[22,107,108],{},"Feature graphs group related screens:",[29,110,112],{"className":31,"code":111,"language":33,"meta":34,"style":34},"fun NavGraphBuilder.authNavGraph(navController: NavHostController) {\n    navigation(startDestination = \"login\", route = Graph.AUTH) {\n        composable(\"login\") {\n            LoginScreen(\n                onLoginSuccess = {\n                    navController.navigate(Graph.MAIN) {\n                        popUpTo(Graph.AUTH) { inclusive = true }\n                    }\n                }\n            )\n        }\n        \u002F\u002F signup composable...\n    }\n}\n",[36,113,114,119,124,129,134,139,144,149,154,159,164,169,175,180],{"__ignoreMap":34},[39,115,116],{"class":41,"line":42},[39,117,118],{},"fun NavGraphBuilder.authNavGraph(navController: NavHostController) {\n",[39,120,121],{"class":41,"line":48},[39,122,123],{},"    navigation(startDestination = \"login\", route = Graph.AUTH) {\n",[39,125,126],{"class":41,"line":54},[39,127,128],{},"        composable(\"login\") {\n",[39,130,131],{"class":41,"line":60},[39,132,133],{},"            LoginScreen(\n",[39,135,136],{"class":41,"line":66},[39,137,138],{},"                onLoginSuccess = {\n",[39,140,141],{"class":41,"line":72},[39,142,143],{},"                    navController.navigate(Graph.MAIN) {\n",[39,145,146],{"class":41,"line":78},[39,147,148],{},"                        popUpTo(Graph.AUTH) { inclusive = true }\n",[39,150,151],{"class":41,"line":84},[39,152,153],{},"                    }\n",[39,155,156],{"class":41,"line":90},[39,157,158],{},"                }\n",[39,160,161],{"class":41,"line":96},[39,162,163],{},"            )\n",[39,165,166],{"class":41,"line":102},[39,167,168],{},"        }\n",[39,170,172],{"class":41,"line":171},12,[39,173,174],{},"        \u002F\u002F signup composable...\n",[39,176,178],{"class":41,"line":177},13,[39,179,99],{},[39,181,183],{"class":41,"line":182},14,[39,184,105],{},[22,186,187],{},"This keeps graphs small, prevents cross-flow pollution, and makes back stack behavior predictable—e.g., clear auth stack on login success.",[22,189,190],{},"Centralize routes with sealed classes to avoid string typos:",[29,192,194],{"className":31,"code":193,"language":33,"meta":34,"style":34},"sealed class AppScreen(val route: String) {\n    data object Home : AppScreen(\"home\")\n    data object UserDetails : AppScreen(\"user\u002F{userId}\") {\n        fun createRoute(userId: Long) = \"user\u002F$userId\"\n    }\n}\n",[36,195,196,201,206,211,216,220],{"__ignoreMap":34},[39,197,198],{"class":41,"line":42},[39,199,200],{},"sealed class AppScreen(val route: String) {\n",[39,202,203],{"class":41,"line":48},[39,204,205],{},"    data object Home : AppScreen(\"home\")\n",[39,207,208],{"class":41,"line":54},[39,209,210],{},"    data object UserDetails : AppScreen(\"user\u002F{userId}\") {\n",[39,212,213],{"class":41,"line":60},[39,214,215],{},"        fun createRoute(userId: Long) = \"user\u002F$userId\"\n",[39,217,218],{"class":41,"line":66},[39,219,99],{},[39,221,222],{"class":41,"line":72},[39,223,105],{},[17,225,227],{"id":226},"layered-state-keeps-navigation-stable","Layered State Keeps Navigation Stable",[22,229,230],{},"Navigation only handles movement and small primitives (IDs, filters, flags)—never full objects, which fail serialization and stale quickly. Load data in destinations.",[22,232,233],{},"Three layers:",[235,236,237,249],"ol",{},[238,239,240,244,245,248],"li",{},[241,242,243],"strong",{},"Nav args",": Primitives only, e.g., ",[36,246,247],{},"navController.navigate(UserDetails.createRoute(42L))",".",[238,250,251,254,255,258],{},[241,252,253],{},"ViewModels",": Screen\u002Fbusiness state with API calls, loading\u002Ferrors. Extract args via ",[36,256,257],{},"SavedStateHandle",":",[29,260,262],{"className":31,"code":261,"language":33,"meta":34,"style":34},"class UserDetailsViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {\n    private val userId: Long = checkNotNull(savedStateHandle[\"userId\"])\n    val uiState = MutableStateFlow(UserDetailsUiState())\n    \u002F\u002F Load data in init...\n}\n",[36,263,264,269,274,279,284],{"__ignoreMap":34},[39,265,266],{"class":41,"line":42},[39,267,268],{},"class UserDetailsViewModel(savedStateHandle: SavedStateHandle) : ViewModel() {\n",[39,270,271],{"class":41,"line":48},[39,272,273],{},"    private val userId: Long = checkNotNull(savedStateHandle[\"userId\"])\n",[39,275,276],{"class":41,"line":54},[39,277,278],{},"    val uiState = MutableStateFlow(UserDetailsUiState())\n",[39,280,281],{"class":41,"line":60},[39,282,283],{},"    \u002F\u002F Load data in init...\n",[39,285,286],{"class":41,"line":66},[39,287,105],{},[235,289,290],{"start":54},[238,291,292,295,296,299],{},[241,293,294],{},"Composable state",": UI-only like ",[36,297,298],{},"rememberSaveable { mutableStateOf(\"\") }"," for inputs\u002Ftoggles.",[22,301,302],{},"This separation makes nav robust: pass ID, fetch fresh data, avoid fragile deep passing.",[17,304,306],{"id":305},"route-level-wiring-and-tab-polish","Route-Level Wiring and Tab Polish",[22,308,309,310,313],{},"Avoid scattering ",[36,311,312],{},"NavController"," in leaf UI—pass lambdas from route composables for reusable, testable screens:",[29,315,317],{"className":31,"code":316,"language":33,"meta":34,"style":34},"@Composable\nfun HomeRoute(navController: NavHostController) {\n    HomeScreen(\n        onOpenSettings = { navController.navigate(\"settings\") },\n        onOpenUser = { id -> navController.navigate(\"user\u002F$id\") }\n    )\n}\n@Composable\nfun HomeScreen(onOpenSettings: () -> Unit, onOpenUser: (Long) -> Unit) {\n    \u002F\u002F Buttons call lambdas\n}\n",[36,318,319,323,328,333,338,343,348,352,356,361,366],{"__ignoreMap":34},[39,320,321],{"class":41,"line":42},[39,322,45],{},[39,324,325],{"class":41,"line":48},[39,326,327],{},"fun HomeRoute(navController: NavHostController) {\n",[39,329,330],{"class":41,"line":54},[39,331,332],{},"    HomeScreen(\n",[39,334,335],{"class":41,"line":60},[39,336,337],{},"        onOpenSettings = { navController.navigate(\"settings\") },\n",[39,339,340],{"class":41,"line":66},[39,341,342],{},"        onOpenUser = { id -> navController.navigate(\"user\u002F$id\") }\n",[39,344,345],{"class":41,"line":72},[39,346,347],{},"    )\n",[39,349,350],{"class":41,"line":78},[39,351,105],{},[39,353,354],{"class":41,"line":84},[39,355,45],{},[39,357,358],{"class":41,"line":90},[39,359,360],{},"fun HomeScreen(onOpenSettings: () -> Unit, onOpenUser: (Long) -> Unit) {\n",[39,362,363],{"class":41,"line":96},[39,364,365],{},"    \u002F\u002F Buttons call lambdas\n",[39,367,368],{"class":41,"line":102},[39,369,105],{},[22,371,372],{},"For bottom tabs, use this nav spec to avoid duplicates, save\u002Frestore state:",[29,374,376],{"className":31,"code":375,"language":33,"meta":34,"style":34},"navController.navigate(route) {\n    popUpTo(navController.graph.startDestinationId) { saveState = true }\n    launchSingleTop = true\n    restoreState = true\n}\n",[36,377,378,383,388,393,398],{"__ignoreMap":34},[39,379,380],{"class":41,"line":42},[39,381,382],{},"navController.navigate(route) {\n",[39,384,385],{"class":41,"line":48},[39,386,387],{},"    popUpTo(navController.graph.startDestinationId) { saveState = true }\n",[39,389,390],{"class":41,"line":54},[39,391,392],{},"    launchSingleTop = true\n",[39,394,395],{"class":41,"line":60},[39,396,397],{},"    restoreState = true\n",[39,399,400],{"class":41,"line":66},[39,401,105],{},[22,403,404],{},"This preserves tab state across switches, polishing UX.",[17,406,408],{"id":407},"full-stack-ties-it-together","Full Stack Ties It Together",[22,410,411,412,415,416,419,420,423,424,427,428,431],{},"Thin ",[36,413,414],{},"MainActivity"," sets ",[36,417,418],{},"App()"," with ",[36,421,422],{},"rememberNavController()",". ",[36,425,426],{},"AppNavHost"," wires root. Graphs use route sealed interfaces (e.g., ",[36,429,430],{},"AuthDest.Login.route","). UserDetails handles args:",[29,433,435],{"className":31,"code":434,"language":33,"meta":34,"style":34},"composable(\n    route = MainDest.UserDetails.route,\n    arguments = listOf(navArgument(MainDest.UserDetails.ARG) { type = NavType.LongType })\n) { entry ->\n    val userId = entry.arguments?.getLong(MainDest.UserDetails.ARG) ?: return@composable\n    UserDetailsRoute(userId)\n}\n",[36,436,437,442,447,452,457,462,467],{"__ignoreMap":34},[39,438,439],{"class":41,"line":42},[39,440,441],{},"composable(\n",[39,443,444],{"class":41,"line":48},[39,445,446],{},"    route = MainDest.UserDetails.route,\n",[39,448,449],{"class":41,"line":54},[39,450,451],{},"    arguments = listOf(navArgument(MainDest.UserDetails.ARG) { type = NavType.LongType })\n",[39,453,454],{"class":41,"line":60},[39,455,456],{},") { entry ->\n",[39,458,459],{"class":41,"line":66},[39,460,461],{},"    val userId = entry.arguments?.getLong(MainDest.UserDetails.ARG) ?: return@composable\n",[39,463,464],{"class":41,"line":72},[39,465,466],{},"    UserDetailsRoute(userId)\n",[39,468,469],{"class":41,"line":78},[39,470,105],{},[22,472,473,476,477,480,481,484,485,488],{},[36,474,475],{},"UserDetailsRoute"," injects ",[36,478,479],{},"viewModel()",", collects ",[36,482,483],{},"uiState",", passes to pure ",[36,486,487],{},"UserDetailsScreen",". Add screens freely without central chaos.",[490,491,492],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":34,"searchDepth":48,"depth":48,"links":494},[495,496,497,498],{"id":19,"depth":48,"text":20},{"id":226,"depth":48,"text":227},{"id":305,"depth":48,"text":306},{"id":407,"depth":48,"text":408},[500],"Software Engineering",null,"md",false,{"content_references":505,"triage":506},[],{"relevance":60,"novelty":54,"quality":60,"actionability":60,"composite":507,"reasoning":508},3.8,"Category: Software Engineering. The article provides a practical approach to scaling navigation in Jetpack Compose, addressing a common pain point for developers managing complex app architectures. It includes specific code examples and a structured method for implementing nested graphs and layered state, making it actionable for developers looking to improve their navigation systems.",true,"\u002Fsummaries\u002Fscale-compose-nav-with-nested-graphs-and-state-lay-summary","2026-05-01 20:30:17","2026-05-03 17:00:35",{"title":5,"description":34},{"loc":510},"8d5558e87957c77a","Level Up Coding","article","https:\u002F\u002Flevelup.gitconnected.com\u002Fscaling-navigation-in-jetpack-compose-from-simple-apps-to-real-world-architecture-c6cf897f5a58?source=rss----5517fd7b58a6---4","summaries\u002Fscale-compose-nav-with-nested-graphs-and-state-lay-summary",[521,522,523],"coding","software-engineering","dev-productivity","For apps with 20-50 screens, use one root NavHost with nested feature graphs, centralized route objects, and layered state (nav args for IDs, ViewModels for data, composables for UI) to prevent navigation fragility.",[522,523],"CoQb8TCPP-CYo--uyqTWtT_0cvw4T-VgKjS2HCWABR4",[528,531,533,536,538,541,544,547,549,551,553,555,557,559,561,563,566,568,570,572,574,576,578,581,583,585,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,619,621,623,626,628,630,632,634,636,638,640,642,644,646,648,650,652,654,656,658,660,662,664,666,668,670,672,674,676,678,680,682,684,686,688,690,692,694,696,698,700,702,704,706,708,710,712,714,716,718,720,722,724,726,728,730,732,734,736,738,740,742,744,746,748,750,752,754,756,758,760,762,764,766,768,770,772,774,776,778,780,782,784,786,788,790,792,794,796,798,800,802,804,806,808,810,812,814,816,818,820,822,824,826,828,830,832,834,836,838,840,842,844,846,848,850,852,854,856,858,860,862,864,866,868,870,872,874,876,878,880,882,884,886,888,891,893,895,897,899,901,903,905,907,909,911,913,915,917,919,921,923,925,927,929,931,933,935,937,939,941,943,945,947,949,951,953,955,957,959,961,963,965,967,969,971,973,975,978,980,982,984,986,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090,1092,1094,1096,1098,1100,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176,1178,1180,1182,1184,1186,1188,1190,1192,1194,1196,1198,1200,1202,1204,1206,1208,1210,1212,1214,1216,1218,1220,1222,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1254,1256,1258,1260,1262,1264,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296,1298,1300,1302,1304,1306,1308,1310,1312,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1408,1410,1412,1414,1416,1418,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554,1556,1558,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1600,1602,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706,1708,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1784,1786,1788,1790,1792,1794,1796,1798,1800,1802,1804,1806,1808,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1934,1936,1938,1940,1942,1944,1946,1948,1950,1952,1954,1956,1958,1960,1962,1964,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010,2012,2014,2016,2018,2020,2022,2024,2026,2028,2030,2032,2034,2036,2038,2040,2042,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2276,2278,2280,2282,2284,2286,2288,2290,2292,2294,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492,2494,2496,2498,2500,2502,2504,2506,2508,2510,2512,2514,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564,2566,2568,2570,2572,2574,2576,2578,2580,2582,2584,2586,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812,2814,2816,2818,2820,2822,2824,2826,2828,2830,2832,2834,2836,2838,2840,2842,2844,2846,2848,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096,3098,3100,3102,3104,3106,3108,3110,3112,3114,3116,3118,3120,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154,3156,3158,3160,3162,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224,3226,3228,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256,3258,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346,3348,3350,3352,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3374,3376,3378,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410,3412,3414,3416,3418,3420,3422,3424,3426,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470,3472,3474,3476,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516,3518,3520,3522,3524,3526,3528,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632,3634,3636,3638,3640,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696,3698,3700,3702,3704,3706,3708,3710,3712,3714,3716,3718,3720,3722,3724,3726,3728,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770,3772,3774,3776,3778,3780,3782,3784,3786,3788,3790,3792,3794,3796,3798,3800,3802,3804,3806,3808,3810,3812,3814,3816,3818,3820,3822,3824,3826,3828,3830,3832,3834,3836,3838,3840,3842,3844,3846,3848,3850,3852,3854,3856,3858,3860,3862,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900,3902,3904,3906,3908,3910,3912,3914,3916,3918,3920,3922,3924,3926,3928,3930,3932,3934,3936,3938,3940,3942,3944,3946,3948,3950,3952,3954,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012,4014,4016,4018,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042,4044,4046,4048,4050,4052,4054,4056,4058,4060,4062,4064,4066,4068,4070,4072,4074,4076,4078,4080,4082,4084,4086,4088,4090,4092,4094,4096,4098,4100,4102,4104,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124,4126,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168,4170,4172,4174,4176,4178,4180,4182,4184,4186,4188,4190,4192,4194,4196,4198,4200,4202,4204,4206,4208,4210,4212,4214,4216,4218,4220,4222,4224,4226,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278,4280,4282,4284,4286,4288,4290,4292,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340,4342,4344,4346,4348,4350,4352,4354,4356,4358,4360,4362,4364,4366,4368,4370,4372,4374,4376,4378,4380,4382,4384,4386,4388,4390,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412,4414,4416,4418,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484,4486,4488,4490,4492,4494,4496,4498,4500,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564,4566,4568,4570,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620,4622,4624,4626,4628,4630,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670,4672,4674,4676,4678,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698,4700,4702,4704,4706,4708,4710,4712,4714,4716,4718,4720,4722,4724,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748,4750,4752,4754,4756,4758,4760,4762,4764,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784,4786,4788,4790,4792,4794,4796,4798,4800,4802,4804,4806,4808,4810,4812,4814,4816,4818,4820,4822,4824,4826,4828,4830,4832,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856,4858,4860,4862,4864,4866,4868,4870,4872,4874,4876,4878,4880,4882,4884,4886,4888,4890,4892,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914,4916,4918,4920,4922,4924,4926,4928,4930],{"categories":529},[530],"Business & SaaS",{"categories":532},[530],{"categories":534},[535],"AI News & Trends",{"categories":537},[],{"categories":539},[540],"AI Automation",{"categories":542},[543],"Marketing & Growth",{"categories":545},[546],"Design & Frontend",{"categories":548},[500],{"categories":550},[540],{"categories":552},[],{"categories":554},[546],{"categories":556},[546],{"categories":558},[540],{"categories":560},[546],{"categories":562},[546],{"categories":564},[565],"AI & LLMs",{"categories":567},[546],{"categories":569},[546],{"categories":571},[],{"categories":573},[546],{"categories":575},[546],{"categories":577},[565],{"categories":579},[580],"Developer Productivity",{"categories":582},[565],{"categories":584},[565],{"categories":586},[565],{"categories":588},[535],{"categories":590},[565],{"categories":592},[540],{"categories":594},[530],{"categories":596},[535],{"categories":598},[543],{"categories":600},[],{"categories":602},[],{"categories":604},[540],{"categories":606},[540],{"categories":608},[540],{"categories":610},[543],{"categories":612},[565],{"categories":614},[580],{"categories":616},[535],{"categories":618},[],{"categories":620},[],{"categories":622},[],{"categories":624},[625],"Data Science & Visualization",{"categories":627},[],{"categories":629},[540],{"categories":631},[500],{"categories":633},[540],{"categories":635},[540],{"categories":637},[565],{"categories":639},[543],{"categories":641},[540],{"categories":643},[],{"categories":645},[],{"categories":647},[],{"categories":649},[546],{"categories":651},[546],{"categories":653},[540],{"categories":655},[543],{"categories":657},[580],{"categories":659},[546],{"categories":661},[565],{"categories":663},[500],{"categories":665},[565],{"categories":667},[],{"categories":669},[540],{"categories":671},[565],{"categories":673},[580],{"categories":675},[580],{"categories":677},[],{"categories":679},[543],{"categories":681},[530],{"categories":683},[565],{"categories":685},[530],{"categories":687},[530],{"categories":689},[540],{"categories":691},[543],{"categories":693},[540],{"categories":695},[530],{"categories":697},[540],{"categories":699},[546],{"categories":701},[565],{"categories":703},[546],{"categories":705},[565],{"categories":707},[530],{"categories":709},[565],{"categories":711},[543],{"categories":713},[],{"categories":715},[565],{"categories":717},[530],{"categories":719},[],{"categories":721},[535],{"categories":723},[500],{"categories":725},[],{"categories":727},[565],{"categories":729},[546],{"categories":731},[565],{"categories":733},[546],{"categories":735},[],{"categories":737},[540],{"categories":739},[],{"categories":741},[],{"categories":743},[],{"categories":745},[565],{"categories":747},[],{"categories":749},[565],{"categories":751},[565],{"categories":753},[546],{"categories":755},[565],{"categories":757},[580],{"categories":759},[540],{"categories":761},[543],{"categories":763},[580],{"categories":765},[580],{"categories":767},[580],{"categories":769},[543],{"categories":771},[543],{"categories":773},[565],{"categories":775},[565],{"categories":777},[546],{"categories":779},[530],{"categories":781},[546],{"categories":783},[500],{"categories":785},[530],{"categories":787},[530],{"categories":789},[530],{"categories":791},[546],{"categories":793},[],{"categories":795},[],{"categories":797},[565],{"categories":799},[565],{"categories":801},[500],{"categories":803},[565],{"categories":805},[565],{"categories":807},[],{"categories":809},[565],{"categories":811},[565],{"categories":813},[],{"categories":815},[565],{"categories":817},[535],{"categories":819},[535],{"categories":821},[],{"categories":823},[],{"categories":825},[543],{"categories":827},[543],{"categories":829},[500],{"categories":831},[565],{"categories":833},[],{"categories":835},[],{"categories":837},[540],{"categories":839},[565],{"categories":841},[565],{"categories":843},[],{"categories":845},[565,530],{"categories":847},[565],{"categories":849},[],{"categories":851},[565],{"categories":853},[565],{"categories":855},[],{"categories":857},[],{"categories":859},[540],{"categories":861},[565],{"categories":863},[565],{"categories":865},[540],{"categories":867},[565],{"categories":869},[],{"categories":871},[],{"categories":873},[565],{"categories":875},[],{"categories":877},[565],{"categories":879},[565],{"categories":881},[],{"categories":883},[540],{"categories":885},[546],{"categories":887},[],{"categories":889},[540,890],"DevOps & Cloud",{"categories":892},[565],{"categories":894},[540],{"categories":896},[565],{"categories":898},[],{"categories":900},[],{"categories":902},[],{"categories":904},[],{"categories":906},[565],{"categories":908},[540],{"categories":910},[],{"categories":912},[540],{"categories":914},[],{"categories":916},[565],{"categories":918},[],{"categories":920},[],{"categories":922},[],{"categories":924},[],{"categories":926},[540],{"categories":928},[546],{"categories":930},[565],{"categories":932},[543],{"categories":934},[535],{"categories":936},[530],{"categories":938},[580],{"categories":940},[],{"categories":942},[540],{"categories":944},[540],{"categories":946},[565],{"categories":948},[],{"categories":950},[],{"categories":952},[],{"categories":954},[540],{"categories":956},[],{"categories":958},[540],{"categories":960},[540],{"categories":962},[535],{"categories":964},[540],{"categories":966},[565],{"categories":968},[],{"categories":970},[565],{"categories":972},[],{"categories":974},[535],{"categories":976},[540,977],"Product Strategy",{"categories":979},[500],{"categories":981},[890],{"categories":983},[977],{"categories":985},[565],{"categories":987},[540],{"categories":989},[],{"categories":991},[535],{"categories":993},[535],{"categories":995},[540],{"categories":997},[],{"categories":999},[540],{"categories":1001},[565],{"categories":1003},[565],{"categories":1005},[580],{"categories":1007},[565],{"categories":1009},[],{"categories":1011},[565,500],{"categories":1013},[535],{"categories":1015},[565],{"categories":1017},[535],{"categories":1019},[540],{"categories":1021},[535],{"categories":1023},[],{"categories":1025},[500],{"categories":1027},[530],{"categories":1029},[],{"categories":1031},[540],{"categories":1033},[540],{"categories":1035},[540],{"categories":1037},[540],{"categories":1039},[530],{"categories":1041},[546],{"categories":1043},[543],{"categories":1045},[],{"categories":1047},[540],{"categories":1049},[],{"categories":1051},[535],{"categories":1053},[535],{"categories":1055},[535],{"categories":1057},[540],{"categories":1059},[535],{"categories":1061},[565],{"categories":1063},[580],{"categories":1065},[565],{"categories":1067},[500],{"categories":1069},[565,580],{"categories":1071},[580],{"categories":1073},[580],{"categories":1075},[580],{"categories":1077},[580],{"categories":1079},[565],{"categories":1081},[],{"categories":1083},[],{"categories":1085},[543],{"categories":1087},[],{"categories":1089},[565],{"categories":1091},[580],{"categories":1093},[565],{"categories":1095},[546],{"categories":1097},[500],{"categories":1099},[],{"categories":1101},[565],{"categories":1103},[580],{"categories":1105},[543],{"categories":1107},[535],{"categories":1109},[500],{"categories":1111},[565],{"categories":1113},[],{"categories":1115},[500],{"categories":1117},[546],{"categories":1119},[530],{"categories":1121},[530],{"categories":1123},[],{"categories":1125},[546],{"categories":1127},[530],{"categories":1129},[535],{"categories":1131},[580],{"categories":1133},[540],{"categories":1135},[540],{"categories":1137},[565],{"categories":1139},[565],{"categories":1141},[535],{"categories":1143},[535],{"categories":1145},[580],{"categories":1147},[535],{"categories":1149},[],{"categories":1151},[977],{"categories":1153},[540],{"categories":1155},[535],{"categories":1157},[535],{"categories":1159},[535],{"categories":1161},[565],{"categories":1163},[540],{"categories":1165},[540],{"categories":1167},[530],{"categories":1169},[530],{"categories":1171},[565],{"categories":1173},[535],{"categories":1175},[],{"categories":1177},[565],{"categories":1179},[530],{"categories":1181},[540],{"categories":1183},[540],{"categories":1185},[540],{"categories":1187},[546],{"categories":1189},[540],{"categories":1191},[580],{"categories":1193},[535],{"categories":1195},[535],{"categories":1197},[535],{"categories":1199},[535],{"categories":1201},[535],{"categories":1203},[],{"categories":1205},[],{"categories":1207},[580],{"categories":1209},[535],{"categories":1211},[535],{"categories":1213},[535],{"categories":1215},[],{"categories":1217},[565],{"categories":1219},[],{"categories":1221},[],{"categories":1223},[546],{"categories":1225},[530],{"categories":1227},[],{"categories":1229},[535],{"categories":1231},[540],{"categories":1233},[540],{"categories":1235},[540],{"categories":1237},[543],{"categories":1239},[540],{"categories":1241},[],{"categories":1243},[535],{"categories":1245},[535],{"categories":1247},[565],{"categories":1249},[],{"categories":1251},[543],{"categories":1253},[543],{"categories":1255},[565],{"categories":1257},[535],{"categories":1259},[530],{"categories":1261},[500],{"categories":1263},[565],{"categories":1265},[],{"categories":1267},[565],{"categories":1269},[565],{"categories":1271},[500],{"categories":1273},[565],{"categories":1275},[565],{"categories":1277},[565],{"categories":1279},[543],{"categories":1281},[535],{"categories":1283},[565],{"categories":1285},[565],{"categories":1287},[535],{"categories":1289},[540],{"categories":1291},[580],{"categories":1293},[530],{"categories":1295},[565],{"categories":1297},[580],{"categories":1299},[580],{"categories":1301},[],{"categories":1303},[543],{"categories":1305},[535],{"categories":1307},[535],{"categories":1309},[580],{"categories":1311},[540],{"categories":1313},[540],{"categories":1315},[540],{"categories":1317},[540],{"categories":1319},[546],{"categories":1321},[565],{"categories":1323},[565],{"categories":1325},[977],{"categories":1327},[565],{"categories":1329},[565],{"categories":1331},[540],{"categories":1333},[530],{"categories":1335},[543],{"categories":1337},[],{"categories":1339},[530],{"categories":1341},[530],{"categories":1343},[],{"categories":1345},[546],{"categories":1347},[565],{"categories":1349},[],{"categories":1351},[],{"categories":1353},[535],{"categories":1355},[535],{"categories":1357},[535],{"categories":1359},[535],{"categories":1361},[],{"categories":1363},[535],{"categories":1365},[565],{"categories":1367},[565],{"categories":1369},[],{"categories":1371},[535],{"categories":1373},[535],{"categories":1375},[530],{"categories":1377},[565],{"categories":1379},[],{"categories":1381},[],{"categories":1383},[535],{"categories":1385},[535],{"categories":1387},[535],{"categories":1389},[565],{"categories":1391},[535],{"categories":1393},[535],{"categories":1395},[535],{"categories":1397},[535],{"categories":1399},[535],{"categories":1401},[],{"categories":1403},[540],{"categories":1405},[565],{"categories":1407},[543],{"categories":1409},[530],{"categories":1411},[540],{"categories":1413},[565],{"categories":1415},[],{"categories":1417},[543],{"categories":1419},[535],{"categories":1421},[535],{"categories":1423},[535],{"categories":1425},[535],{"categories":1427},[580],{"categories":1429},[500],{"categories":1431},[],{"categories":1433},[565],{"categories":1435},[540],{"categories":1437},[540],{"categories":1439},[540],{"categories":1441},[890],{"categories":1443},[540],{"categories":1445},[565],{"categories":1447},[565],{"categories":1449},[500],{"categories":1451},[890],{"categories":1453},[625],{"categories":1455},[565],{"categories":1457},[625],{"categories":1459},[],{"categories":1461},[543],{"categories":1463},[543],{"categories":1465},[546],{"categories":1467},[890],{"categories":1469},[540],{"categories":1471},[565],{"categories":1473},[565],{"categories":1475},[540],{"categories":1477},[540],{"categories":1479},[540],{"categories":1481},[580],{"categories":1483},[580],{"categories":1485},[540],{"categories":1487},[540],{"categories":1489},[],{"categories":1491},[540],{"categories":1493},[540],{"categories":1495},[565],{"categories":1497},[625],{"categories":1499},[540],{"categories":1501},[540],{"categories":1503},[540],{"categories":1505},[540],{"categories":1507},[530],{"categories":1509},[546],{"categories":1511},[535],{"categories":1513},[500],{"categories":1515},[890],{"categories":1517},[500],{"categories":1519},[625],{"categories":1521},[],{"categories":1523},[500],{"categories":1525},[],{"categories":1527},[],{"categories":1529},[500],{"categories":1531},[565],{"categories":1533},[],{"categories":1535},[],{"categories":1537},[],{"categories":1539},[530],{"categories":1541},[],{"categories":1543},[],{"categories":1545},[625],{"categories":1547},[565],{"categories":1549},[890],{"categories":1551},[565],{"categories":1553},[],{"categories":1555},[540],{"categories":1557},[580],{"categories":1559},[580],{"categories":1561},[543],{"categories":1563},[543],{"categories":1565},[543],{"categories":1567},[890],{"categories":1569},[500],{"categories":1571},[540],{"categories":1573},[530],{"categories":1575},[530],{"categories":1577},[500],{"categories":1579},[546],{"categories":1581},[625],{"categories":1583},[546],{"categories":1585},[],{"categories":1587},[565],{"categories":1589},[540],{"categories":1591},[540],{"categories":1593},[580],{"categories":1595},[540],{"categories":1597},[540],{"categories":1599},[546],{"categories":1601},[546],{"categories":1603},[540],{"categories":1605},[890],{"categories":1607},[565],{"categories":1609},[],{"categories":1611},[543],{"categories":1613},[540],{"categories":1615},[530],{"categories":1617},[540],{"categories":1619},[540],{"categories":1621},[],{"categories":1623},[565],{"categories":1625},[540],{"categories":1627},[540],{"categories":1629},[580],{"categories":1631},[540],{"categories":1633},[565],{"categories":1635},[],{"categories":1637},[540],{"categories":1639},[],{"categories":1641},[546],{"categories":1643},[580],{"categories":1645},[565],{"categories":1647},[500],{"categories":1649},[546],{"categories":1651},[580],{"categories":1653},[625],{"categories":1655},[580],{"categories":1657},[],{"categories":1659},[565],{"categories":1661},[565],{"categories":1663},[977],{"categories":1665},[500],{"categories":1667},[565,540],{"categories":1669},[540],{"categories":1671},[565],{"categories":1673},[540],{"categories":1675},[540,500],{"categories":1677},[540],{"categories":1679},[565],{"categories":1681},[],{"categories":1683},[580],{"categories":1685},[565],{"categories":1687},[540],{"categories":1689},[565],{"categories":1691},[],{"categories":1693},[500],{"categories":1695},[530],{"categories":1697},[540],{"categories":1699},[],{"categories":1701},[625],{"categories":1703},[500],{"categories":1705},[540],{"categories":1707},[500],{"categories":1709},[],{"categories":1711},[540],{"categories":1713},[],{"categories":1715},[540],{"categories":1717},[],{"categories":1719},[],{"categories":1721},[546],{"categories":1723},[580],{"categories":1725},[565],{"categories":1727},[540],{"categories":1729},[],{"categories":1731},[540],{"categories":1733},[500],{"categories":1735},[565],{"categories":1737},[565],{"categories":1739},[500],{"categories":1741},[500],{"categories":1743},[580],{"categories":1745},[530],{"categories":1747},[],{"categories":1749},[565],{"categories":1751},[565],{"categories":1753},[565],{"categories":1755},[540],{"categories":1757},[565],{"categories":1759},[],{"categories":1761},[546],{"categories":1763},[565],{"categories":1765},[540],{"categories":1767},[],{"categories":1769},[565],{"categories":1771},[],{"categories":1773},[565],{"categories":1775},[],{"categories":1777},[],{"categories":1779},[],{"categories":1781},[565],{"categories":1783},[565],{"categories":1785},[565],{"categories":1787},[565],{"categories":1789},[],{"categories":1791},[565],{"categories":1793},[565],{"categories":1795},[565],{"categories":1797},[],{"categories":1799},[565],{"categories":1801},[],{"categories":1803},[543],{"categories":1805},[565],{"categories":1807},[],{"categories":1809},[],{"categories":1811},[],{"categories":1813},[565],{"categories":1815},[535],{"categories":1817},[535],{"categories":1819},[],{"categories":1821},[540],{"categories":1823},[565],{"categories":1825},[],{"categories":1827},[565],{"categories":1829},[565],{"categories":1831},[535],{"categories":1833},[],{"categories":1835},[565],{"categories":1837},[535],{"categories":1839},[540],{"categories":1841},[565],{"categories":1843},[],{"categories":1845},[],{"categories":1847},[],{"categories":1849},[540],{"categories":1851},[540],{"categories":1853},[540],{"categories":1855},[540],{"categories":1857},[565],{"categories":1859},[546],{"categories":1861},[546],{"categories":1863},[540],{"categories":1865},[540],{"categories":1867},[580],{"categories":1869},[977],{"categories":1871},[580],{"categories":1873},[580],{"categories":1875},[565],{"categories":1877},[540],{"categories":1879},[565],{"categories":1881},[580],{"categories":1883},[565],{"categories":1885},[540],{"categories":1887},[540],{"categories":1889},[540],{"categories":1891},[540],{"categories":1893},[540],{"categories":1895},[565],{"categories":1897},[580],{"categories":1899},[580],{"categories":1901},[543],{"categories":1903},[540],{"categories":1905},[],{"categories":1907},[540],{"categories":1909},[],{"categories":1911},[535],{"categories":1913},[565],{"categories":1915},[],{"categories":1917},[530],{"categories":1919},[546],{"categories":1921},[546],{"categories":1923},[540],{"categories":1925},[540],{"categories":1927},[565],{"categories":1929},[565],{"categories":1931},[535],{"categories":1933},[535],{"categories":1935},[890],{"categories":1937},[540],{"categories":1939},[535],{"categories":1941},[],{"categories":1943},[565],{"categories":1945},[540],{"categories":1947},[540],{"categories":1949},[540],{"categories":1951},[540],{"categories":1953},[565],{"categories":1955},[565],{"categories":1957},[565],{"categories":1959},[565],{"categories":1961},[540],{"categories":1963},[540],{"categories":1965},[540],{"categories":1967},[540],{"categories":1969},[],{"categories":1971},[546],{"categories":1973},[565],{"categories":1975},[565],{"categories":1977},[565],{"categories":1979},[],{"categories":1981},[543],{"categories":1983},[],{"categories":1985},[580],{"categories":1987},[],{"categories":1989},[540],{"categories":1991},[580],{"categories":1993},[546],{"categories":1995},[580],{"categories":1997},[],{"categories":1999},[580],{"categories":2001},[580],{"categories":2003},[],{"categories":2005},[546],{"categories":2007},[540],{"categories":2009},[540],{"categories":2011},[580],{"categories":2013},[565],{"categories":2015},[565],{"categories":2017},[],{"categories":2019},[535],{"categories":2021},[],{"categories":2023},[543],{"categories":2025},[],{"categories":2027},[546],{"categories":2029},[535],{"categories":2031},[546],{"categories":2033},[546],{"categories":2035},[546],{"categories":2037},[546],{"categories":2039},[546],{"categories":2041},[546],{"categories":2043},[546],{"categories":2045},[546],{"categories":2047},[546],{"categories":2049},[546],{"categories":2051},[],{"categories":2053},[540],{"categories":2055},[546],{"categories":2057},[565],{"categories":2059},[565],{"categories":2061},[546],{"categories":2063},[546],{"categories":2065},[546],{"categories":2067},[546],{"categories":2069},[546],{"categories":2071},[546],{"categories":2073},[546],{"categories":2075},[565,546],{"categories":2077},[546],{"categories":2079},[546],{"categories":2081},[546],{"categories":2083},[546],{"categories":2085},[],{"categories":2087},[546],{"categories":2089},[546],{"categories":2091},[546],{"categories":2093},[546],{"categories":2095},[546],{"categories":2097},[546],{"categories":2099},[546],{"categories":2101},[546],{"categories":2103},[546],{"categories":2105},[546,565],{"categories":2107},[546],{"categories":2109},[546],{"categories":2111},[],{"categories":2113},[535],{"categories":2115},[],{"categories":2117},[565],{"categories":2119},[],{"categories":2121},[540],{"categories":2123},[890],{"categories":2125},[977],{"categories":2127},[540],{"categories":2129},[540],{"categories":2131},[],{"categories":2133},[540],{"categories":2135},[],{"categories":2137},[540],{"categories":2139},[],{"categories":2141},[],{"categories":2143},[565],{"categories":2145},[565],{"categories":2147},[565],{"categories":2149},[535],{"categories":2151},[535],{"categories":2153},[535],{"categories":2155},[535],{"categories":2157},[],{"categories":2159},[535],{"categories":2161},[],{"categories":2163},[535],{"categories":2165},[565],{"categories":2167},[535],{"categories":2169},[535],{"categories":2171},[535],{"categories":2173},[535],{"categories":2175},[565],{"categories":2177},[535],{"categories":2179},[540],{"categories":2181},[],{"categories":2183},[540],{"categories":2185},[535],{"categories":2187},[565],{"categories":2189},[535],{"categories":2191},[535],{"categories":2193},[535],{"categories":2195},[565],{"categories":2197},[565],{"categories":2199},[565],{"categories":2201},[],{"categories":2203},[],{"categories":2205},[565],{"categories":2207},[535],{"categories":2209},[],{"categories":2211},[565],{"categories":2213},[540],{"categories":2215},[565],{"categories":2217},[540],{"categories":2219},[540],{"categories":2221},[565],{"categories":2223},[],{"categories":2225},[],{"categories":2227},[540],{"categories":2229},[540],{"categories":2231},[540],{"categories":2233},[540],{"categories":2235},[540],{"categories":2237},[540],{"categories":2239},[540],{"categories":2241},[540],{"categories":2243},[],{"categories":2245},[540],{"categories":2247},[540],{"categories":2249},[540],{"categories":2251},[565],{"categories":2253},[565],{"categories":2255},[565],{"categories":2257},[535],{"categories":2259},[565],{"categories":2261},[565],{"categories":2263},[565],{"categories":2265},[540],{"categories":2267},[543],{"categories":2269},[543],{"categories":2271},[543],{"categories":2273},[540],{"categories":2275},[],{"categories":2277},[565],{"categories":2279},[],{"categories":2281},[],{"categories":2283},[565],{"categories":2285},[],{"categories":2287},[540],{"categories":2289},[546],{"categories":2291},[580],{"categories":2293},[625],{"categories":2295},[565],{"categories":2297},[540],{"categories":2299},[546],{"categories":2301},[],{"categories":2303},[540],{"categories":2305},[543,530],{"categories":2307},[540],{"categories":2309},[540],{"categories":2311},[890],{"categories":2313},[500],{"categories":2315},[543],{"categories":2317},[580],{"categories":2319},[565],{"categories":2321},[],{"categories":2323},[565],{"categories":2325},[],{"categories":2327},[565],{"categories":2329},[565],{"categories":2331},[540],{"categories":2333},[],{"categories":2335},[565],{"categories":2337},[540],{"categories":2339},[565],{"categories":2341},[580],{"categories":2343},[540],{"categories":2345},[565],{"categories":2347},[565,580],{"categories":2349},[580],{"categories":2351},[],{"categories":2353},[565],{"categories":2355},[565],{"categories":2357},[565],{"categories":2359},[],{"categories":2361},[],{"categories":2363},[540],{"categories":2365},[543],{"categories":2367},[535],{"categories":2369},[540],{"categories":2371},[565],{"categories":2373},[535],{"categories":2375},[],{"categories":2377},[580],{"categories":2379},[535],{"categories":2381},[],{"categories":2383},[625],{"categories":2385},[543],{"categories":2387},[530],{"categories":2389},[535],{"categories":2391},[565],{"categories":2393},[540],{"categories":2395},[565],{"categories":2397},[540],{"categories":2399},[540],{"categories":2401},[535],{"categories":2403},[580],{"categories":2405},[546],{"categories":2407},[530],{"categories":2409},[565],{"categories":2411},[565],{"categories":2413},[],{"categories":2415},[],{"categories":2417},[565],{"categories":2419},[],{"categories":2421},[565],{"categories":2423},[535],{"categories":2425},[],{"categories":2427},[540],{"categories":2429},[580],{"categories":2431},[535],{"categories":2433},[580],{"categories":2435},[540],{"categories":2437},[565],{"categories":2439},[],{"categories":2441},[540],{"categories":2443},[540],{"categories":2445},[546],{"categories":2447},[540],{"categories":2449},[546],{"categories":2451},[540],{"categories":2453},[540],{"categories":2455},[546],{"categories":2457},[],{"categories":2459},[],{"categories":2461},[546],{"categories":2463},[546],{"categories":2465},[546],{"categories":2467},[500],{"categories":2469},[580],{"categories":2471},[580],{"categories":2473},[540],{"categories":2475},[535],{"categories":2477},[580],{"categories":2479},[580],{"categories":2481},[543],{"categories":2483},[546],{"categories":2485},[540],{"categories":2487},[540],{"categories":2489},[565],{"categories":2491},[580],{"categories":2493},[565],{"categories":2495},[],{"categories":2497},[890],{"categories":2499},[977],{"categories":2501},[],{"categories":2503},[],{"categories":2505},[540],{"categories":2507},[535],{"categories":2509},[543],{"categories":2511},[543],{"categories":2513},[625],{"categories":2515},[546],{"categories":2517},[625],{"categories":2519},[625],{"categories":2521},[540],{"categories":2523},[],{"categories":2525},[],{"categories":2527},[625],{"categories":2529},[500],{"categories":2531},[565],{"categories":2533},[500],{"categories":2535},[625],{"categories":2537},[500],{"categories":2539},[625],{"categories":2541},[530],{"categories":2543},[500],{"categories":2545},[580],{"categories":2547},[565],{"categories":2549},[],{"categories":2551},[625],{"categories":2553},[890],{"categories":2555},[],{"categories":2557},[565],{"categories":2559},[565],{"categories":2561},[],{"categories":2563},[],{"categories":2565},[565],{"categories":2567},[565],{"categories":2569},[535],{"categories":2571},[565],{"categories":2573},[],{"categories":2575},[535],{"categories":2577},[],{"categories":2579},[],{"categories":2581},[535],{"categories":2583},[535],{"categories":2585},[565],{"categories":2587},[565],{"categories":2589},[565],{"categories":2591},[565],{"categories":2593},[565],{"categories":2595},[565],{"categories":2597},[543],{"categories":2599},[],{"categories":2601},[565],{"categories":2603},[],{"categories":2605},[],{"categories":2607},[540],{"categories":2609},[580],{"categories":2611},[],{"categories":2613},[890],{"categories":2615},[565,890],{"categories":2617},[565],{"categories":2619},[],{"categories":2621},[546],{"categories":2623},[546],{"categories":2625},[546],{"categories":2627},[546],{"categories":2629},[546],{"categories":2631},[],{"categories":2633},[],{"categories":2635},[],{"categories":2637},[500],{"categories":2639},[540],{"categories":2641},[530],{"categories":2643},[500],{"categories":2645},[580],{"categories":2647},[546],{"categories":2649},[],{"categories":2651},[543],{"categories":2653},[977],{"categories":2655},[625],{"categories":2657},[625],{"categories":2659},[625],{"categories":2661},[580],{"categories":2663},[977],{"categories":2665},[580],{"categories":2667},[],{"categories":2669},[530],{"categories":2671},[500],{"categories":2673},[565],{"categories":2675},[546],{"categories":2677},[543],{"categories":2679},[500],{"categories":2681},[543],{"categories":2683},[565],{"categories":2685},[546],{"categories":2687},[500],{"categories":2689},[890],{"categories":2691},[565],{"categories":2693},[535],{"categories":2695},[500],{"categories":2697},[],{"categories":2699},[565],{"categories":2701},[500],{"categories":2703},[500],{"categories":2705},[540],{"categories":2707},[],{"categories":2709},[543],{"categories":2711},[543],{"categories":2713},[543],{"categories":2715},[540],{"categories":2717},[565],{"categories":2719},[],{"categories":2721},[530],{"categories":2723},[580],{"categories":2725},[580],{"categories":2727},[625],{"categories":2729},[530],{"categories":2731},[535],{"categories":2733},[625],{"categories":2735},[],{"categories":2737},[535],{"categories":2739},[535],{"categories":2741},[535],{"categories":2743},[565],{"categories":2745},[530],{"categories":2747},[565],{"categories":2749},[],{"categories":2751},[],{"categories":2753},[],{"categories":2755},[500],{"categories":2757},[540],{"categories":2759},[],{"categories":2761},[580],{"categories":2763},[546],{"categories":2765},[],{"categories":2767},[543],{"categories":2769},[],{"categories":2771},[546],{"categories":2773},[565],{"categories":2775},[580],{"categories":2777},[530],{"categories":2779},[],{"categories":2781},[546],{"categories":2783},[546],{"categories":2785},[565],{"categories":2787},[],{"categories":2789},[],{"categories":2791},[500],{"categories":2793},[565],{"categories":2795},[],{"categories":2797},[540],{"categories":2799},[565],{"categories":2801},[],{"categories":2803},[500],{"categories":2805},[540],{"categories":2807},[565],{"categories":2809},[625],{"categories":2811},[565],{"categories":2813},[],{"categories":2815},[625],{"categories":2817},[565],{"categories":2819},[500],{"categories":2821},[565],{"categories":2823},[625],{"categories":2825},[540],{"categories":2827},[565],{"categories":2829},[565],{"categories":2831},[565,540],{"categories":2833},[540],{"categories":2835},[540],{"categories":2837},[540],{"categories":2839},[546],{"categories":2841},[580],{"categories":2843},[565],{"categories":2845},[580],{"categories":2847},[546],{"categories":2849},[565],{"categories":2851},[],{"categories":2853},[],{"categories":2855},[565],{"categories":2857},[565],{"categories":2859},[565],{"categories":2861},[540],{"categories":2863},[565],{"categories":2865},[],{"categories":2867},[565],{"categories":2869},[565],{"categories":2871},[540],{"categories":2873},[540],{"categories":2875},[565],{"categories":2877},[565],{"categories":2879},[],{"categories":2881},[565],{"categories":2883},[],{"categories":2885},[565],{"categories":2887},[565],{"categories":2889},[565],{"categories":2891},[565],{"categories":2893},[565],{"categories":2895},[565],{"categories":2897},[565],{"categories":2899},[],{"categories":2901},[565],{"categories":2903},[535],{"categories":2905},[535],{"categories":2907},[],{"categories":2909},[],{"categories":2911},[565],{"categories":2913},[],{"categories":2915},[565],{"categories":2917},[565,890],{"categories":2919},[],{"categories":2921},[535],{"categories":2923},[],{"categories":2925},[565],{"categories":2927},[],{"categories":2929},[],{"categories":2931},[],{"categories":2933},[565],{"categories":2935},[],{"categories":2937},[565],{"categories":2939},[],{"categories":2941},[565],{"categories":2943},[565],{"categories":2945},[],{"categories":2947},[],{"categories":2949},[565,890],{"categories":2951},[890,565],{"categories":2953},[535],{"categories":2955},[],{"categories":2957},[565],{"categories":2959},[],{"categories":2961},[565],{"categories":2963},[565],{"categories":2965},[],{"categories":2967},[535],{"categories":2969},[565,530],{"categories":2971},[535],{"categories":2973},[500],{"categories":2975},[],{"categories":2977},[540],{"categories":2979},[565],{"categories":2981},[543],{"categories":2983},[565],{"categories":2985},[580],{"categories":2987},[580],{"categories":2989},[890],{"categories":2991},[535],{"categories":2993},[565],{"categories":2995},[890],{"categories":2997},[500],{"categories":2999},[565],{"categories":3001},[580],{"categories":3003},[],{"categories":3005},[565],{"categories":3007},[],{"categories":3009},[],{"categories":3011},[565],{"categories":3013},[],{"categories":3015},[565],{"categories":3017},[500],{"categories":3019},[530],{"categories":3021},[580],{"categories":3023},[543],{"categories":3025},[540],{"categories":3027},[580],{"categories":3029},[],{"categories":3031},[543],{"categories":3033},[],{"categories":3035},[],{"categories":3037},[565],{"categories":3039},[535],{"categories":3041},[543],{"categories":3043},[],{"categories":3045},[565],{"categories":3047},[535],{"categories":3049},[535],{"categories":3051},[543],{"categories":3053},[535],{"categories":3055},[565],{"categories":3057},[535],{"categories":3059},[565],{"categories":3061},[],{"categories":3063},[565],{"categories":3065},[565],{"categories":3067},[565],{"categories":3069},[535],{"categories":3071},[],{"categories":3073},[],{"categories":3075},[546],{"categories":3077},[535],{"categories":3079},[],{"categories":3081},[565],{"categories":3083},[565],{"categories":3085},[565],{"categories":3087},[565],{"categories":3089},[565],{"categories":3091},[565],{"categories":3093},[565],{"categories":3095},[565],{"categories":3097},[565],{"categories":3099},[543],{"categories":3101},[565,546],{"categories":3103},[535],{"categories":3105},[535],{"categories":3107},[565],{"categories":3109},[500],{"categories":3111},[625],{"categories":3113},[565],{"categories":3115},[565],{"categories":3117},[],{"categories":3119},[],{"categories":3121},[565],{"categories":3123},[565],{"categories":3125},[],{"categories":3127},[546],{"categories":3129},[546],{"categories":3131},[580],{"categories":3133},[565],{"categories":3135},[580],{"categories":3137},[565],{"categories":3139},[565],{"categories":3141},[],{"categories":3143},[565],{"categories":3145},[],{"categories":3147},[],{"categories":3149},[565],{"categories":3151},[],{"categories":3153},[],{"categories":3155},[535],{"categories":3157},[],{"categories":3159},[565],{"categories":3161},[565],{"categories":3163},[565],{"categories":3165},[],{"categories":3167},[565],{"categories":3169},[535],{"categories":3171},[977],{"categories":3173},[540],{"categories":3175},[565],{"categories":3177},[],{"categories":3179},[540],{"categories":3181},[565],{"categories":3183},[],{"categories":3185},[565],{"categories":3187},[],{"categories":3189},[540],{"categories":3191},[],{"categories":3193},[],{"categories":3195},[540],{"categories":3197},[540],{"categories":3199},[540],{"categories":3201},[565],{"categories":3203},[],{"categories":3205},[540],{"categories":3207},[540],{"categories":3209},[],{"categories":3211},[],{"categories":3213},[540],{"categories":3215},[565],{"categories":3217},[535],{"categories":3219},[977],{"categories":3221},[543],{"categories":3223},[],{"categories":3225},[546],{"categories":3227},[565],{"categories":3229},[565],{"categories":3231},[530],{"categories":3233},[535],{"categories":3235},[535],{"categories":3237},[535],{"categories":3239},[535],{"categories":3241},[],{"categories":3243},[540],{"categories":3245},[540],{"categories":3247},[540],{"categories":3249},[540],{"categories":3251},[580],{"categories":3253},[565],{"categories":3255},[530],{"categories":3257},[],{"categories":3259},[580],{"categories":3261},[540],{"categories":3263},[546],{"categories":3265},[546],{"categories":3267},[546],{"categories":3269},[546],{"categories":3271},[546],{"categories":3273},[546],{"categories":3275},[565,530],{"categories":3277},[540],{"categories":3279},[530],{"categories":3281},[535],{"categories":3283},[535],{"categories":3285},[580],{"categories":3287},[],{"categories":3289},[],{"categories":3291},[543],{"categories":3293},[],{"categories":3295},[565],{"categories":3297},[543],{"categories":3299},[565],{"categories":3301},[500],{"categories":3303},[540],{"categories":3305},[530],{"categories":3307},[540],{"categories":3309},[500],{"categories":3311},[580],{"categories":3313},[540],{"categories":3315},[],{"categories":3317},[580],{"categories":3319},[],{"categories":3321},[],{"categories":3323},[540],{"categories":3325},[540],{"categories":3327},[540],{"categories":3329},[565],{"categories":3331},[565],{"categories":3333},[565],{"categories":3335},[565],{"categories":3337},[565],{"categories":3339},[],{"categories":3341},[890],{"categories":3343},[565],{"categories":3345},[],{"categories":3347},[],{"categories":3349},[],{"categories":3351},[580],{"categories":3353},[],{"categories":3355},[565],{"categories":3357},[],{"categories":3359},[535],{"categories":3361},[565],{"categories":3363},[535],{"categories":3365},[565],{"categories":3367},[540],{"categories":3369},[],{"categories":3371},[565],{"categories":3373},[565],{"categories":3375},[],{"categories":3377},[625],{"categories":3379},[625],{"categories":3381},[500],{"categories":3383},[546],{"categories":3385},[],{"categories":3387},[565],{"categories":3389},[540],{"categories":3391},[],{"categories":3393},[],{"categories":3395},[565],{"categories":3397},[500],{"categories":3399},[540],{"categories":3401},[530],{"categories":3403},[580,500],{"categories":3405},[500],{"categories":3407},[565],{"categories":3409},[540],{"categories":3411},[],{"categories":3413},[],{"categories":3415},[],{"categories":3417},[],{"categories":3419},[],{"categories":3421},[],{"categories":3423},[565],{"categories":3425},[],{"categories":3427},[],{"categories":3429},[565],{"categories":3431},[],{"categories":3433},[],{"categories":3435},[],{"categories":3437},[565],{"categories":3439},[535],{"categories":3441},[],{"categories":3443},[],{"categories":3445},[],{"categories":3447},[565],{"categories":3449},[],{"categories":3451},[565],{"categories":3453},[565],{"categories":3455},[],{"categories":3457},[565],{"categories":3459},[500],{"categories":3461},[],{"categories":3463},[580],{"categories":3465},[580],{"categories":3467},[],{"categories":3469},[543],{"categories":3471},[],{"categories":3473},[],{"categories":3475},[],{"categories":3477},[546],{"categories":3479},[535],{"categories":3481},[540],{"categories":3483},[565],{"categories":3485},[530],{"categories":3487},[565],{"categories":3489},[],{"categories":3491},[],{"categories":3493},[530],{"categories":3495},[543],{"categories":3497},[540],{"categories":3499},[],{"categories":3501},[890],{"categories":3503},[],{"categories":3505},[543],{"categories":3507},[565],{"categories":3509},[565],{"categories":3511},[543],{"categories":3513},[565],{"categories":3515},[546],{"categories":3517},[540],{"categories":3519},[565],{"categories":3521},[540],{"categories":3523},[565],{"categories":3525},[540],{"categories":3527},[580],{"categories":3529},[580],{"categories":3531},[546],{"categories":3533},[],{"categories":3535},[565],{"categories":3537},[565],{"categories":3539},[543],{"categories":3541},[977],{"categories":3543},[580],{"categories":3545},[535],{"categories":3547},[565],{"categories":3549},[535],{"categories":3551},[565],{"categories":3553},[565],{"categories":3555},[],{"categories":3557},[565],{"categories":3559},[],{"categories":3561},[565],{"categories":3563},[543],{"categories":3565},[565],{"categories":3567},[565],{"categories":3569},[565],{"categories":3571},[],{"categories":3573},[565],{"categories":3575},[565],{"categories":3577},[977],{"categories":3579},[],{"categories":3581},[535],{"categories":3583},[890],{"categories":3585},[500],{"categories":3587},[],{"categories":3589},[625],{"categories":3591},[],{"categories":3593},[],{"categories":3595},[535],{"categories":3597},[565],{"categories":3599},[],{"categories":3601},[565],{"categories":3603},[565],{"categories":3605},[540],{"categories":3607},[565],{"categories":3609},[535],{"categories":3611},[535],{"categories":3613},[546],{"categories":3615},[546],{"categories":3617},[546],{"categories":3619},[565],{"categories":3621},[625],{"categories":3623},[535],{"categories":3625},[580],{"categories":3627},[],{"categories":3629},[546],{"categories":3631},[546],{"categories":3633},[890],{"categories":3635},[546],{"categories":3637},[546],{"categories":3639},[540],{"categories":3641},[535],{"categories":3643},[890],{"categories":3645},[565],{"categories":3647},[565],{"categories":3649},[565],{"categories":3651},[565],{"categories":3653},[],{"categories":3655},[540],{"categories":3657},[565],{"categories":3659},[546],{"categories":3661},[],{"categories":3663},[],{"categories":3665},[535],{"categories":3667},[],{"categories":3669},[540],{"categories":3671},[540],{"categories":3673},[540],{"categories":3675},[540],{"categories":3677},[540],{"categories":3679},[540],{"categories":3681},[540],{"categories":3683},[540],{"categories":3685},[],{"categories":3687},[],{"categories":3689},[565],{"categories":3691},[],{"categories":3693},[540],{"categories":3695},[580],{"categories":3697},[580],{"categories":3699},[625],{"categories":3701},[530],{"categories":3703},[],{"categories":3705},[],{"categories":3707},[],{"categories":3709},[546],{"categories":3711},[565],{"categories":3713},[],{"categories":3715},[530],{"categories":3717},[530],{"categories":3719},[546],{"categories":3721},[580],{"categories":3723},[625],{"categories":3725},[546],{"categories":3727},[546],{"categories":3729},[],{"categories":3731},[540],{"categories":3733},[530],{"categories":3735},[530],{"categories":3737},[565],{"categories":3739},[540],{"categories":3741},[500],{"categories":3743},[546],{"categories":3745},[],{"categories":3747},[543],{"categories":3749},[625],{"categories":3751},[535],{"categories":3753},[535],{"categories":3755},[535],{"categories":3757},[890],{"categories":3759},[],{"categories":3761},[540],{"categories":3763},[],{"categories":3765},[540],{"categories":3767},[540],{"categories":3769},[565],{"categories":3771},[565],{"categories":3773},[500],{"categories":3775},[540],{"categories":3777},[500],{"categories":3779},[],{"categories":3781},[540],{"categories":3783},[546],{"categories":3785},[546],{"categories":3787},[546],{"categories":3789},[565],{"categories":3791},[540],{"categories":3793},[565],{"categories":3795},[530],{"categories":3797},[535],{"categories":3799},[546],{"categories":3801},[535],{"categories":3803},[565],{"categories":3805},[],{"categories":3807},[535],{"categories":3809},[540],{"categories":3811},[535],{"categories":3813},[535],{"categories":3815},[535],{"categories":3817},[535],{"categories":3819},[],{"categories":3821},[],{"categories":3823},[535],{"categories":3825},[535],{"categories":3827},[],{"categories":3829},[535],{"categories":3831},[535],{"categories":3833},[565],{"categories":3835},[565],{"categories":3837},[535],{"categories":3839},[535],{"categories":3841},[565],{"categories":3843},[],{"categories":3845},[565],{"categories":3847},[540],{"categories":3849},[565],{"categories":3851},[565],{"categories":3853},[],{"categories":3855},[565],{"categories":3857},[565],{"categories":3859},[565],{"categories":3861},[535],{"categories":3863},[],{"categories":3865},[],{"categories":3867},[],{"categories":3869},[],{"categories":3871},[565],{"categories":3873},[565],{"categories":3875},[],{"categories":3877},[543],{"categories":3879},[535],{"categories":3881},[],{"categories":3883},[],{"categories":3885},[],{"categories":3887},[],{"categories":3889},[],{"categories":3891},[565],{"categories":3893},[],{"categories":3895},[],{"categories":3897},[565],{"categories":3899},[],{"categories":3901},[540],{"categories":3903},[540],{"categories":3905},[540],{"categories":3907},[530],{"categories":3909},[],{"categories":3911},[543],{"categories":3913},[500],{"categories":3915},[500],{"categories":3917},[890],{"categories":3919},[535],{"categories":3921},[],{"categories":3923},[565],{"categories":3925},[565],{"categories":3927},[530],{"categories":3929},[],{"categories":3931},[530],{"categories":3933},[],{"categories":3935},[],{"categories":3937},[],{"categories":3939},[500],{"categories":3941},[540],{"categories":3943},[540],{"categories":3945},[540],{"categories":3947},[540],{"categories":3949},[540],{"categories":3951},[],{"categories":3953},[535],{"categories":3955},[565],{"categories":3957},[565],{"categories":3959},[565],{"categories":3961},[],{"categories":3963},[530],{"categories":3965},[],{"categories":3967},[546],{"categories":3969},[625],{"categories":3971},[546],{"categories":3973},[],{"categories":3975},[],{"categories":3977},[565],{"categories":3979},[540],{"categories":3981},[],{"categories":3983},[565],{"categories":3985},[565],{"categories":3987},[565],{"categories":3989},[540],{"categories":3991},[540],{"categories":3993},[565],{"categories":3995},[625],{"categories":3997},[540],{"categories":3999},[],{"categories":4001},[565],{"categories":4003},[],{"categories":4005},[977],{"categories":4007},[500],{"categories":4009},[625],{"categories":4011},[500],{"categories":4013},[890],{"categories":4015},[565],{"categories":4017},[500],{"categories":4019},[535],{"categories":4021},[890],{"categories":4023},[500],{"categories":4025},[546],{"categories":4027},[546],{"categories":4029},[],{"categories":4031},[500],{"categories":4033},[],{"categories":4035},[580],{"categories":4037},[500],{"categories":4039},[],{"categories":4041},[625],{"categories":4043},[625],{"categories":4045},[977],{"categories":4047},[],{"categories":4049},[565],{"categories":4051},[500],{"categories":4053},[890],{"categories":4055},[540],{"categories":4057},[540],{"categories":4059},[625],{"categories":4061},[565],{"categories":4063},[580],{"categories":4065},[565],{"categories":4067},[],{"categories":4069},[],{"categories":4071},[],{"categories":4073},[543],{"categories":4075},[565],{"categories":4077},[546],{"categories":4079},[500],{"categories":4081},[500],{"categories":4083},[565],{"categories":4085},[543],{"categories":4087},[580],{"categories":4089},[565],{"categories":4091},[500],{"categories":4093},[565],{"categories":4095},[500],{"categories":4097},[580],{"categories":4099},[580],{"categories":4101},[540],{"categories":4103},[580],{"categories":4105},[500],{"categories":4107},[530],{"categories":4109},[500],{"categories":4111},[500],{"categories":4113},[500],{"categories":4115},[500],{"categories":4117},[],{"categories":4119},[535],{"categories":4121},[],{"categories":4123},[625],{"categories":4125},[565],{"categories":4127},[565],{"categories":4129},[],{"categories":4131},[],{"categories":4133},[],{"categories":4135},[565],{"categories":4137},[535],{"categories":4139},[565],{"categories":4141},[565],{"categories":4143},[],{"categories":4145},[565],{"categories":4147},[546],{"categories":4149},[565],{"categories":4151},[565],{"categories":4153},[565],{"categories":4155},[],{"categories":4157},[],{"categories":4159},[],{"categories":4161},[890],{"categories":4163},[890],{"categories":4165},[530],{"categories":4167},[540],{"categories":4169},[530,543],{"categories":4171},[565],{"categories":4173},[535],{"categories":4175},[],{"categories":4177},[546],{"categories":4179},[625],{"categories":4181},[565],{"categories":4183},[500],{"categories":4185},[565],{"categories":4187},[],{"categories":4189},[625],{"categories":4191},[890],{"categories":4193},[540],{"categories":4195},[530],{"categories":4197},[890],{"categories":4199},[540],{"categories":4201},[580],{"categories":4203},[540],{"categories":4205},[580],{"categories":4207},[565],{"categories":4209},[580],{"categories":4211},[580],{"categories":4213},[500],{"categories":4215},[625],{"categories":4217},[565],{"categories":4219},[543],{"categories":4221},[],{"categories":4223},[565],{"categories":4225},[546],{"categories":4227},[625],{"categories":4229},[530],{"categories":4231},[565],{"categories":4233},[625],{"categories":4235},[580],{"categories":4237},[565],{"categories":4239},[565],{"categories":4241},[625],{"categories":4243},[565],{"categories":4245},[580],{"categories":4247},[565],{"categories":4249},[],{"categories":4251},[565],{"categories":4253},[565],{"categories":4255},[565],{"categories":4257},[565],{"categories":4259},[],{"categories":4261},[540],{"categories":4263},[890],{"categories":4265},[],{"categories":4267},[],{"categories":4269},[565],{"categories":4271},[530],{"categories":4273},[543],{"categories":4275},[530],{"categories":4277},[530],{"categories":4279},[540],{"categories":4281},[],{"categories":4283},[565],{"categories":4285},[535],{"categories":4287},[565],{"categories":4289},[565],{"categories":4291},[],{"categories":4293},[540],{"categories":4295},[535],{"categories":4297},[565,890],{"categories":4299},[540,890],{"categories":4301},[890],{"categories":4303},[565],{"categories":4305},[540],{"categories":4307},[540],{"categories":4309},[500],{"categories":4311},[500],{"categories":4313},[500],{"categories":4315},[565],{"categories":4317},[546],{"categories":4319},[540],{"categories":4321},[],{"categories":4323},[890],{"categories":4325},[],{"categories":4327},[890],{"categories":4329},[890],{"categories":4331},[530],{"categories":4333},[540],{"categories":4335},[],{"categories":4337},[890],{"categories":4339},[565],{"categories":4341},[535],{"categories":4343},[565],{"categories":4345},[546],{"categories":4347},[500],{"categories":4349},[500],{"categories":4351},[500],{"categories":4353},[890],{"categories":4355},[],{"categories":4357},[],{"categories":4359},[],{"categories":4361},[565],{"categories":4363},[500],{"categories":4365},[565],{"categories":4367},[500],{"categories":4369},[890],{"categories":4371},[890],{"categories":4373},[565],{"categories":4375},[540],{"categories":4377},[],{"categories":4379},[565],{"categories":4381},[565],{"categories":4383},[565],{"categories":4385},[],{"categories":4387},[],{"categories":4389},[890],{"categories":4391},[890],{"categories":4393},[565,890],{"categories":4395},[540],{"categories":4397},[540],{"categories":4399},[540],{"categories":4401},[540],{"categories":4403},[540],{"categories":4405},[540],{"categories":4407},[],{"categories":4409},[500],{"categories":4411},[565],{"categories":4413},[500],{"categories":4415},[543],{"categories":4417},[565],{"categories":4419},[977],{"categories":4421},[977],{"categories":4423},[540],{"categories":4425},[500],{"categories":4427},[],{"categories":4429},[540],{"categories":4431},[565],{"categories":4433},[],{"categories":4435},[546],{"categories":4437},[],{"categories":4439},[565],{"categories":4441},[540],{"categories":4443},[535],{"categories":4445},[565],{"categories":4447},[],{"categories":4449},[],{"categories":4451},[546],{"categories":4453},[546],{"categories":4455},[580],{"categories":4457},[546],{"categories":4459},[540],{"categories":4461},[],{"categories":4463},[540],{"categories":4465},[535],{"categories":4467},[565],{"categories":4469},[565],{"categories":4471},[],{"categories":4473},[565],{"categories":4475},[580],{"categories":4477},[565],{"categories":4479},[],{"categories":4481},[625],{"categories":4483},[500],{"categories":4485},[500],{"categories":4487},[530],{"categories":4489},[530],{"categories":4491},[530],{"categories":4493},[540],{"categories":4495},[530],{"categories":4497},[540],{"categories":4499},[890],{"categories":4501},[977],{"categories":4503},[535],{"categories":4505},[535],{"categories":4507},[535],{"categories":4509},[890],{"categories":4511},[535,530],{"categories":4513},[625],{"categories":4515},[540],{"categories":4517},[],{"categories":4519},[565],{"categories":4521},[],{"categories":4523},[500],{"categories":4525},[625],{"categories":4527},[546],{"categories":4529},[500],{"categories":4531},[580],{"categories":4533},[],{"categories":4535},[540],{"categories":4537},[],{"categories":4539},[977],{"categories":4541},[],{"categories":4543},[546],{"categories":4545},[546],{"categories":4547},[625],{"categories":4549},[],{"categories":4551},[565],{"categories":4553},[625],{"categories":4555},[],{"categories":4557},[565],{"categories":4559},[565],{"categories":4561},[],{"categories":4563},[580],{"categories":4565},[565],{"categories":4567},[],{"categories":4569},[565],{"categories":4571},[],{"categories":4573},[],{"categories":4575},[540],{"categories":4577},[540],{"categories":4579},[],{"categories":4581},[500],{"categories":4583},[500],{"categories":4585},[500],{"categories":4587},[565,540],{"categories":4589},[540],{"categories":4591},[540],{"categories":4593},[540],{"categories":4595},[625],{"categories":4597},[625],{"categories":4599},[],{"categories":4601},[535],{"categories":4603},[565],{"categories":4605},[625],{"categories":4607},[625],{"categories":4609},[535],{"categories":4611},[530],{"categories":4613},[540],{"categories":4615},[500],{"categories":4617},[565],{"categories":4619},[565],{"categories":4621},[540],{"categories":4623},[500],{"categories":4625},[540],{"categories":4627},[565],{"categories":4629},[543],{"categories":4631},[],{"categories":4633},[565],{"categories":4635},[],{"categories":4637},[565],{"categories":4639},[565],{"categories":4641},[500],{"categories":4643},[],{"categories":4645},[625],{"categories":4647},[565],{"categories":4649},[540],{"categories":4651},[540],{"categories":4653},[500],{"categories":4655},[580],{"categories":4657},[580],{"categories":4659},[535],{"categories":4661},[565],{"categories":4663},[540],{"categories":4665},[],{"categories":4667},[540],{"categories":4669},[565],{"categories":4671},[535],{"categories":4673},[565],{"categories":4675},[565],{"categories":4677},[565],{"categories":4679},[540],{"categories":4681},[625],{"categories":4683},[565],{"categories":4685},[546],{"categories":4687},[565],{"categories":4689},[565],{"categories":4691},[565],{"categories":4693},[565],{"categories":4695},[],{"categories":4697},[565],{"categories":4699},[625],{"categories":4701},[546],{"categories":4703},[565],{"categories":4705},[546],{"categories":4707},[],{"categories":4709},[],{"categories":4711},[],{"categories":4713},[565],{"categories":4715},[],{"categories":4717},[],{"categories":4719},[],{"categories":4721},[],{"categories":4723},[540],{"categories":4725},[580],{"categories":4727},[540],{"categories":4729},[540],{"categories":4731},[500],{"categories":4733},[530],{"categories":4735},[565],{"categories":4737},[565],{"categories":4739},[565],{"categories":4741},[530],{"categories":4743},[580],{"categories":4745},[],{"categories":4747},[625],{"categories":4749},[543],{"categories":4751},[565],{"categories":4753},[546],{"categories":4755},[580],{"categories":4757},[580],{"categories":4759},[977],{"categories":4761},[540],{"categories":4763},[565],{"categories":4765},[565],{"categories":4767},[580],{"categories":4769},[565],{"categories":4771},[],{"categories":4773},[],{"categories":4775},[890],{"categories":4777},[546],{"categories":4779},[580],{"categories":4781},[565],{"categories":4783},[535],{"categories":4785},[580],{"categories":4787},[530],{"categories":4789},[540],{"categories":4791},[540],{"categories":4793},[535],{"categories":4795},[565],{"categories":4797},[],{"categories":4799},[],{"categories":4801},[],{"categories":4803},[565],{"categories":4805},[],{"categories":4807},[535],{"categories":4809},[],{"categories":4811},[565],{"categories":4813},[],{"categories":4815},[535],{"categories":4817},[540],{"categories":4819},[565],{"categories":4821},[890],{"categories":4823},[565],{"categories":4825},[580],{"categories":4827},[565],{"categories":4829},[580],{"categories":4831},[580],{"categories":4833},[],{"categories":4835},[],{"categories":4837},[580],{"categories":4839},[580],{"categories":4841},[580],{"categories":4843},[],{"categories":4845},[580],{"categories":4847},[540],{"categories":4849},[540],{"categories":4851},[],{"categories":4853},[565],{"categories":4855},[543],{"categories":4857},[625],{"categories":4859},[565],{"categories":4861},[],{"categories":4863},[580],{"categories":4865},[565],{"categories":4867},[977],{"categories":4869},[580],{"categories":4871},[580],{"categories":4873},[543],{"categories":4875},[500],{"categories":4877},[500],{"categories":4879},[],{"categories":4881},[500],{"categories":4883},[565],{"categories":4885},[],{"categories":4887},[],{"categories":4889},[540],{"categories":4891},[],{"categories":4893},[540],{"categories":4895},[540],{"categories":4897},[535],{"categories":4899},[565],{"categories":4901},[535],{"categories":4903},[580],{"categories":4905},[535],{"categories":4907},[500],{"categories":4909},[500],{"categories":4911},[500],{"categories":4913},[535],{"categories":4915},[565],{"categories":4917},[540],{"categories":4919},[890],{"categories":4921},[530],{"categories":4923},[890],{"categories":4925},[890],{"categories":4927},[500],{"categories":4929},[890],{"categories":4931},[890],[4933,4999,5087,5224],{"id":4934,"title":4935,"ai":4936,"body":4941,"categories":4982,"created_at":501,"date_modified":501,"description":34,"extension":502,"faq":501,"featured":503,"kicker_label":501,"meta":4983,"navigation":509,"path":4987,"published_at":4988,"question":501,"scraped_at":4989,"seo":4990,"sitemap":4991,"source_id":4992,"source_name":516,"source_type":517,"source_url":4993,"stem":4994,"tags":4995,"thumbnail_url":501,"tldr":4996,"tweet":501,"unknown_tags":4997,"__hash__":4998},"summaries\u002Fsummaries\u002Fsecond-frameworks-reveal-timeless-software-problem-summary.md","Second Frameworks Reveal Timeless Software Problems",{"provider":7,"model":8,"input_tokens":4937,"output_tokens":4938,"processing_time_ms":4939,"cost_usd":4940},3897,1110,12769,0.00082755,{"type":14,"value":4942,"toc":4977},[4943,4947,4959,4963,4970,4974],[17,4944,4946],{"id":4945},"framework-mastery-creates-false-security","Framework Mastery Creates False Security",[22,4948,4949,4950,4954,4955,4958],{},"Deep expertise in a single stack like React + Node.js delivers patterns (useState, useEffect, component composition) and ecosystem knowledge (Promises, async\u002Fawait, Express middleware). But this comfort hides a risk: knowledge ties too closely to the tool. If React vanished, you'd rebuild from near-zero because you know ",[4951,4952,4953],"em",{},"how"," React solves problems, not ",[4951,4956,4957],{},"what"," core problems it addresses. The author's React proficiency let them build anything needed—yet sparked doubt: \"Am I learning tools, or learning to build software?\"",[17,4960,4962],{"id":4961},"switching-stacks-uncovers-invariants","Switching Stacks Uncovers Invariants",[22,4964,4965,4966,4969],{},"To break free, deliberately build with unfamiliar tools: Golang backend + Svelte frontend. This wasn't about mastering Go\u002FSvelte syntax—those are secondary. The real gain: reframing questions from \"How does React do this?\" to \"What problem is React solving?\" A second framework forces recognition of ",[241,4967,4968],{},"invariant problems","—challenges like state management, side effects, async flows, and composition that persist across languages and frameworks. Evidence from the switch: prior React knowledge didn't evaporate but illuminated universals, making new tools click faster.",[17,4971,4973],{"id":4972},"actionable-shift-prioritize-problems-over-tools","Actionable Shift: Prioritize Problems Over Tools",[22,4975,4976],{},"Target invariant understanding to future-proof skills. Don't chase endless frameworks; use a second (or third) to map how they tackle the same fundamentals differently. Outcome: transferable expertise where any stack becomes a means to solve enduring problems, not an end. This approach turns framework-hopping into leveraged learning, avoiding the trap of siloed knowledge.",{"title":34,"searchDepth":48,"depth":48,"links":4978},[4979,4980,4981],{"id":4945,"depth":48,"text":4946},{"id":4961,"depth":48,"text":4962},{"id":4972,"depth":48,"text":4973},[500],{"content_references":4984,"triage":4985},[],{"relevance":60,"novelty":54,"quality":60,"actionability":60,"composite":507,"reasoning":4986},"Category: Software Engineering. The article discusses the importance of understanding invariant problems across different frameworks, which directly addresses a pain point for developers who may feel limited by their knowledge of a single stack. It provides actionable advice on prioritizing problem-solving over tool mastery, making it relevant and practical for the target audience.","\u002Fsummaries\u002Fsecond-frameworks-reveal-timeless-software-problem-summary","2026-04-25 00:19:15","2026-04-26 17:22:13",{"title":4935,"description":34},{"loc":4987},"e645f16bb1455d6a","https:\u002F\u002Flevelup.gitconnected.com\u002Fyour-second-framework-teaches-you-more-than-your-first-da5c63f2c99f?source=rss----5517fd7b58a6---4","summaries\u002Fsecond-frameworks-reveal-timeless-software-problem-summary",[521,522,523],"Mastering one framework teaches tools; a second exposes invariant problems that every stack solves, building transferable software skills.",[522,523],"kRqvTmecWfnCdYjjwR0KFkUdDRkDGbgBBhmnkdOsTwk",{"id":5000,"title":5001,"ai":5002,"body":5007,"categories":5061,"created_at":501,"date_modified":501,"description":34,"extension":502,"faq":501,"featured":503,"kicker_label":501,"meta":5062,"navigation":509,"path":5075,"published_at":501,"question":501,"scraped_at":5076,"seo":5077,"sitemap":5078,"source_id":5079,"source_name":5080,"source_type":517,"source_url":5081,"stem":5082,"tags":5083,"thumbnail_url":501,"tldr":5084,"tweet":501,"unknown_tags":5085,"__hash__":5086},"summaries\u002Fsummaries\u002Fswiftui-navigation-typed-routes-beat-old-hacks-summary.md","SwiftUI Navigation: Typed Routes Beat Old Hacks",{"provider":7,"model":8,"input_tokens":5003,"output_tokens":5004,"processing_time_ms":5005,"cost_usd":5006},9408,2142,9709,0.00244575,{"type":14,"value":5008,"toc":5055},[5009,5013,5020,5024,5034,5038,5048,5052],[17,5010,5012],{"id":5011},"typed-routes-simplify-navigation-state","Typed Routes Simplify Navigation State",[22,5014,5015,5016,5019],{},"NavigationStack treats history as a stack of typed, Hashable Route enum values—empty array at root, append to push (e.g., path.append(.details(id: 42))), popLast() to pop, removeAll() for root. Centralize mapping in root's .navigationDestination(for: Route.self) { switch route { case .details(let id): DetailsView(id: id); case .settings: SettingsView() } }. Use NavigationLink(value: Route.details(id: 42)) instead of destination: closures. This centralizes routes, enables compiler-checked refactors, and avoids scattered state. For basic apps (\u003C5 screens), bind @State path: ",[39,5017,5018],{},"Route"," directly to NavigationStack(path: $path).",[17,5021,5023],{"id":5022},"router-enables-programmatic-control-at-scale","Router Enables Programmatic Control at Scale",[22,5025,5026,5027,5029,5030,5033],{},"For apps with multiple flows (auth, onboarding, tabs), extract path to @MainActor ObservableObject Router with @Published path: ",[39,5028,5018],{},", methods push(",[4951,5031,5032],{},":), pop(), popToRoot(), setPath(",":). Inject via @StateObject in root, pass @ObservedObject to children: router.push(.details(id: 7)). Keeps views UI-focused, supports post-login pushes without nested conditionals. Beats pre-iOS 16 NavigationView\u002FisActive fragility, preventing double-pushes or reasoning issues in complex apps.",[17,5035,5037],{"id":5036},"deep-links-and-tabs-without-shared-state","Deep Links and Tabs Without Shared State",[22,5039,5040,5041,5043,5044,5047],{},"Parse URLs to ",[39,5042,5018],{}," via DeepLinkParser (guard scheme == \"myapp\"; if host == \"details\", id = Int(pathComponents.first): return ",[39,5045,5046],{},".details(id: id)","). Apply with .onOpenURL { if let newPath = parse(url) { router.setPath(newPath) } }—sets stack directly, no intermediates. For TabView, use separate NavigationStack per tab with own path\u002Frouter to isolate histories; share Route enum or specialize (HomeRoute, SettingsRoute). Avoids cross-tab stack leakage.",[17,5049,5051],{"id":5050},"pitfalls-fixed-by-this-model","Pitfalls Fixed by This Model",[22,5053,5054],{},"Define destinations only at stack root, not children, to prevent duplication. Stick to NavigationLink(value:) + typed paths over mixed destination: for consistency. Ensure Route conforms to Hashable (hashable payloads only). Persist serialized path manually for app restarts if needed—doesn't auto-save. Scales to 20+ screens, deep links, programmatic nav without hacks.",{"title":34,"searchDepth":48,"depth":48,"links":5056},[5057,5058,5059,5060],{"id":5011,"depth":48,"text":5012},{"id":5022,"depth":48,"text":5023},{"id":5036,"depth":48,"text":5037},{"id":5050,"depth":48,"text":5051},[500],{"content_references":5063,"triage":5073},[5064,5070],{"type":5065,"title":5066,"author":5067,"url":5068,"context":5069},"other","10 Common Mistakes Every iOS Developer Should Avoid (Learned the Hard Way)","Sanjay Nelagadde","https:\u002F\u002Fblog.stackademic.com\u002F10-common-mistakes-every-ios-developer-should-avoid-learned-the-hard-way-cf01a8830505","mentioned",{"type":5065,"title":5071,"author":5067,"url":5072,"context":5069},"Apple Vision API Explained (With Code)","https:\u002F\u002Fmedium.com\u002Fdata-has-better-idea\u002Fapple-vision-api-explained-with-code-from-theory-to-github-6613e6628566",{"relevance":60,"novelty":54,"quality":60,"actionability":60,"composite":507,"reasoning":5074},"Category: Software Engineering. The article provides a practical guide on using SwiftUI's NavigationStack with typed routes, addressing the audience's need for clean and scalable navigation solutions. It offers actionable insights on implementing programmatic navigation and deep linking, which are relevant for developers looking to enhance their iOS applications.","\u002Fsummaries\u002Fswiftui-navigation-typed-routes-beat-old-hacks-summary","2026-04-16 02:56:15",{"title":5001,"description":34},{"loc":5075},"e22ad89606c810f8","__oneoff__","https:\u002F\u002Flevelup.gitconnected.com\u002Fswiftui-navigation-in-ios-a-practical-guide-2a4820971681","summaries\u002Fswiftui-navigation-typed-routes-beat-old-hacks-summary",[521,522,523],"Use iOS 16+ NavigationStack with Hashable Route enums as path data for clean, scalable navigation—programmatic pushes, deep links, and tabs without state hacks or spaghetti code.",[522,523],"dxceoYByr7Eyt5uEWotRJub-SQTk76ndKNJ6ROgnK9I",{"id":5088,"title":5089,"ai":5090,"body":5095,"categories":5207,"created_at":501,"date_modified":501,"description":34,"extension":502,"faq":501,"featured":503,"kicker_label":501,"meta":5208,"navigation":509,"path":5213,"published_at":501,"question":501,"scraped_at":5214,"seo":5215,"sitemap":5216,"source_id":5217,"source_name":5080,"source_type":517,"source_url":5218,"stem":5219,"tags":5220,"thumbnail_url":501,"tldr":5221,"tweet":501,"unknown_tags":5222,"__hash__":5223},"summaries\u002Fsummaries\u002Fxp-enables-evolutionary-design-via-refactoring-and-summary.md","XP Enables Evolutionary Design via Refactoring and Simplicity",{"provider":7,"model":8,"input_tokens":5091,"output_tokens":5092,"processing_time_ms":5093,"cost_usd":5094},8876,2752,13683,0.00286005,{"type":14,"value":5096,"toc":5200},[5097,5101,5104,5107,5110,5114,5117,5120,5123,5127,5130,5133,5136,5140,5143,5146,5150,5180,5183],[17,5098,5100],{"id":5099},"flaws-in-traditional-planned-and-evolutionary-design","Flaws in Traditional Planned and Evolutionary Design",[22,5102,5103],{},"Martin Fowler contrasts two dominant design approaches in software: evolutionary (design emerges during coding) and planned (Big Design Up Front, or BDUF, using tools like UML). Pure evolutionary design, often called 'code and fix,' leads to software entropy—ad-hoc decisions accumulate, making changes exponentially harder and breeding bugs. Fowler notes, 'As design deteriorates, so does your ability to make changes effectively,' likening it to a nightmare where fixes grow costlier over time.",[22,5105,5106],{},"Planned design draws from civil engineering: architects create detailed blueprints (e.g., UML diagrams) before builders code, avoiding tactical pitfalls. This works better than code-and-fix but fails in software due to three issues. First, programmers uncover unpredicted issues during implementation, but designers have moved on, leading to workarounds and entropy. Second, designers lose touch with rapidly evolving tools and platforms, eroding programmer respect. Third, changing requirements—often business-driven and unforeseen—undermine even flexible designs. Fowler observes, 'Changing requirements are the number one big issue that causes headaches in software projects,' as anticipating volatility is nearly impossible without perfect foresight.",[22,5108,5109],{},"He rejects both extremes: code-and-fix is disastrous, but planned design's rigidity ignores software's fluidity. XP offers a viable evolutionary path by addressing these via enabling practices.",[17,5111,5113],{"id":5112},"xp-practices-flatten-the-change-curve-for-viable-evolution","XP Practices Flatten the Change Curve for Viable Evolution",[22,5115,5116],{},"XP assumes the 'change curve'—where fixes cost exponentially more later—can be flattened, making evolutionary design practical. This requires coupled practices: without enablers, exploitation fails.",[22,5118,5119],{},"Core enablers are automated testing (unit and acceptance), continuous integration (daily merges with full builds\u002Ftests), and refactoring (disciplined restructuring without changing behavior). Testing provides a safety net; CI keeps teams synced; refactoring maintains simplicity. Fowler shares personal experience: learning proper refactoring from Kent Beck transformed his effectiveness, inspiring his book. At Thoughtworks, introducing testing and CI alone markedly improved development speed, challenging the need for all XP practices but validating their power.",[22,5121,5122],{},"These shift the design balance. Jim Highsmith analogizes it to scales: traditional processes overweight planned design; XP balances it with refactoring. Some upfront design persists—spikes (time-boxed investigations) and iteration planning—but most evolves via refactor. Fowler admits uncertainty on the exact balance: 'One thing we haven't yet figured out is where the balance point is.'",[17,5124,5126],{"id":5125},"simple-design-and-yagni-counter-over-engineering","Simple Design and YAGNI Counter Over-Engineering",[22,5128,5129],{},"XP's 'Do the Simplest Thing That Could Possibly Work' and 'You Aren't Gonna Need It' (YAGNI) reject upfront flexibility like frameworks or reusable components. Build only for current iteration needs; evolve later. For a Money class, implement addition now, multiplication next—even if trivial—avoiding economic waste (delaying current stories) and prediction errors.",[22,5131,5132],{},"Complexity burdens comprehension and modification until needed. Fowler explains, 'A complex design is more difficult to understand than a simple one. Therefore any modification of the system is made harder by added complexity.' YAGNI works only with XP's low change costs; without testing\u002Frefactoring, it invites entropy.",[22,5134,5135],{},"Kent Beck's four simplicity criteria (in order): (1) passes all tests, (2) no duplication, (3) reveals intention (clear, non-clever code), (4) minimal classes\u002Fmethods. No-duplication echoes DRY (Pragmatic Programmer). Revealing intention varies: JUnit's decorators clarify for pattern-savvy developers but confuse novices. Uncle Bob (Robert Martin) advises, 'It's easier to refactor over-design than it is to refactor no design,' prioritizing refactor willingness over perfect simplicity upfront. Refactoring doesn't violate YAGNI—it removes unneeded complexity to stay simple.",[17,5137,5139],{"id":5138},"patterns-and-architecture-evolve-dont-dictate","Patterns and Architecture Evolve, Don't Dictate",[22,5141,5142],{},"Patterns face skepticism in XP, as newcomers overapply them (e.g., 16 patterns in 32 lines). XP evolves into patterns via simple design and refactorings, not forcing them early. Fowler, a patterns advocate, insists they're vital: 'Patterns are a backbone of design knowledge, valuable whatever your process.' Use gradually: start simple, recognize when a pattern fits, weigh its cost. Advice for XP teams: learn patterns deeply, evolve implementations, teach via code reviews\u002Fspikes.",[22,5144,5145],{},"Architecture—core, hard-to-change elements—grows similarly. Avoid BDUF architectures; let them emerge from simple components under refactoring discipline.",[17,5147,5149],{"id":5148},"key-takeaways","Key Takeaways",[5151,5152,5153,5156,5159,5162,5165,5168,5171,5174,5177],"ul",{},[238,5154,5155],{},"Use XP enablers (testing, CI, refactoring) to flatten the change curve, enabling safe evolutionary design over pure code-and-fix.",[238,5157,5158],{},"Balance minimal upfront design (spikes, iteration planning) with heavy refactoring; exact ratio evolves per project.",[238,5160,5161],{},"Follow YAGNI and simple design: implement only current needs to avoid waste and complexity drag.",[238,5163,5164],{},"Judge simplicity by Beck's criteria: tests pass, no duplication, intention-revealing, minimal entities.",[238,5166,5167],{},"Evolve patterns and architecture gradually; know them to recognize and introduce judiciously.",[238,5169,5170],{},"Refactor relentlessly—it's cheaper to simplify over-design than add to under-design.",[238,5172,5173],{},"Anticipate no requirements perfectly; business changes demand adaptable processes.",[238,5175,5176],{},"Prioritize clarity over cleverness; duplication elimination alone yields big wins.",[238,5178,5179],{},"XP doesn't kill design or patterns—it redirects them to evolutionary styles.",[22,5181,5182],{},"Notable quotes:",[5151,5184,5185,5188,5191,5194,5197],{},[238,5186,5187],{},"Kent Beck (via Fowler): 'Design is there to enable you to keep changing the software easily in the long term.' (Highlights design's true purpose, contrasting entropy.)",[238,5189,5190],{},"XP slogans: 'Do the Simplest Thing that Could Possibly Work' and 'You Aren't Going to Need It (YAGNI).' (Core rules preventing over-engineering.)",[238,5192,5193],{},"Robert Martin: 'It's easier to refactor over-design than it is to refactor no design.' (Emphasizes safe erring toward slight over-design.)",[238,5195,5196],{},"Martin Fowler: 'The willingness to refactor is much more important than knowing what the simplest thing is right away.' (Stresses process over perfectionism.)",[238,5198,5199],{},"Joshua Kerievsky (contextual): Patterns under-emphasized in XP, but evolve via simple starts. (Sparks debate on patterns' role.)",{"title":34,"searchDepth":48,"depth":48,"links":5201},[5202,5203,5204,5205,5206],{"id":5099,"depth":48,"text":5100},{"id":5112,"depth":48,"text":5113},{"id":5125,"depth":48,"text":5126},{"id":5138,"depth":48,"text":5139},{"id":5148,"depth":48,"text":5149},[500],{"content_references":5209,"triage":5210},[],{"relevance":60,"novelty":54,"quality":60,"actionability":54,"composite":5211,"reasoning":5212},3.6,"Category: Software Engineering. The article discusses Extreme Programming (XP) as a method to counter software entropy, which directly addresses the audience's pain point of managing design and development processes effectively. It provides insights into practices like automated testing and continuous integration, which are actionable but could benefit from more detailed implementation guidance.","\u002Fsummaries\u002Fxp-enables-evolutionary-design-via-refactoring-and-summary","2026-04-16 03:07:43",{"title":5089,"description":34},{"loc":5213},"4e34a0b2f37369ab","https:\u002F\u002Fmartinfowler.com\u002Farticles\u002FdesignDead.html","summaries\u002Fxp-enables-evolutionary-design-via-refactoring-and-summary",[521,522,523],"Extreme Programming counters software entropy in evolutionary design with testing, continuous integration, refactoring, and simple design rules like YAGNI, balancing minimal upfront planning with ongoing evolution over rigid Big Design Up Front.",[522,523],"GXVbLj7k9Sr7aAVY0NTaCHnVgjMSg64oV2WktYP-SgU",{"id":5225,"title":5226,"ai":5227,"body":5232,"categories":5285,"created_at":501,"date_modified":501,"description":34,"extension":502,"faq":501,"featured":503,"kicker_label":501,"meta":5286,"navigation":509,"path":5308,"published_at":501,"question":501,"scraped_at":5309,"seo":5310,"sitemap":5311,"source_id":5312,"source_name":5080,"source_type":517,"source_url":5313,"stem":5314,"tags":5315,"thumbnail_url":501,"tldr":5316,"tweet":501,"unknown_tags":5317,"__hash__":5318},"summaries\u002Fsummaries\u002Fyagni-skip-presumptive-features-to-minimize-costs-summary.md","YAGNI: Skip Presumptive Features to Minimize Costs",{"provider":7,"model":8,"input_tokens":5228,"output_tokens":5229,"processing_time_ms":5230,"cost_usd":5231},6409,2280,20925,0.0023993,{"type":14,"value":5233,"toc":5280},[5234,5238,5257,5260,5264,5267,5270,5274,5277],[17,5235,5237],{"id":5236},"four-costs-of-building-presumptive-features","Four Costs of Building Presumptive Features",[22,5239,5240,5241,5244,5245,5248,5249,5252,5253,5256],{},"Presumptive features—code for capabilities not yet needed—impose four key costs, even if they prove useful. First, ",[241,5242,5243],{},"build cost"," wastes effort on analysis, coding, and testing something unnecessary, like adding piracy risk pricing to a storm risk pricer 6 months early. Second, ",[241,5246,5247],{},"delay cost"," diverts effort from urgent features; skipping piracy lets you ship storm sales software 2 months sooner, capturing revenue immediately. Third, ",[241,5250,5251],{},"carry cost"," adds complexity that slows all future work—piracy code might delay storm sales by 2 weeks via harder debugging and changes, compounding across features until needed (or forever if removed). Fourth, ",[241,5254,5255],{},"repair cost"," hits when teams learn better implementations later, accruing technical debt from outdated designs.",[22,5258,5259],{},"To counter 'cheaper now' arguments, compare total costs including ⅔ failure odds (from Microsoft analysis: only ⅓ of carefully planned features improved metrics). Mentally simulate later refactoring often reveals it's not much harder—or spot low-cost prep like using lookup tables over literals for future i18n.",[17,5261,5263],{"id":5262},"high-odds-presumptive-features-fail-or-change","High Odds Presumptive Features Fail or Change",[22,5265,5266],{},"Agile embraces changing requirements, so upfront predictions falter—e.g., a navy wiping out pirates kills the need entirely. Even accurate foresight yields wrong implementations as teams learn user needs, tools, and code interactions. Abstractions for future risks (e.g., parameterizing storm pricer for piracy) presume correct designs, but reality mismatches raise complexity without benefit. YAGNI presumes such extensibility guilty if it obscures current code.",[22,5268,5269],{},"Spectrum of failure: fully useless (build cost only), partially useful (carry until activation), or 'right feature, wrong build' (repair debt). Small-scale YAGNI matters too—e.g., delay regex group highlighting until needed; skip unused fields\u002Fmethods. These micro-decisions cumulatively slash codebase complexity and accelerate urgent delivery.",[17,5271,5273],{"id":5272},"yagni-demandsand-reinforcesmalleable-code","YAGNI Demands—and Reinforces—Malleable Code",[22,5275,5276],{},"YAGNI forbids only complexity for unused future capabilities; zero-complexity prep (rare) is fine. Crucially, it excludes investments in changeability: refactoring, self-testing code, and continuous delivery aren't presumptive—they enable YAGNI by keeping code malleable. Without them, delaying features becomes painful, turning YAGNI into a curse.",[22,5278,5279],{},"Failures occur when early cheap changes avert later expensive ones, but these are rare, availability-biased memories; successes (avoided waste) dominate. YAGNI thus both requires and bolsters evolutionary design: build simple now, adapt precisely later.",{"title":34,"searchDepth":48,"depth":48,"links":5281},[5282,5283,5284],{"id":5236,"depth":48,"text":5237},{"id":5262,"depth":48,"text":5263},{"id":5272,"depth":48,"text":5273},[500],{"content_references":5287,"triage":5306},[5288,5294,5299,5303],{"type":5289,"title":5290,"author":5291,"url":5292,"context":5293},"book","Extreme Programming Explained","Kent Beck","https:\u002F\u002Fwww.amazon.com\u002Fgp\u002Fproduct\u002F0321278658\u002Fref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321278658&linkCode=as2&tag=martinfowlerc-20","cited",{"type":5295,"title":5296,"author":5297,"url":5298,"context":5293},"paper","ExPThinkWeek2009Public","Kohavi et al","http:\u002F\u002Fai.stanford.edu\u002F~ronnyk\u002FExPThinkWeek2009Public.pdf",{"type":5065,"title":5300,"author":5301,"url":5218,"context":5302},"Is Design Dead","Martin Fowler","recommended",{"type":5065,"title":5304,"url":5305,"context":5069},"YouArentGonnaNeedIt","http:\u002F\u002Fc2.com\u002Fcgi\u002Fwiki?YouArentGonnaNeedIt",{"relevance":60,"novelty":54,"quality":60,"actionability":60,"composite":507,"reasoning":5307},"Category: Software Engineering. The article discusses the YAGNI principle, which is directly relevant to software engineering and developer productivity by emphasizing the importance of avoiding unnecessary features. It provides actionable insights on minimizing costs and improving delivery speed, addressing pain points related to feature prioritization and technical debt.","\u002Fsummaries\u002Fyagni-skip-presumptive-features-to-minimize-costs-summary","2026-04-15 15:35:26",{"title":5226,"description":34},{"loc":5308},"a515b097e03645cd","https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FYagni.html","summaries\u002Fyagni-skip-presumptive-features-to-minimize-costs-summary",[521,522,523],"Don't build features needed 6 months out now—incur build costs, 2 months revenue delay, ongoing carry costs, and 2\u002F3 chance they're useless or wrong anyway.",[522,523],"4BFeSV3RRD-n2KpA2Nv6w1kb5f1u2Rp170nK3iwkH08"]